Linux虚拟化技术KVM
Linux虚拟化技术KVM
KVM部署
安装KVM相关包
server ~]$ apt install -y qemu-kvm virt-manager libvirt-daemon-system
准备ISO镜像文件
server ~]$ mkdir /data/isos
server ~]$ ls /data/isos
CentOS-7-x86_64-Minimal-2207-02.iso
使用图形化工具创建虚拟机
server ~]$ export DISPLAY=192.168.8.1:0.0 #输出画面到物理机的vmware地址
server ~]$ virt-manager #启动图形化virt工具
使用virt-install命令创建虚拟机
#示例:创建一个20GB的qcow2格式虚拟磁盘,名称为centos7
server ~]$ qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20G
server ~]$ ll /var/lib/libvirt/images/centos7.qcow2 -h
-rw-r--r-- 1 root root 193K Apr 21 16:35 /var/lib/libvirt/images/centos7.qcow2
server ~]$ du -h /var/lib/libvirt/images/centos7.qcow2
196K /var/lib/libvirt/images/centos7.qcow2
#查看支持的系统列表
server ~]$ virt-install --osinfo list
#不事先创建虚拟磁盘,之间创建虚拟机
server ~]$ virt-install \
--virt-type kvm \
--os-variant=centos7.0 \
--name centos7 --ram 1024 --vcpus 2 \
--cdrom=/data/isos/CentOS-7-x86_64-Minimal-2207-02.iso \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=10,format=qcow2,bus=virtio \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
#先创建虚拟磁盘,再创建虚拟机 这里使用了桥接网卡
server ~]$ qemu-img create -f qcow2 /var/lib/libvirt/images/rocky8.qcow2 10G
server ~]$ virt-install \
--virt-type kvm --os-variant=rocky9 \
--name rocky9 --memory 1024 --vcpus 2 \
--cdrom=/data/isos/Rocky-9.5-x86_64-minimal.iso \
--disk path=/var/lib/libvirt/images/rocky9.qcow2 \
--network network=bridge:virbr1,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install \
--virt-type kvm --os-variant=ubuntu24.04 \
--name ubuntu1 --memory 1024 --vcpus 2 \
--cdrom=/data/isos/ubuntu-24.04.2-live-server-amd64.iso \
--disk path=/var/lib/libvirt/images/ubuntu1.qcow2 \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
使用virt-clone克隆镜像生成新的虚拟机
server ~]$ virt-clone -o rocky8 #-o 指定要clone的源虚拟机
-n rocky8-1 #-n 创建的新虚拟机名称
-f /var/lib/libvirt/images/rocky8.qcow2 #-f 指定创建的新虚拟机磁盘镜像路径与名称
virsh工具常用选项
systemctl status libvirtd.service #kvm虚拟机服务
systemctl status libvirtd.socket #socket套接字,kvm核心组件,关闭则无法运行虚拟机
virsh list --all #列出所有虚拟机
virsh domrename <旧名称> <新名称> #修改虚拟机名称
virsh undefine win2016 --remove-all-storage #删除虚拟机链接,生产中谨慎删除,建议存放一定时间
virsh start rocky8 #启动rocky8虚拟机
virsh shutdown 1 #关闭id为1的虚拟机
virsh autostart centos8 #虚拟机开机自启
#开机自启其实为生成了对应虚拟机的xml软链接/etc/libvirt/qemu/autostart/
virsh autostart 1 --disable
#查看虚拟机配置,相当于查看/etc/libvirt/qemu/centos8.xml
virsh dumpxml centos8
迁移虚拟机至另一台主机
不支持跨系统或跨linux分支迁移,!!ubuntu-->rocky
server ~]$ virsh domblklist rocky8-template #查看块设备位置
server ~]$ rsync -a /etc/libvirt/qemu/rocky9.xml 192.168.8.15:/etc/libvirt/qemu
server ~]$ scp /var/lib/libvirt/images/rocky9.qcow2 192.168.8.15:/var/lib/libvirt/images/
server2 ~]$ virsh list --all
virt-manager图形化工具
可在启动菜单选择boot option设置虚拟机开机自启或硬件启动顺序
选择Add Connection可连接到远程宿主主机进行虚拟机管理,需要使用ssh key或安装openssh-askpass工具输入密码连接
管理快照
虚拟磁盘及快照管理
qemu-img工具
qemu-img --help|grep Support #查看KVM支持的磁盘格式
check #检查完整性
qemu-img create vm1.img 1G #创建镜像
qemu-img info vm1 #获得信息
commit #提交更改
compare #比较
convert #转换
map #映射
snapshot #快照管理
rebase #在已有的镜像的基础上创建新的镜像
resize #调整大小
amend #修订镜像格式选项
虚拟磁盘格式转换
server ~]$ qemu-img convert -f vmdk \ #-f指定源镜像文件格式为vmdk
-O qcow2 CentOS8.2.vmdk CentOS8.2.qcow2 #-O指定目标镜像文件格式为qcow2
server ~]$ virt-install --import --name=centos8-1 \
--vcpus=1 --ram=2048 --disk bus=scsi,path=/var/lib/libvirt/images/CentOS8.2.qcow2 \
--network network=default --graphics vnc,listen=0.0.0.0 \
--os-type=Linux --os-variant=centos8 --noautoconsole --boot hd
#虚拟磁盘镜像扩容10GB
server ~]$ qemu-img resize /var/lib/libvirt/images/centos8.qcow2 +10G
#扩展磁盘空间后还需要使用fdisk,lvextend等工具扩容逻辑卷及文件系统
#虚拟磁盘镜像缩小2GB --shrink 明确指示要减少磁盘镜像容量
server ~]$qemu-img resize --shrink /var/lib/libvirt/images/centos7.qcow2 -2G
虚拟磁盘快照及kvm虚拟机快照
#创建快照 domain指定要操作的虚拟机名称、ID或UUID
virsh snapshot-create-as --domain <vm_name> <snapshot_name> --description "<描述>"
qemu-img snapshot -c centos7 /var/lib/libvirt/images/centos7.qcow2
#列出所有快照
virsh snapshot-list <vm_name>
qemu-img snapshot -l /var/lib/libvirt/images/centos7.qcow2
#查看快照信息
virsh snapshot-info <vm_name> <snapshot_name>
qemu-img info /var/lib/libvirt/images/rocky9.qcow2
#删除快照
virsh snapshot-delete rocky9 snapshot1
qemu-img snapshot -d /var/lib/libvirt/images/rocky9.qcow2
#恢复快照
virsh snapshot-revert rocky9 snapshot1
qemu-img snapshot -a rocky9 /var/lib/libvirt/images/rocky9.qcow2
windows server 2016的运用
#创建使用win server虚拟机 需要预留足够磁盘空间
server ~]$ virt-install \
--virt-type=kvm \
--name win2016 \
--ram 4096 \
--vcpus=4 \
--os-variant=win2k16 \
--cdrom=/data/isos/cn_windows_server_2016_x64_dvd_9718765.iso \
--network=bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--disk path=/var/lib/libvirt/images/win2016.qcow2,size=20,bus=virtio,format=qcow2 \
--disk path=/data/isos/virtio-win-0.1.141.iso,device=cdrom
#进入系统,安装驱动后使用sysprep工具生成镜像模板
#利用win2016镜像生成新系统
server ~]$ virt-clone -o win2016 \
-f /var/lib/libvirt/images/win2016-1.qcow2 \
-n win2016-2
KVM网络管理
修改KVM默认网段信息
vim /etc/libvirt/qemu/networks/default.xml

环境介绍:
物理机两张网卡
内网switch 仅主机,不能访问外网,内部可通信
ipv4 10.0.0.1
外网switch net模式
ipv4 192.168.8.1
两台vmware虚拟机四张网卡,使用bind多网卡绑定
ubunutu1
bind0 192.168.8.5
- eth0
- eth1
bind1 10.0.0.5
- eth2
- eth3
ubunutu2
bind0 192.168.8.15
- eth0
- eth1
bind1 10.0.0.15
- eth2
- eth3
vmware虚拟机各有两台kvm虚拟机
ubunutu1
vm1 接入bind0,bind1 可访问外网
vm2 接入bind1 仅能访问内网的虚拟机
ubunutu2
vm3 接入bind0,bind1 可访问外网
vm4 接入bind1 仅能访问内网的虚拟机
ubuntu1 ~]#cat /etc/netplan/02-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
eth1:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- eth0
- eth1
addresses: [192.168.8.5/16]
gateway4: 192.168.8.2
nameservers:
addresses: [192.168.8.2]
parameters:
mode: active-backup
mii-monitor-interval: 100
fail-over-mac-policy: active
ubuntu1 ~]#cat /etc/netplan/03-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth2:
dhcp4: no
dhcp6: no
eth3:
dhcp4: no
dhcp6: no
bonds:
bond1:
interfaces:
- eth2
- eth3
addresses: [10.0.0.5/16]
gateway4: 10.0.0.1
nameservers:
addresses: [10.0.0.1]
parameters:
mode: active-backup
mii-monitor-interval: 100
fail-over-mac-policy: active

浙公网安备 33010602011771号