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

posted @ 2025-06-18 23:01  公共热点  阅读(48)  评论(0)    收藏  举报