admin 发表于 2018-8-26 18:31:27

CentOS7.3安装kvm并通过CLI创建和管理虚拟机

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的 完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配 器等。
KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT), AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了 另一个独立的虚拟化解决方案:KVM+QEMU。
1)kvm相关安装包及其作用
qemu-kvm         主要的KVM程序包
python-virtinst    创建虚拟机所需要的命令行工具和程序库
virt-manager       GUI虚拟机管理工具
virt-top         虚拟机统计命令
virt-viewer      GUI连接程序,连接到已配置好的虚拟机
libvirt            C语言工具包,提供libvirt服务
libvirt-client   虚拟客户机提供的C语言工具包
virt-install       基于libvirt服务的虚拟机创建命令
bridge-utils       创建和管理桥接设备的工具
2)安装kvm

1)检查cpu是否支持虚拟化
# grep vmx /proc/cpuinfo
如果有vmx信息输出,说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。

2)检查BIOS设置确认已开启虚拟化功能,然后查看系统是否成功加载KVM模块
# lsmod | grep kvm
kvm_intel             1700860
kvm                   5663401 kvm_intel
irqbypass            135031 kvm
=========================================================
如果系统当前没有加载KVM模块,可以运行以下命令来手工加载:
# modprobe kvm
# modprobe kvm-intel

# lsmod | grep kvm
kvm_intel             1700860
kvm                   5663401 kvm_intel
irqbypass            135031 kvm
=========================================================
内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月29 11:56 /dev/kvm

3)桥接网络
当前系统下如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils ,
# yum -y install bridge-utils
# systemctl restart network

配置KVM的网桥模式
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eno1 ifcfg-br0
# cat ifcfg-br0
TYPE="Bridge"                                        //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"                                           //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"         //这一行注释
DEVICE="br0"                                       //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"

# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0                                           //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210"                        //注释掉这几行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"

重启网卡服务
# systemctl restart network

查看网卡
# brctl show
bridge name bridge id   STP enabled interfaces
br0   8000.0894ef518b22 no    eno1
virbr0    8000.52540095d7c2 yes   virbr0-nic

查看ip信息
# ifconfig |head -20
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500
      inet 192.168.10.210netmask 255.255.255.0broadcast 192.168.10.255
      inet6 fe80::a94:efff:fe51:8b22prefixlen 64scopeid 0x20<link>
      ether 08:94:ef:51:8b:22txqueuelen 1000(Ethernet)
      RX packets 856bytes 52981 (51.7 KiB)
      RX errors 0dropped 2overruns 0frame 0
      TX packets 120bytes 23450 (22.9 KiB)
      TX errors 0dropped 0 overruns 0carrier 0collisions 0

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500
      ether 08:94:ef:51:8b:22txqueuelen 1000(Ethernet)
      RX packets 10077bytes 793083 (774.4 KiB)
      RX errors 0dropped 0overruns 0frame 0
      TX packets 1184bytes 228415 (223.0 KiB)
      TX errors 0dropped 0 overruns 0carrier 0collisions 0
      device interrupt 16

eno2: flags=4099<UP,BROADCAST,MULTICAST>mtu 1500
      ether 08:94:ef:51:8b:23txqueuelen 1000(Ethernet)
      RX packets 0bytes 0 (0.0 B)

# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=2.08 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=1.80 ms
........

4)安装libvirt及kvm
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
# yum -y install qemu-kvm libvirt virt-install

启用libvirt
# systemctl enable libvirtd
# systemctl start libvirtd

4)创建虚拟机
提前将ISO系统镜像存放到服务器的一个目录里,比如创建/data/iso目录,并将ISO操作系统镜像拷贝至该目录下。
创建虚拟机镜像文件默认存储路径为/var/lib/libvirt/images目录。

# mkdir -p /var/kvm/images # 创建新的存储池
# virt-install --connect qemu:///system -n test1 -r 256 --vcpus=1 --disk path=/var/kvm/images/test1.img,size=10 -c /date/iso/CentOS-7-x86_64-Minimal-1804.iso --graphics vnc,port=5910,keymap=ja --noautoconsole --os-type linux --accelerate--network bridge=br0 --os-type=linux --os-variant=rhel7.2 -d5)虚拟机管理
1,查看运行的虚拟机

virsh list
2,查看所有的虚拟机(关闭和运行的虚拟机)

virsh list --all
3,连接虚拟机(此方法仅限linux系统,不适于windows虚机)

virsh console +域名(虚拟机的名称)
4,退出虚拟机

ctrl+]
5,挂起虚拟机

virsh suspend +域名
6,恢复被挂起的虚拟机

virsh resume +域名
7,子机随宿主主机(母机)启动而启动

virsh autostart + 域名
8,取消自动启动

virsh auotstart --disable +域名
9,彻底删除虚拟机

(1)删除虚拟机   virsh destroy +域名
(2)解除标记   virsh undefine +域名
(3)删除虚拟机文件
10,启动虚拟机并进入该虚拟机

virsh start 域名 --console
11,查看虚拟机VNC端口号

virsh vncdisplay 虚拟机名字

VNC端口号是从5900开始,通过virsh vncdisplay查询到的10,实际表示的端口号为5910。在VNC-Viewer软件中可以填5910端口也可以填10端口,实际表示的均为5910端口。

6)VNC登陆虚拟机(适用windows/Linux虚拟机)

1, 在创建VM时通过“--graphics vnc,port=5910,”参数已指定了VNC端口,只需要在windows客户端上运行“VNC-Viewer”客户端软件,然后输入虚拟机地址及VNC端口,即可连接至虚拟机并进行管理操作。如图:


2, 当你打开虚拟机的VNC的时候,明明连接成功了,但是VNC窗口一闪就消失了。针对该问题解决办法如下:
依次打开vnc客户端--->依次点击option--->Advanced--->Expert--->找到ColourLevel,默认的值是pal8,修改为rgb222或full.如下图:





7)VNC端口不通问题
创建完虚拟机后,通过virsh vncdisplay vm名称 来查看该vm的vnc端口,然后通过vnc viewer客户端连接时无法连接,telnet该vnc端口时提示端口不通。
然后在宿主机上执行netstat -lnp |grep 5911提示如下:

以上结果显示,5911端口只开放给了127.0.0.1地址,网卡实际地址并未开放此端口。

解决办法:
vim /etc/libvirt/qemu.conf,然后找到#vnc_listen = "0.0.0.0",将前面的#号去掉,并保存文件。

reboot重启服务器或者直接重启libvirt服务(systemctl restart libvirtd)。

此时在通过netstat -lnp |grep 5911查看是,提示如下:

此时再用vnc viewer客户端连接时,发现可以成功连接。

恭喜少侠!你已掌握KVM基本操作技能。


页: [1]
查看完整版本: CentOS7.3安装kvm并通过CLI创建和管理虚拟机