KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
-
KVM介绍
- KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),属于内核的一个模块,Linux 2.6.20核心以上的版本中默认带有kvm模块。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)
- kvm虚拟机=kvm模块 + qemu模拟器
- kvm负责分配内存和cpu,qemu负责模拟网络设备和io设备
-
系统初始化
-
检查服务器是否支持虚拟化
1
[root@kvm ~]# egrep '(vmx|svm)' /proc/cpuinfo
-
检查内核中是否加载kvm模块
1 2 3 4
[root@kvm ~]# lsmod | grep kvm kvm_intel 174841 3 kvm 578518 1 kvm_intel irqbypass 13503 3 kvm
-
关闭selinux
1 2 3 4 5
[root@kvm ~]# cat /etc/sysconfig/selinux | grep "SELINUX" # SELINUX= can take one of these three values: SELINUX=disabled # SELINUXTYPE= can take one of three two values: SELINUXTYPE=targeted
-
-
为KVM虚拟机配置桥接网络
-
新建网桥br0,并配置,转移ip到网桥上
1 2 3 4 5 6 7 8 9 10 11
[root@kvm ~]# cd /etc/sysconfig/network-scripts/ [root@kvm network-scripts]# cat ifcfg-br0 TYPE=Bridge BOOTPROTO=none DEFROUTE=yes NAME=br0 DEVICE=br0 ONBOOT=yes IPADDR=192.168.175.6 PREFIX=24 GATEWAY=192.168.175.2
-
配置eth0使用桥接模式
1 2 3 4 5 6 7
[root@kvm network-scripts]# cat ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes BRIDGE=br0
-
-
配置完成后,重启网络服务
1
[root@kvm network-scripts]# systemctl restart network
-
查看ifconfig如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[root@kvm network-scripts]# ifconfig br0 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.175.6 netmask 255.255.255.0 broadcast 192.168.175.255 inet6 fe80::20c:29ff:fe52:20f6 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:52:20:f6 txqueuelen 1000 (Ethernet) RX packets 49 bytes 4628 (4.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 53 bytes 7133 (6.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@kvm network-scripts]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:52:20:f6 txqueuelen 1000 (Ethernet) RX packets 6382 bytes 469272 (458.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8765 bytes 703077 (686.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
安装kvm相关组件
-
安装命令
1
[root@kvm network-scripts]# yum install qemu-kvm python-virtinst virt-* libvirt libvirt-client bridge-utils qemu-img -y
-
-
各组件功能
- kvm模块:qemu-kvm
- 图形界面管理虚拟机:virt-manager
- 网络接口管理工具:bridge-utils
- 虚拟机管理工具:libvirt
- 虚拟机管理工具客户端:libivirt-client
- python组件,记录xml信息:python-virtinst
- qemu组件,创建硬盘,启动虚拟机等:qemu-img
- 虚拟机安装命令:virt-install
-
启动libvirt服务
1
[root@kvm network-scripts]# systemctl start libvirtd && systemctl enable libvirtd && systemctl status libvirt
-
查看系统网络,会自动生成一个桥设备,默认虚拟机和宿主机通信的设备
1 2 3 4 5 6 7 8 9 10 11 12
[root@kvm network-scripts]# ifconfig virbr0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:66:6f:6a txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@kvm network-scripts]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c295220f6 no eth0 virbr0 8000.525400666f6a yes virbr0-nic
-
安装虚拟机
-
创建硬盘设备
1
qemu-img create -f qcow2 /data/vm1.qcow2 5G
-
-
创建虚拟机
1 2
virt-install --virt-type kvm --name vm2 --ram 512 --cdrom=/data/CentOS-7.5-x86_64-DVD-1804.iso --disk path=/data/vm1.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole 注:自行上传iso系统镜像
-
安装tigervnc或者vnc viewe工具可以连接到安装虚拟机图形界面,默认端口5900
-
查看kvm进程
1 2 3 4
[root@kvm ~]# ps -ef | grep kvm root 628 2 0 22:02 ? 00:00:00 [kvm-irqfd-clean] avahi 714 1 0 22:02 ? 00:00:00 avahi-daemon: running [kvm.local] qemu 3070 1 3 22:21 ? 00:01:26 /usr/libexec/qemu-kvm -name vm2 -S -machine pc-i440fx-rhel7.0.0,accelkvm,usb=off,dump-guest-core=off -cpu IvyBridge-IBRS -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid ef1dcbd8-1684-4ae0-9dc7-500d59236911 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-2-vm2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/data/vm1.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:0f:1f:00,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-2-vm2/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0,bus=usb.0,port=1 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
实际上一个虚拟机对于宿主机而言,只是宿主机上的一个进程而已
-
查看虚拟机
1 2 3 4
[root@kvm ~]# virsh list Id Name State ---------------------------------------------------- 2 vm2 running
-
virsh常用命令
1 2 3 4 5 6 7
virsh list --all ##列出所有虚拟机 virsh list ##列出运行中的虚拟机 virsh start vm ##启动虚拟机 virsh shutdown vm ##关闭虚拟机 virsh undfine vm ##销毁虚拟机 virsh console vm1 ##通过console连接虚拟机 virsh edit vm1 ##编辑位于/etc/libvirt/qemu/vm1.xml
- https://www.hiecho.cn/2019/02/27/KVM%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E4%B9%8B%E4%BD%BF%E7%94%A8Qemu-kvm%E5%88%9B%E5%BB%BA%E5%92%8C%E7%AE%A1%E7%90%86%E8%99%9A%E6%8B%9F%E6%9C%BA/