以下所使用的环境为:
虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、虚拟化介绍
虚拟化是指创建虚拟资源,例如:服务器、桌面、操作系统、文件、存储或网络。虚拟化的主要目标是通过从根本上改变传统计算来管理工作负载,从而使其具有可扩展性。目前企业应用比较多的就是虚拟化,包括:服务器虚拟化、桌面虚拟化、应用虚拟化,而虚拟化技术实现资源的逻辑抽象和统一表示。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
1. 主机虚拟化
- 应用程序运行环境强隔离
- 虚拟机操作系统和底层操作系统无关化
- 虚拟机内部操作不会影响到物理机
- 拥有操作系统会占用部署资源及存储
- 网络传输效率低
- 当应用程序需要调用硬件响应用户访问时间延迟大
2. 容器虚拟化
- 可以实现应用程序的隔离
- 直接使用物理机的操作系统可以快速响应用户请求
- 不占用部署时间
- 占用少量磁盘空间
- 学习成本增加、操作控制麻烦、网络控制和主机虚拟化有区别
二、VMware虚拟化
VMware虚拟机与其它虚拟化一样是一个逻辑的计算机,可以运行受支持的客户端操作系统和应用程序的虚拟硬件集。从本质上来说或从存储的角度来看,是一组离散的文件。
虚拟机的文件包括
- **.vmx:**虚拟机配置文件(文本文件)
- **.nvram:**虚拟机BIOS文件(二进制文件)
- **.vmdk:**虚拟磁盘描述文件(仅描述信息)
- **-flat.vmdk:**虚拟磁盘数据文件(实际数据)
- **-rdm.vmdk:**裸设备映射虚拟磁盘文件
- **.vswp/vmx-*.vswp:**vmkernel swap文件,也叫虚拟机交换文件
- **.vmtx:**模板的配置文件(文本文件)
- **.vmsd/.vmsn/-delta.vmdk:**虚拟机快照文件及磁盘delta数据文件
- **.log:**虚拟机日志文件
- **.vmss:**挂起状态文件
三、KVM概述
KVM是基于内核的虚拟机,是基于虚拟化扩展的X86硬件的开源Linux原生的全虚拟化方案(要求CPU支持 Intel-VT-x 或 AMD-V)。KVM内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行。虚拟机被实现为常规的Linux进程,由标准Linux调度程序进行调度虚拟机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KVM 能够使用 Linux 内核的已有功能,但 KVM 本身不执行任何模拟。需要客户空间程序(虚拟机)通过/dev/kvm(此虚拟设备需要开起硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间,并且由 Qemu 模拟 I/O(ioctl)进行调度资源和维护管理。
KVM虚拟化架构的三种模式
- 客户模式(guestOS)
- VM中的操作系统为GuestOS,客户机在操作系统中运行的模式,客户机分为内核模式和用户模式
- 用户模式
- 为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下(Qemu的主要功能)
- Linux内核模式
- 模拟CPU、内存,实现客户模式切换,处理从客户模式的退出,KVM运行在此模式下
四、KVM安装
1. 检查本机CPU是否支持虚拟化
- intel:最新Linux内核的Intel处理器(含VT虚拟化技术)vmx nx lm
- AMD:含SVM安全虚拟机技术的AMD处理器,也叫 AMD-V svm nx lm
查看本机CPU是否支持虚拟化,在输出的内容中包含“svm”是AMD处理器虚拟机技术标志;“vmx”是Intel处理器虚拟机技术标志
egrep "(vmx|svm)" /proc/cpuinfo
如果是在VMware虚拟环境下,可以查看是否勾选【虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)】
2. 安装虚拟化组软件包
列出本机所有的软件包组
yum grouplist
安装【Virtualization Host】虚拟化主机软件包组
yum groupinstall -y "Virtualization Host"
3. 安装虚拟化管理工具
virsh是用于管理虚拟化环境中客户机和Hypervisor的命令工具,是libvirt-client软件包提供的。virsh使用起来virt-manager命令十分类似,都是系统管理员通过脚本程序实现虚拟化自动部署和管理工具。
yum provides virsh
virt-manager是一个类似于VMware的一个图形界面的虚拟机管理器,在安装软件包组的时候默认不安装,需要额外安装
yum install -y virt-manager
4. 安装Web控制台cockpit
Web控制台旨在管理和监视本地系统以及位于网络环境中的Linux服务器。Web控制台可以执行多种管理任务,包括:
- 管理服务、用户账户
- 管理和监视系统服务
- 配置网络接口和防火墙
- 查看系统日志
- 管理虚拟机
- 创建诊断报告、设置内核转储设置
- 配置SELinux、更新软件和管理系统订阅
查看Web控制台是否安装
yum info cockpit
cockpit的每个功能可以理解为是一个组件
yum search cockpit
安装cockpit-machines
yum install -y cockpit-machines
启动cockpit服务,然后访问Web控制台
systemctl status cockpit.service
http://localhost.com
五、新建虚拟机
安装虚拟化客户操作系统的UI界面
yum install -y virt-viewer
1. 通过虚拟机管理器(Virtu-manager)新建虚拟机
[Step1]:
启动Virtual Machine Manager有两种方式打开
[Step2]:
新建虚拟机:选择如何安装操作系统
[Step3]:
新建虚拟机:设置虚拟机的安装光盘和安装系统类型
[Step4]:
新建虚拟机:设置虚拟机的内存和CPU
[Ste5]:
新建虚拟机:设置虚拟机的磁盘
[Ste6]:
新建虚拟机:设置虚拟机的名称及网络
[Ste7]:
新建虚拟机:等待虚拟机的创建
5.2 通过cockpit新建虚拟机
[Step1]:
安装virt-install软件包
yum install -y virt-install
[Step2]:
登录cockpit
[Step3]:
创建虚拟机
[Step4]:
填写相关参数
[Step5]:
稍等片刻后,会出现VNC控制台,然后按照提示继续下一步安装即可
3. 通过virt-install命令创建虚拟机
[Step1]:
创建虚拟机使用 virt-install 命令
virt-install --name server03 --memory 2048 --vcpus 2 --disk size=20 --os-variant kylin10.0 --cdrom /dev/sr0 --graphics vnc,port=5980,password=Kylin2024 --network network=default
- **–name server03:**指定创建的虚拟机名称
- **–memory 2048:**内存容量,默认单位是MB
- **–vcpus 2:**虚拟机CPU的数量,不可能超过主机的核心数
- **–disk size:**虚拟机的磁盘容量,默认单位GB
- **–os-variant Kylin10.0:**虚拟机系统版本
- **–cdrom:**指定光驱中的光盘
- **–graphics vnc,port=5980,password=Kylin2024:**VNC设置
- **–network network=default:**网络设置
六、KVM管理工具(virsh命令)
获取服务器主机的内存信息
virsh nodememstats
获取客户端虚拟机监控程序的CPU信息
virsh nodecpustats
获取客户端虚拟机的数量信息
获取可用于客户端的所有网络信息
虚拟机的启停
virsh start server01 # 开启虚拟机
virsh reboot server01 # 重启虚拟机,前提是虚拟机必须是启动状态
virsh shutdown server01 # 关闭虚拟机
virsh destroy server01 # 强制关闭虚拟机
virsh suspend --domain server01 # 挂起虚拟机
virsh resume --domain server01 # 恢复虚拟机
七、虚拟机模板
1.模板概述和作用
模板类似于生活中的模具,可以工具模具制作出很多一模一样的产品。在KVM中,虚拟机模板同样可以批量生成虚拟机。缩短部署时间,提高工作效率。
2.生成虚拟机模板
[Step1]:
关闭虚拟机,这里以server01为例
virsh shutdown server01
[Step2]:
以server01为模板生成虚拟机server04
cd /var/lib/libvirt/images/
cp server01.qcow2 server04.qcow2 # 其实可以将qcow2文件理解为就是虚拟机
virt-install --name server04 --memory 2048 --vcpus 2 --disk /var/lib/libvirt/images/server04.qcow2,bus=virtio,format=qcow2 --import --os-variant kylin10.0 --network network=default # 生成虚拟机
八、虚拟机快照管理
虚拟机快照的创建方式有两种
- LVM快照
- 基于qcow2磁盘格式创建快照
1. 基于KVM的虚拟机快照
KVM快照是基于LVM快照来实现的,虚拟机使用的是快照盘,还原虚拟机就是基于原盘再做一次快照,继续使用快照即可。
[Step1]:
关闭虚拟机,此处以server01为例
virsh shutdown server01
[Step2]:
新建了1块硬盘50G硬盘
lsblk
[Step3]:
创建物理卷设备,将三块硬盘加入到物理卷
pvcreate /dev/sdb
[Step4]:
创建卷组myvg,将sdb加入到卷组中
vgcreate myvg /dev/
[Step5]:
创建逻辑卷mylv,逻辑卷大小为myvg全部大小
lvcreate -n mylv -L 40G myvg
[Step6]:
格式化硬盘,新建挂载点/kvm_snap
mkdir /kvm_snap
mkfs.ext4 /dev/myvg/mylv
mount /dev/myvg/mylv /kvm_snap/
[Step7]:
对逻辑卷mylv生成快照
lvcreate -n mylv_snap -L 40G -s /dev/myvg/mylv
2. KVM自带的快照功能
创建快照的命令:snapshot-create-as
[Step1]:
为虚拟机server01新建快照 server01_bak
virsh snapshot-create-as server01 server01_bak
- **virsh snapshot-create-as:**新建快照
- **server01:**虚拟机名称
- **server01_bak:**虚拟机快照名
[Step2]:
查看指定虚拟机的快照
virsh snapshot-list server01
- **virsh snapshot-list:**查看虚拟机的所有快照
- **server01:**虚拟机名称
[Step3]:
查看快照信息
virsh snapshot-info --doamin server01 --snapshotname server01_bak
- **virsh snapshot-info:**查看快照的信息
- **–domain server01:**虚拟机名称
- **–snapshotname server01_bak:**快照名称
[Step4]:
还原快照
virsh snapshot-revert --domain server01 --snapshotname server01_bak
**virsh snapshot-revert:**还原快照信息
**–domain server01:**虚拟机名称
**–snapshotname server01_bak:**快照名称
[Step5]:
删除快照
virsh snapshot-delete --domain server01 --snapshotname server01_bak
- **virsh snapshot-delete:**删除快照
- **–domain server01:**虚拟机名称
- **–snapshotname server01_bak:**快照名称
九、虚拟机克隆
KVM中的虚拟机克隆和VMware中的虚拟机克隆方式差不多,均存在两种克隆方式
- 完整克隆:对原始虚拟机完整拷贝,删除原始虚拟机,对克隆机器不影响,但是需要较多的空间
- 链接克隆:对原始虚拟机(磁盘)的链接,原始虚拟机删除,链接会失效
1. 完整克隆
完整克隆和创建模板的方式一样,直接复制磁盘文件。
2. 自动克隆
KVM提供了克隆命令–virt-clone,克隆的时候必须关闭虚拟机
[Step1]:
克隆虚拟机
virt-clone --auto-clone -o server01 -n server02
- **virt-clone:**创建克隆
- **–auto-clone:**自动克隆
- **-o server01:**原始虚拟机
- **-n server02:**克隆后的虚拟机
3. 手动克隆
[Step1]:
复制一个磁盘
cd /var/lib/libvirt/images/
cp server01.qcow2 server03.qcow2
[Step2]:
导出server01的xml文件,将文件中的唯一性配置删除
virsh dumpxml --domain server01 > ../qemu/server03.xml
vim ../qemu/server03.xml
# 删除下列参数
<uuid>d268c29b-43d5-4d78-bfdd-edebf3cc647a</uuid>
<mac address='52:54:00:a2:6a:19'/>
# 修改下列参数
<name>server03</name>
<source file='/var/lib/libvirt/images/server03.qcow2'/> # 磁盘路径
[Step3]:
将xml文件导入虚拟机中
cd ../qemu/
virsh define --file server03.xml --validate
- **virsh define:**从XML文件定义域
- **–file server03.xml:**指定xml文件的路径
- **–validate:**针对模式验证XML
4. 链接克隆
[Step1]:
创建链接克隆磁盘,磁盘格式必须是qcow2
qemu-img create -b /var/lib/libvirt/images/server01.qcow2 -f qcow2 /var/lib/libvirt/images/server04.qcow2
- **qemu-img create:**创建新的镜像文件
- **-b /var/lib/libvirt/images/server01.qcow2:**指定基础镜像的路径,这里会对server01.qcow2进行增量备份,只保存差异部分,而不是整个镜像的完整备份
- **-f qcow2:**指定镜像文件的格式为qcow2
- **/var/lib/libvirt/images/server04.qcow2:**新创建的镜像文件的路径和名称
[Step2]:
查看磁盘的详细信息
[Step3]:
生成xml文件,修改xml文件内容
virsh dumpxml --domain server01 > /var/lib/libvirt/qemu/server04.xml
vim /var/lib/libvirt/qemu/server04.xml
# 删除下列内容
<uuid>d268c29b-43d5-4d78-bfdd-edebf3cc647a</uuid>
<mac address='52:54:00:a2:6a:19'/>
# 修改下列内容
<name>server04</name>
<source file='/var/lib/libvirt/images/server04.qcow2'/>
[Step4]:
将xml文件导入虚拟机
virsh define /var/lib/libvirt/qemu/server04.xml
[Step4]:
验证:启动虚拟机
virsh start server04
[Step4]:
开启虚拟机控制台链接,默认是开启的但不是开机自启,可以设置为开机自启
systemctl enable --now serial-getty@ttyS0.service
[Step5]:
链接到虚拟机server04,因为server01是图形界面的,所以不会显示控制台
virsh console server04
十、KVM网络管理
1. 网络类型介绍
KVM一共存在4种网络类型
- **隔离模式:**虚拟机之间组建网络,隔离模式无法和宿主机通信,无法和其它网络通信,相当于虚拟机只是连接在一台交换机上。有点类似VMware中的【LAN区段】
- **路由模式:**相当于虚拟机连接到一台路由器上, 由路由器(物理网卡)统一转发,但是不会改变源地址
- **NAT模式:**NAT模式将源地址转换为路由器(物理网卡)地址,这样其它主机也知道报文来自哪台主机,在docker环境中常用。NAT网络是虚拟机默认的网络,在安装好KVM后自动会添加一块网卡。
- **桥接模式:**在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机
2. NAT网络
NAT网络是虚拟机默认的网络,安装好KVM就会有一个网卡。默认使用的地址192.168.122.0/24
ip add show virbr0
virbr0是一个网桥,接收所有到网络192.168.122.0./24的内容
brctl show