|
以下所使用的环境为:
虚拟化软件: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. 安装虚拟化组软件包
列出本机所有的软件包组
安装【Virtualization Host】虚拟化主机软件包组
- yum groupinstall -y"Virtualization Host"
复制代码 3. 安装虚拟化管理工具
virsh是用于管理虚拟化环境中客户机和Hypervisor的命令工具,是libvirt-client软件包提供的。virsh使用起来virt-manager命令十分类似,都是系统管理员通过脚本程序实现虚拟化自动部署和管理工具。
virt-manager是一个类似于VMware的一个图形界面的虚拟机管理器,在安装软件包组的时候默认不安装,需要额外安装
- yum install-y virt-manager
复制代码
4. 安装Web控制台cockpit
Web控制台旨在管理和监视本地系统以及位于网络环境中的Linux服务器。Web控制台可以执行多种管理任务,包括:
管理服务、用户账户 管理和监视系统服务 配置网络接口和防火墙 查看系统日志 管理虚拟机 创建诊断报告、设置内核转储设置 配置SELinux、更新软件和管理系统订阅
查看Web控制台是否安装
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 --memory2048--vcpus2--disksize=20 --os-variant kylin10.0 --cdrom /dev/sr0 --graphics vnc,port=5980,password=Kylin2024 --networknetwork=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命令)
获取服务器主机的内存信息
获取客户端虚拟机监控程序的CPU信息
获取客户端虚拟机的数量信息
获取可用于客户端的所有网络信息
虚拟机的启停
- virsh start server01 # 开启虚拟机virshreboot server01 # 重启虚拟机,前提是虚拟机必须是启动状态virshshutdown server01 # 关闭虚拟机virsh destroy server01 # 强制关闭虚拟机virshsuspend--domain server01 # 挂起虚拟机virsh resume --domain server01 # 恢复虚拟机
复制代码 七、虚拟机模板
1.模板概述和作用
模板类似于生活中的模具,可以工具模具制作出很多一模一样的产品。在KVM中,虚拟机模板同样可以批量生成虚拟机。缩短部署时间,提高工作效率。
2.生成虚拟机模板
[Step1]: 关闭虚拟机,这里以server01为例
[Step2]: 以server01为模板生成虚拟机server04
- cd /var/lib/libvirt/images/
- cp server01.qcow2 server04.qcow2 # 其实可以将qcow2文件理解为就是虚拟机
- virt-install --name server04 --memory2048--vcpus2--disk /var/lib/libvirt/images/server04.qcow2,bus=virtio,format=qcow2 --import --os-variant kylin10.0 --networknetwork=default # 生成虚拟机
复制代码 八、虚拟机快照管理
虚拟机快照的创建方式有两种
1. 基于KVM的虚拟机快照
KVM快照是基于LVM快照来实现的,虚拟机使用的是快照盘,还原虚拟机就是基于原盘再做一次快照,继续使用快照即可。
[Step1]: 关闭虚拟机,此处以server01为例
[Step2]: 新建了1块硬盘50G硬盘
[Step3]: 创建物理卷设备,将三块硬盘加入到物理卷
[Step4]: 创建卷组myvg,将sdb加入到卷组中
[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]: 验证:启动虚拟机
[Step4]: 开启虚拟机控制台链接,默认是开启的但不是开机自启,可以设置为开机自启
- systemctl enable--now serial-getty@ttyS0.service
复制代码
[Step5]: 链接到虚拟机server04,因为server01是图形界面的,所以不会显示控制台
十、KVM网络管理
1. 网络类型介绍
KVM一共存在4种网络类型
**隔离模式:**虚拟机之间组建网络,隔离模式无法和宿主机通信,无法和其它网络通信,相当于虚拟机只是连接在一台交换机上。有点类似VMware中的【LAN区段】 **路由模式:**相当于虚拟机连接到一台路由器上, 由路由器(物理网卡)统一转发,但是不会改变源地址 **NAT模式:**NAT模式将源地址转换为路由器(物理网卡)地址,这样其它主机也知道报文来自哪台主机,在docker环境中常用。NAT网络是虚拟机默认的网络,在安装好KVM后自动会添加一块网卡。 **桥接模式:**在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机
2. NAT网络
NAT网络是虚拟机默认的网络,安装好KVM就会有一个网卡。默认使用的地址192.168.122.0/24
virbr0是一个网桥,接收所有到网络192.168.122.0./24的内容
|
|