虚拟化技术

虚拟化技术:在现有物理主机的基础上创建多个彼此独立的具有完整功能主机的技术。将底层的计算机资源抽象为彼此互相隔离的多组计算平台,每个计算机平台都包含计算机的五大部件:cpu ,mem, IO


image.png
服务器虚拟化支持将多个操作系统作为高效的虚拟机在单个物理服务器上运行
网络虚拟化通过软件定义网络(Software Defined Network,SDN),即网络的创建不再依赖于物理设备,如公有云厂商允许用户自己创建新的网络,在 kubernetes、openstack中都会使用到网络虚拟化。
应用虚拟化将软件虚拟化,比如 office 365,钉钉,企业微信
存储虚拟化SAN(基于磁盘)/NAS(NFS/Samba)/GlusterFS/ceph等
库虚拟化在linux上运行windows 程序使用 wine,在mac系统运行windows程序使用CrossOver等
容器虚技术被称为下一代虚拟化技术,典型代表: Docker、Podman、Linux Container(LXC)、Pouch


虚拟化实现方式

image.png
image.pngimage.png

  1. type-I(裸金属型):
  2. Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可叫做VMM virtual machine monitor),即虚拟机监视器。Hypervisor是所有虚拟化技术的核心。
  3. 实现虚拟化的方面更彻底,更可靠。
  4. 常见软件:xen, vmware ESX/ESXi
  5. type-II(宿主型):
  6. 借助于宿主机的软件来实现各种虚拟机管理
  7. 常见软件:kvm, vmware workstation, virtualbox

虚拟化技术(系统级别)
image.png

云计算

image.png

  • 从表现形式上来讲:
    底层由物理硬件构建出一个环境,在这个环境上运行一个操作系统,对终端用户而言,当我们需要用到一个操作系统或应用实现特殊功能时,它只需要向CloudOS提出申请而就能够立即申请获取一个对应的请求环境,这个环境我们可以随时终止,开启等功能。无需关心它所需要的计算能力从哪里来,有别于传统使用计算机操作系统的状况(看得见、摸得着)。虚拟机资源总容量,不能超过物理资源的容量大小
  • 从本质上来讲:
    云计算是一种资源交付的模式。它的特点是:基于网络、按需付费、弹性拓展。云服务提供商基于有效的网络通信对所有资源进行统一管理,客户对使用的计算资源按需付费,计算资源使用过程中支持弹性拓展,客户只需投入很少的管理工作就可以高效率的使用计算资源。

    云计算实现方式

    image.png ```bash Private:传统/私有方式 优点:所有事情都亲自做,可控 缺点:用户成本比较高,要求自身技术水平高 典型软件:传统物理主机

Iaas:基础设施即服务 优点:底层硬件到操作系统,都不需要用户操心,省事,可以集中精力做业务项目。 缺点:服务商提供的东西,非自己自由定制,所以不可控 典型软件:OpenStack,CloudStack

PaaS:平台即服务 优点:我不会运维,我只会开发,底层到运行环境,都不需要用户操心,省事,可以集中精力做应用项目 缺点:服务商提供的东西,定制太强,不灵活,只适用于特殊的应用项目, 典型软件:Docker、Rocket、Openshift…

SaaS:软件、应用即服务 优点:所有东西都由服务商提供,自己只需要花钱使用就行了,对于广大(大中小)企业来说,SaaS是采用先进技术实施信息化的最好途径。比如说,买企业邮箱,买财务软件云 缺点:对客户来说,所有东西都不可控,安全不安全,看情况。

  1. <a name="d9SAS"></a>
  2. ### 虚拟化和云计算
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12467445/1640443420595-1508f167-ec09-4e33-9030-7ce8eac9ebe4.png#clientId=uf791ca79-1818-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=241&id=u9b44c155&margin=%5Bobject%20Object%5D&name=image.png&originHeight=481&originWidth=1440&originalType=binary&ratio=1&rotation=0&showTitle=false&size=217967&status=done&style=none&taskId=u27ad7612-a1d6-40a6-bc1c-385a0047e42&title=&width=720)<br />👉虚拟化是一种技术,云计算是资源交付模式,云计算不等于虚拟化。云计算是基于虚拟化技术的一种资源交付使用模式
  4. <a name="tLO8w"></a>
  5. ## kvm
  6. KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。它包含一个为处理器提供底层虚拟化可加载的核心模块**kvm.ko**(kvm-intel.ko或kvm-AMD.ko)。在主流的Linux内核2.6.20以上的内核已包含了KVM核心。<br />KVM还需要一个经过修改的QEMU软件(**qemu-kvm**),作为虚拟机上层控制和界面。<br />在电脑运算中,红帽公司的Virtual Machine Manager是一个虚拟机管理员,可以让用户管理多个虚拟机。基于内核的虚拟机libvirt与Virtual Machine Manager。<br />KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
  7. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12467445/1640444564413-ce2256a3-546e-4966-b21e-4751d3575eab.png#clientId=uf791ca79-1818-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=138&id=uc9d2435b&name=image.png&originHeight=276&originWidth=1420&originalType=binary&ratio=1&rotation=0&showTitle=false&size=167008&status=done&style=none&taskId=u42487135-173d-4712-ba11-ad6a51eeb56&title=&width=710)
  8. ```bash
  9. kvm依赖于HVM技术,只能运行在支持硬件虚拟化的CPU上,也就是说CPU支持VT-x或AMD-v,并且只支持x86_64bits系统。只要基于硬件的操作系统内核一旦装载了kvm模块,那么kvm模块就和linux内核组合成了hypervisor,变成了type-I模型的虚拟机。
  10. kvm类似于寄生虫,linux内核一旦被寄宿,就没有自主权,跟着kvm一起变成hypervisor的一部分。原来的用户空间就变成了hypervisor的管理控制台运行位置,而kvm以字符设备/dev/kvm的形式作为kvm整个的调用管理接口。
  11. kvm创建的虚拟机就是一个进程,ps查看,kill杀死
  12. KVM:
  13. 运行在内核空间,提供 CPU和内存的虚级化,以及客户机的 I/O拦截,Guest的部分I/O被KVM拦截后,交给QEMU处理。
  14. 组件:
  15. /dev/kvm:
  16. 工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚 拟机的创建、启动、停止、删除等各种管理功能,可虚拟CPU和内存
  17. qemu-kvm进程:
  18. 工作于用户空间,用于实现IO设备模拟;也用于实现一个虚拟机实例

image.png
image.png

🔣部署安装

1.确保cpu支持HVM    egrep '(vmx|svm)' /proc/cpuinfo
2.确保内核空间携带支持kvm模块    modprobe kvm && modprobe kvm-intel
lsmod | egrep 'kvm|Module'
modinfo kvm && modinfo kvm-intel
3.验证    ls /dev/kvm

qeum-kvm:用户态管理kvm,网卡、声卡、PCI设备等都是需要qemu来管理。
libvirt: 是管理kvm的工具
virt-install: 安装虚拟机用的

image.png

1.安装kvm
qeum-kvm:用户态管理kvm,网卡、声卡、PCI设备等都是需要qemu来管理。
libvirt: 是管理kvm的工具
virt-install: 安装虚拟机用的

apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager virt-viewer
systemctl is-active libvirtd
ps aux | grep -v grep | grep dns
#虚拟机管理目录 /etc/libvirt,其中qemu目录是我们创建虚拟机后,保存虚拟机以及配置文件的目录


2.创建虚拟磁盘
qemu-img create -f raw /opt/CentOS-8-x86_64.raw 10G

3.基于系统镜像和虚拟磁盘来创建虚拟机
wget http://mirrors.neusoft.edu.cn/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-boot.iso -P /tmp
virt-install --virt-type kvm --name CentOS8 --memory 1024 --cdrom=/tmp/CentOS-8.5.2111-x86_64-boot.iso --disk=/opt/CentOS-8-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

要在创建虚拟机命令执行前打开vnc客户端,在创建虚拟机的时候,通过vnc来连接虚拟机进行配置和查看进度!退出全屏的快捷键:Ctrl+Alt+Shift+F
光标移动到“Install Centos8 ...”,通过给内核传递参数,配置网卡
按Tab键,编辑配置,在末尾追加 net.ifnames=0 biosdevname=0,编辑完毕后,直接按Enter

--virt-type kvm 指定创建的虚拟机基于的虚拟化技术
--name CentOS-8-x86_64 指定创建虚拟机的名字,推荐"简洁"
--ram 1024 指定创建虚拟机的内存大小
--cdrom=XX.iso 指定创建虚拟机使用的系统镜像
--disk path=XX.raw 指定创建虚拟机使用的虚拟磁盘
--network network=default 指定创建虚拟机使用的网络类型
--graphics vnc,listen=0.0.0.0 指定访问虚拟机使用的客户端配置信息
--noautoconsole 禁用配置的客户端自动连接虚拟机

4.vnc中虚拟机是不会重启的,需要在宿主机系统中,使用命令开启虚拟机
virsh list --all            每次关闭虚拟机后,再次开启虚拟机,虚拟机的id都会自动的变化
virsh start CentOS8

ifconfig    虚拟机启动后,当前系统中,多出来了一个网卡vnet0,这个vnet网卡没有ipv4的地址
ps aux | grep CentOS    虚拟机本质上就是在宿主机系统上的一个kvm进程,管理虚拟机跟管理进程基本一样

virsh list 列出所有活动的虚拟机
virsh list --all 列出所有活动和不活的的虚拟机
virsh list --transient 列出所有临时的虚拟机
virsh list --persistent 列出所有永久的虚拟机

🔣配置操作

我们创建的虚拟机配置文件都在 /etc/libvirt/qemu

虚拟机配置文件    /etc/libvirt/qemu/CentOS-8-x86_64.xml
网络配置文件    /etc/libvirt/qemu/networks/default.xml

①创建、登录

1.使用配置文件(多个虚拟机使用同一个磁盘文件同一时间只允许启动1个) 

🔣临时创建: 借助于现成的配置文件和之前创建的虚拟机数据,创建一个新虚拟机,他会自动清除
👉virsh create file_name.xml    (配置文件-创建虚拟机-查看)

cd /etc/libvirt/qemu/
cp CentOS8.xml zyy.xml 
vim zyy.xml                                              主要修改的地方就是:虚拟机的名字,uuid)
virsh create /etc/libvirt/qemu/zyy.xml

🔣正规创建: 借助于现成的配置文件在虚拟机管理程序中注册一个新的虚拟机,他不会自动清除,默认创建的虚拟机是关闭着的
👉virsh define file_name.xml    (配置文件-注册虚拟机-开启虚拟机-查看)

virsh denfine zyy-1.xml
virsh start zyy-1

🔣复制创建
cp /opt/CentOS-8-x86_64.raw /opt/zyy.raw
virt-install --virt-type kvm --name zyy --memory 1024 --disk bus=virtio,path=/opt/zyy.raw --network network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart --boot hd

2.修改虚拟机名称(在虚拟机关闭时)
👉virsh domrename Centos8 zyy-centos
1.当我们虚拟机过多的时候,如果想用vnc来连接的话,查询虚拟机VNC端口
👉virsh domdisplay 虚拟机名称
  vnc://localhost:0        #后面的数字n代表虚拟机启动的端口号,特指vnc端口号5900+n

2.在宿主机终端登录虚拟机
开启虚拟机的console功能:使用vnc登录虚拟机,添加ttyS0的许可,然后重启虚拟机
grubby --update-kernel=ALL --args="console=ttyS0"
reboot
👉virsh console 虚拟机名称                ctrl+] 组合键退出

②挂起、恢复

需要对虚拟机进行临时性的“暂停状态”和“恢复状态”
挂起:virsh suspend CentOS8
恢复:virsh resume CentOS8

③关闭、删除

👉virsh shutdown 虚拟机名称
shutdown方法依赖于acpid服务,所以要保证我们的操作系统有acpid服务。对于ubuntu来说,它会自动安装相关软件并运行该服务;对于centos来说,它需要手工安装并启动
yum install acpid -y;systemctl enable --now acpid

使用shutdown关闭的时候,一定要避免资源冲突,特别是基于同一个配置文件创建出来的虚拟机。如果出现这种情况的话,shutdown不管用,使用kill方式关闭或者强制删除方法:ps aux | grep CentOS;kill 6589
正常删除:不影响虚拟机的当前运行状态的删除。- 删除其配置文件,virsh状态表中存在,关闭虚拟机后,状态表中亦删除
👉virsh undefine 虚拟机名称

强制删除:将一个运行中的虚拟机强制关闭。- virsh状态表中直接删除,配置文件不受影响。
👉virsh destroy 虚拟机名称

④备份、编辑

手工修改虚拟机的配置,限制太多。学习虚拟机配置文件的专用的操作功能。

备份
👉virsh dumpxml 虚拟主机名 > backup_vmhost.file
#备份文件如果想在本机使用的话,需要vim修改一下主机名和uuid,才可以

cd /etc/libvirt/qemu
virsh dumpxml CentOS8 > CentOS8-bak.xml 
diff CentOS-8-x86_64.xml CentOS-backup.xml

编辑
👉virsh edit 虚拟主机名
#备份的虚拟机文件如果想要使用virsh edit编辑的话,必须要保证该文件已经注册到虚拟机管理设备中了

⑤开机自启动

默认情况下,创建好的kvm虚拟机不会随宿主机开启而启动,特殊的工作场景中,为了简便工作,我们会将其设置成开机自启动功能
仅限于被注册的虚拟机,临时虚拟机没有该功能

👉开启:virsh autostart 虚拟机名称
👉关闭:virsh autostart --disable 虚拟机名称

virsh list --autostart --all
virsh list --no-autostart --all

🔣存储池管理

为了使虚拟机获得更强大的后端存储能力,libvirt 提供了对各种各样的存储介质支持,包括本地文件系统,网络文件系统,iSCSI,LVM 等多种后端存储系统。在虚拟机中主要以存储池(pool)与存储卷(volume)的形式存在。libvirt 中的存储管理独立于虚拟机管理。也就是存储池和存储卷的操作独立于虚拟机的操作存在,即使是没有虚拟机的场景。工作中我们可以当虚拟机需要存储资源时再进行灵活分配。
KVM平台以存储池的形式对存储进行统一管理。它可以理解为一种映射关系,即将宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机存储资源的统一管理。宿主机的存储空间,可以是本地的、网络的等kvm支持的任意形式。

默认KVM将这些存储池的配置文件存放于/etc/libvirt/storage,因为我在创建虚拟机的时候,涉及到两个目录,所以这两个目录在虚拟机创建的时候,自动有存在了。通过virsh中pool命令能够查看、创建、激活、注册、删除存储池
image.png

存储列表:virsh pool-list
具体信息: virsh pool-info pool_name

创建存储池    ---常见两种创建方法,基于文件夹和文件系统,我们主要介绍基于文件夹的方式。
定义永久池+创建池:virsh pool-define-as + virsh pool-build
创建临时池+启动池:virsh pool-create-as

👉virsh pool-define-as zyy_pool --type dir --target /kvm/images
👉virsh pool-create-as --name vmware_pool --type dir --target /kvm/images
(vmware_pool 定义的存储池名称
 --type dir 我们的类型是一个dir
 --target /kvm/images 存储池的在宿主机上的目录是/kvm/images)

1.基于分区创建存储池:
virsh pool-define-as <存储池名> fs --source-dev <分区名称> --target <挂载目录>
2.基于磁盘创建存储池:
virsh pool-define-as <存储池名> disk --source-dev <磁盘名称> --source-format gpt --target <挂载目录>
3.基于lvm创建存储池:
virsh pool-define-as <存储池名> logical --source-name <vg名称> --target <挂载目录>
4.基于iscsi创建存储池:
virsh pool-define-as <存储池名> iscsi --source-host <存储主机ip> --source-dev <存储目标> --target <挂载目录>
5.基于nfs创建存储池:
virsh pool-define-as <存储池名> netfs --source-host <nfs主机ip> --source-path <nfs共享目录>--target <挂载目录>

永久存储池

mkdir /kvm/images -p
virsh pool-define-as zyy-pool --type dir --target /kvm/images
virsh pool-build zyy-pool

ls /etc/libvirt/storage/
virsh pool-list --all        存储池没有启动,在存储目录中有定义文件

临时存储池

mkdir /zyy/images -p
virsh pool-create-as zyy-linshi-pool --type dir --target /zyy/images

ls /etc/libvirt/storage/
virsh pool-list --persistent        创建的存储池启动成功了,在存储目录中没有定义文件

存储池操作

virsh pool-start zyy-pool                    启动
virsh pool-autostart zyy-pool            开机自启动
virsh pool-list
virsh pool-destroy zyy-pool                关闭存储池
virsh pool-delete zyy-pool                取消存储目录    virsh pool-list
virsh pool-undefine zyy-pool            删除存储池配置文件    ls /etc/libvirt/storage/

🔣存储卷管理

有了存储池,代表我们有存储数据的基本前提了,但是还不能正常使用,需要借助于存储卷才可以
存储卷是一种可以分配给虚拟机使用的存储设备。在虚拟机中与一个挂载点对应,而物理上可以是一个虚拟机磁盘文件或一个真实的磁盘分区。它一般存放在一个专用的存储池中来使用。
存储卷是结合存储池来使用的,所以我们就先来做存储卷的准备工作:创建存储池

mkdir -p /kvm/images 
virsh pool-define-as zyy-pool --type dir --target /kvm/images
virsh pool-start zyy-pool

创建查看

创建新的: virsh vol-create-as

查看列表:virsh vol-list 存储池名称
查看属性:virsh vol-info <存储卷> <存储池>
查看配置:virsh vol-dumpxml <存储卷> <存储池>

👉virsh vol-create-as --pool zyy-pool --name zyy.img --capacity 2G --allocation 1G --format raw
👉virsh vol-list zyy-pool 
👉virsh vol-info zyy.img zyy-pool
Name:           zyy.img
Type:           file
Capacity:       2.00 GiB
Allocation:     1.00 GiB
👉virsh vol-dumpxml zyy.img zyy-pool   查看存储卷配置信息

挂载卸载

虚拟机在需要更多存储空间或者精简存储空间的时候,就遇到了存储卷的挂载和卸载动作

挂载:virsh attach-disk <虚拟机> <存储卷> <挂载设备>        #挂载设备可以是vdx或者sdx,x是从b开始的字母
卸载:virsh detach-disk <虚拟机> <挂载设备>                        #挂载格式可以是vdx或者sdx

virsh attach-disk zyy /kvm/images/zyy.img vdb        #挂载磁盘(从b开始)--临时挂载
virsh console zyy
fdisk -l                                #检查是否有硬盘未被挂载
mkfs.ext4 /dev/vdb            #查看分区
mkdir /zyy
mount /dev/vdb /zyy/        #挂载目录
df -h
dd if=/dev/zero of=/magedu/test.1.txt bs=1M count=200
ll /zyy/

umount /zyy/                        #卸载目录
Ctrl + ]
virsh detach-disk zyy vdb        #卸载磁盘
virsh console zyy
fdisk -l

数据操作

在我们使用数据卷操作的时候,不可避免的涉及到 数据导出、数据清除、数据导入、容量变动 等操作。

1.数据导出:virsh vol-download <存储卷名称> <导出文件名> --pool <存储池>
2.数据清除:virsh vol-wipe <存储卷名称> --pool <存储池>
3.数据导入:virsh vol-upload <存储卷名称> <导出文件名> --pool <存储池>
4.容量变动:virsh vol-resize <已存在的存储卷名称> <新的容量大小> --pool <存储池>

virsh vol-download magedu.img file.txt --pool magedu_pool
virsh vol-wipe magedu.img --pool magedu_pool
virsh vol-upload magedu.img file.txt --pool magedu_pool

virsh vol-resize magedu.img 3G --pool magedu_pool
virsh vol-resize magedu.img 5G --pool magedu_pool        #默认情况下,容量不支持缩容

克隆删除

1.克隆存储卷:virsh vol-clone <已存在的存储卷名称> <新的存储卷名称> --pool <存储池>
2.删除存储卷:virsh vol-delete <已存在的存储卷> <存储池>

virsh vol-clone magedu.img magedu-2.img magedu_pool
virsh vol-delete magedu-2.img magedu_pool

🔣网络管理

kvm类型的虚拟机,默认情况下使用的是nat网络,同一网络模型下创建的多虚拟机之间可以彼此通信,这种网络模型与外界网络进行通信依赖于nat服务,nat服务正常的话,该模型的网络是通过数据包的转换来达到通信的效果的,在网络流量比较大的场景下,该模式的网络模型会成为虚拟机的瓶颈。
生产中我们一般采用桥接的网络模型,这种模型是借助于宿主机的网卡设备,直接与外网进行通信,效果很好。
对于kvm来说,它有两种网络:永久网络和临时网络
image.pngimage.png

virsh net-list
virsh net-list --all
virsh net-info default
virsh net-dumpxml default        #查看网络配置

1.创建网络20??????????? net-create <xml配1置文件>
    永久:virsh net-define <xml配置文件> +开启
2.关闭网络    virsh net-destroy <网络名称>
3.开启网络    virsh net-start <网络名称>
4.删除网络    virsh net-undefine <网络名称>        #需要两步:取消注册+关闭网络

image.png

🔣镜像管理

磁盘模式

根据存储数据方式的不同可以分为两种格式,一种是稀疏模式、一种是全镜像模式,全镜像模式无法做快照,
IO层面是由qemu模拟的,CPU和内存是由KVM实现的
image.png

查看虚拟机支持的磁盘格式种类qemu-img --help
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

1.创建磁盘    qemu-img create [-q] [-f fmt] [-o options] filename [size]
2.查看磁盘    qemu-img info 磁盘名称
3.磁盘转换    qemu-img convert -f 原格式 旧磁盘名称 -O 转换后格式 新磁盘名称

qemu-img create -f raw /opt/CentOS-8-x86_64.raw 3G
qemu-img create -f qcow2 -o backing_file=/kvm/images/magedu.img test-1.qcow2 3G
qemu-img info /opt/CentOS-8-x86_64.raw
cd /opt/
qemu-img convert -f raw CentOS-8-x86_64.raw -O qcow2 CentOS-8-x86_64.qcow2
qemu-img info CentOS-8-x86_64.qcow2

# virsh shutdown CentOS-8-x86_64
# virsh edit CentOS-8-x86_64
37 <disk type='file' device='disk'>
38 <driver name='qemu' type='qcow2'/>
39 <source file='/opt/CentOS-8-x86_64.qcow2'/>
启动虚拟机
virsh start CentOS-7-x86_64

虚拟机克隆

在某些特殊场景下,我们需要批量安装多台虚拟机,目前我们学习的虚拟机安装的方式是逐一的,效率太低了,有什么方法能解决这个痛点呢? — 虚拟机克隆
kvm虚拟机的克隆分为两种情况。
(1) KVM主机本机虚拟机直接克隆。
(2) 通过复制配置文件+磁盘文件的虚拟机复制克隆(适用于异机的静态迁移)

镜像克隆
virt-clone -o <被克隆的虚拟机名称> -n <生成的虚拟机名称> -f <新的磁盘文件>
virt-clone -o <被克隆的虚拟机名称> --auto-clone

virsh shutdown CentOS-8-x86_64
virt-clone -o CentOS-8-x86_64 -n CentOS-8-clone -f /opt/CentOS-8-clone.img
virsh list --all
diff CentOS-8-clone.xml CentOS-8-x86_64.xml    
#克隆的虚拟机创建了新的磁盘文件/配置文件/虚拟机,和源虚拟机的配置文件主要改变的方在:name/uuid/source/mac地址
virsh start CentOS-8-clone
virsh start CentOS-8-x86_64

🔣资源管理

1.热调整:virsh setvcpus <虚拟机名称> <cpu个数> --live
2.CPU绑定:virsh vcpupin <虚拟机名称> <虚拟机CPU号> <宿主机CPU号>
3.CPU重置:virsh shutdown <虚拟机名称>;virsh start <虚拟机名称>

virsh shutdown CentOS-8-x86_64
vim CentOS-8-x86_64.xml 或者 virsh edit CentOS-8-x86_64        #调整配置,让cpu支持动态调整功能
<vcpu placement='static' current='1'>4</vcpu>
virsh start CentOS-8-clone
virsh dominfo CentOS-8-clone
virsh vcpuinfo CentOS-8-clone

virsh setvcpus CentOS-8-x86_64 4            增加cpu后检查
virsh vcpuinfo CentOS-8-x86_64

virsh setvcpus CentOS-8-x86_64 2            删减cpu后检查
virsh vcpuinfo CentOS-8-x86_64
grep vcpu /etc/libvirt/qemu/CentOS-8-x86_64.xml

virsh setvcpus CentOS-8-x86_64 3            调整cpu的时候,同步修改配置
virsh vcpuinfo CentOS-8-x86_64
grep vcpu /etc/libvirt/qemu/CentOS-8-x86_64.xml


virsh shutdown CentOS-8-x86_64                            普通重置CPU
virsh start CentOS-8-x86_64

virsh setvcpus CentOS-8-x86_64 1 --config        同步重置CPU
virsh vcpuinfo CentOS-8-x86_64
grep vcpu /etc/libvirt/qemu/CentOS-8-x86_64.xml

虚拟机内部CPU号绑定
virsh vcpupin CentOS-8-x86_64 0 1 # 将kvm的0号cpu绑定在宿主机的1号cpu上
virsh vcpupin CentOS-8-x86_64 1 0 # 将kvm的1号cpu绑定在宿主机的0号cpu上
查看效果
virsh vcpuinfo CentOS-7-x86_64

问题

Starting install...
ERROR    internal error: process exited while connecting to monitor: 2021-12-25T12:33:37.307114Z qemu-system-x86_64: -drive file=/root/CentOS-8.5.2111-x86_64-boot.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on: Could not open '/root/CentOS-8.5.2111-x86_64-boot.iso': Permission denied

要先在vnc完成安装