KVM虚拟化基本操作

1,虚拟化的一些介绍

虚拟化软件是可以让一台物理主机建立与执行一至多个虚拟化环境的软件,虚拟化将硬件、操作系统和应用程序一同封装一个可迁移的虚拟机档案文件中。

  • 安装位置分类

目前从Hypervisor(虚拟机管理程序)安装位置分类,虚拟化层面包括安装在硬件层上、安装在宿主操作系统层上、安装在内核层上,具体如下:
安装在硬件层上:由Hypervisor直接管理硬件,如VMWare ESXi、微软、思杰KVM、XEN等
安装在内核层上:Hypervisor安装在宿主操作系统内核上,客户操作系统调用宿主操作系统内核,如OpenVZ等
安装在宿主操作系统上:Hypervisor:安装在宿主操作系统上,通过宿主操作系统使用硬件,如VirtualBox、VMWare Workstation等

  • 从虚拟化程度分类,虚拟化技术包括完全虚拟化、半虚拟化、操作系统级虚拟化等,具体如下:

全虚拟化:通过Hypervisor(虚拟机管理程序)来分享底层硬件,客户操作系统无需意识到在虚拟环境运行,受保护的指令由Hypervisor来捕获和处理
特点:全虚拟化最大的优点是操作系统无需任何修改。它的限制则是操作系统必须能够支持底层硬件

半虚拟化:使用Hypervisor(虚拟机管理程序)分享底层的硬件,但客户操作系统集成了虚拟化方面的代码。由于操作系统自身能够与虚拟进程进行很好的协作,无需Hypervisor捕获和处理特殊指令
特点:半虚拟化需要客户操作系统配合Hypervisor做一些修改,性能与原始系统相近。

操作系统级虚拟化:内核与Hypervisor(虚拟机管理程序)集成,操作系统上层与内核共同组成完整操作系统
特点:性能较高,但操作系统只能是Linux(可以是不同版本)

  • libvirt为了更方便地管理平台虚拟化技术而设计的开放源代码的应用程序接口、守护进程和管理工具,提供了对虚拟化客户机的管理、对虚拟化网络和存储的管理

libvirt是目前使用最为广泛的对KVM的虚拟机进行管理的工具盒应用程序接口,而且一些常用的虚拟机管理工具(virsh/virt-install/virt-manager等)和云计算框架平台
(OpenStack,/OpenNebula等)都是在底层使用libvirt的应用程序接口。

2,KVM软件安装

2.1 QEMU软件安装

centos7默认采用 QEMU/KVM的虚拟化方案,所以应该安装 QEMU相关的软件包。可以使用以下命令来检查 QEMU相关的软件包是否安装

[training@centos-template ~]$ rpm -qa | grep '^qemu'

若没有安装,可以使用以下命令完成安装:

[training@centos-template ~]$ yum install qemu-kvm

2.2 KVM软件安装及管理工具安装

libvirt主要由三个部分组成: API库,一个守护进程 libvirtd 和一个默认命令行管理工具 virsh

检查cpu是否支持虚拟化

[training@centos-template ~]$ grep -E 'vmx|svm' /proc/cpuinfo

• vmx是 Intel的 CPU svm是 AMD的 CPU
• 如果有 vmx信息输出,就说明支持 VT;如果没有任何的输出,说明你的 cpu不支持,将无法使用 KVM虚拟机。
检查系统是否加载了 KVM模块

[training@centos-template ~]$ lsmod | grep kvm
kvm_intel             188740  0 
kvm                   637289  1 kvm_intel
irqbypass              13503  1 kvm

没有任何输出,说明没有加载此模块,使用以下命令手动加载

[training@centos-template ~]$ modprobe kvm

libvirt是 应用程序接口、守护进程和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管 理。 libvirt主要由 3个部分组成,分别是:应用程 序编程接口库、一个守护进程( libvirtd 和一个默认命令行管理工具( virsh)

[training@centos-template ~]$ yum install libvirt virt-manager virt-viewer virt-install

virt-manager是虚拟机管理器( Virtual Machine Manager)这个应用程序的缩写,也是该管理工具的软件包名称。 virt-manager是用于管理虚拟机的图形化的桌面用户接口,目前仅支持在 Linux或其他类 UNIX系统中运行。

virt-viewer是 “Virtual Machine Viewer”(虚拟机查看器)工具的软件包和命令行工具 名称,它是一个显示虚拟化客户机的图形界面的工具。

virt-install命令行工具为虚拟客户机的安装提供了一个便捷易用的方式

2.3 KVM服务及日志

libvirtd是作为一个服务( service)配置在系统中的,所以可以通过 systemctl命令来对其进行操作。
启动libvirtd

[training@centos-template ~]$ systemctl start libvirtd
[training@centos-template ~]$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2022-09-16 14:33:25 CST; 17s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 2911 (libvirtd)
    Tasks: 19 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           ├─2911 /usr/sbin/libvirtd
           ├─3017 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─3018 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

虚拟机相关的日志文件如下
• $HOME/.virtinst/virt-install.log virt-install工具日志文件。
• $HOME/.virt-manager/virt-manager.log virt-manager工具日志文件。
• /var/log/libvirt/qemu/ 每个正在运行的虚拟机的日志文件。如果虚拟机名为 centos,那么日志文件是
/var/log/libvirt/qemu/centos.log。

3,KVM软件虚拟化结构

KVM配置文件

libvirt相关的配置文件都在 /etc/libvirt/目录之中 ,如下

[training@centos-template ~]$ sudo ls /etc/libvirt/ -l
[sudo] password for training: 
total 80
-rw-r--r-- 1 root root   450 Apr 28  2021 libvirt-admin.conf
-rw-r--r-- 1 root root   547 Apr 28  2021 libvirt.conf
-rw-r--r-- 1 root root 16529 Apr 28  2021 libvirtd.conf
-rw-r--r-- 1 root root  1175 Apr 28  2021 lxc.conf
drwx------ 2 root root  4096 Sep 16 14:33 nwfilter
drwx------ 3 root root    22 Sep 16 14:24 qemu
-rw-r--r-- 1 root root 30306 Apr 28  2021 qemu.conf
-rw-r--r-- 1 root root  2169 Apr 28  2021 qemu-lockd.conf
drwx------ 2 root root     6 Sep 16 14:33 secrets
-rw-r--r-- 1 root root  3202 Apr 28  2021 virtlockd.conf
-rw-r--r-- 1 root root  3247 Apr 28  2021 virtlogd.conf
  • /etc/libvirt/libvirt.conf 此配置文件 用于配置一些常用 libvirt连接(通常是远程连接)的别名。
  • /etc/libvirt/libvirtd.conf 是 libvirt的守护进程 libvirtd的配置文件,被修改 后需要让 libvirtd重新加载配置文件(或重启 libvirtd)才会生效。
  • /etc/libvirt/qemu.conf qemu.conf 是 libvirt对 QEMU的驱动的配置文件,包括 VNC、 SPICE等,以及连接它们时采用的权限认证方式的配置,也包括内存大页、 SELinux、 Cgroups等相关配置。
  • /etc/libvirt/qemu/目录 该 目录下存放的是使用 QEMU驱动的域的配置文件。

虚拟机配置文件

在使用libvirt对虚拟化系统进行管理时,很多地方都是以 XML文件作为配置文件的,包 括客户机(域)的配置、宿主机网络接口配置、网络过滤、各个客户机的磁盘存储配置、磁盘加密、宿主机和客户机的 CPU特性,等等。

客户机的 XML配置文件格式的示例

<!--
WARNING: THIS IS AN AUTO GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit db01
or o ther application using the libvirt API.
-->
<domain type='kvm'>
  <name>db01</name>
<uuid>2e93f70b 78b0 41d5 b049 06c11e585463</uuid>
<title>192.168.122.21</title
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
...

由上面的配置文件示例可以看到,在该域的XML文件中,所有有效配置都在 和 标签之间,这表明该配置文件是一个域的配置。( XML文档中注释为
) 通过 libvirt启动客户机,经过文件解析和命令参数的转换,最终也会调用 qemu命令行 工具来实际完成客户机的创建。

3.1配置文件说明

<domain type='kvm'>

domain 是一个所有虚拟机都需要的根元素,它有两个属性, type定义使用哪个虚拟机管理程序,值可以是:xen、 kvm、 qemu、 lxc、 kqemu,第二个参数是 id,它唯一的标示一个运行的虚拟机,不活跃的客户端没有id。

<name>db01</name>

name参数为虚拟机定义了一个简短的名字,必须唯一。

<uuid>2e93f70b 78b0 41d5 b049 06c11e585463</uuid>

uuid为虚拟机定义了一个唯一的标示符, uuid的格式必须遵循 RFC 4122指定的格式,当创建虚拟机没有指定 uuid时会随机的生成一个 uuid。

<title>192.168.122.21</title>

title参数提供一个对虚拟机简短的说明,它不能包含换行符。

<vcpu placement='static'>1</vcpu>

vcpu的内容是为虚拟机最多 分配几个 cpu,值处于 1~maxcpu之间 。

<features>
  <acpi/>
  <apic/>
</features>

features标签,表示 Hypervisor为客户机打开或关闭 CPU或其他硬件的特性,这里打开了 ACPI、 APIC等特性。

<os>
  <type arch='x86_64' machine='pc i440fx rhel7.0.0'>hvm</type>
  <boot dev='hd'/>
</os>

type表示客户机类型是 hvm类型 HVM hardware virtual machine,硬件虚拟机)原本是 Xen虚拟化中的概念,它表示在硬件辅助虚拟化技术( Intel VT或 AMD-V等)的支持下不需要修改客户机操作系统就可以启动客户机。因为 KVM一定要依赖于硬件虚拟化技术的支持,所以在 KVM中,客户机类型应该总是 hvm。操作系统的架构是
x86_64。

机器类型是pc-i440fx-rhel7.0.0(这是 libvirt中针对 RHEL 7系统的默认类型,也可以根据需要修改为其他类型)。

boot选项用于设置客户机启动时的设备,这里有 hd(即硬盘)和 cdrom(光驱)两种,而且是按照硬盘、光驱的顺序启动的,它们在 XML配置文件中的先后顺序即启动时的先后顺序。

<memory unit='KiB'>524288</memory>

memory 定义客户端启动时可以分配到的最大内存,内存单位由 unit定义,单位可以是: K、 KiB、 M、 MiB、G、 GiB、 T、 TiB。默认是 KiB。

<currentMemory>1024000</currentMemory>

currentMemory 定义实际分给给客户端的内存她小于 memory的定义,如果 没有定义,值和 memory一致。

3.2 默认网络配置文件

虚拟网络的配置示例如下:

<interface type='network'>
  <mac address='52:54:c7:c1:72:f8'/>
  <source network='default'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

这里type='network’和 表示使用 NAT的方式,并使用默认的网络配置,客户机将会分配到 192.168.122.0/24网段中的一个 IP地址。
在宿主机中,通常会运行着DHCP和 DNS服务器,一般默认使用 dnsmasq软件查询。可以通过以下命令查看相关的进程:

[training@centos-template ~]$ ps -ef | grep dnsmasq
nobody    3017     1  0 14:33 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root      3018  3017  0 14:33 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
training  4011  1768  0 15:28 pts/1    00:00:00 grep --color=auto dnsmasq

由于配置使用了默认的NAT网络配置,可以在 libvirt相关的网络配置中看到一个 default.xml文件( 具体路径为: :/etc/libvirt/qemu/networks/default.xml),它配置了默认的连接方式:

[root@centos-template networks]# pwd
/etc/libvirt/qemu/networks
[root@centos-template networks]# cat default.xml 
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh net-edit default
or other application using the libvirt API.
-->

<network>
  <name>default</name>
  <uuid>cf7dfcaa-686a-49bf-a2dc-5405264a681a</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:b1:10:db'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

3.3默认存储池

在该客户机的XML配置文件中,关于机磁盘的配置如下:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/db01.qcow2'
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>
</disk>

上面的配置表示,使用qcow2格式的 db01.qcow镜像文件作为客户机的磁盘,其在客户机中使用 virtio总线(使用 virtio-blk驱动),设备名称为 /dev/vda。

标签是客户机磁盘配置的主标签,其中包含它的属性和一些 子标签。

• type属性表示磁盘使用哪种类型作为磁盘的来源,其取值为 file、 block、 dir或 network中的一个,分别表示使用文件、块设备、目录或网络作为客户机磁盘的来源。
• device属性表示让客户机如何来使用该磁盘设备,其取值为 floppy、 disk、 cdrom或 lun中的一个,分别表示软盘、硬盘、光盘和 LUN(逻辑单元号),默认值为 disk(硬盘)。

4,虚拟机管理

4.1命令行安装虚拟机

[root@centos-template networks]#  curl -o /tmp/CentOS-7-x86_64-Miniaml-2009.iso 
> https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

上面的镜像可以自行选择下载。

开始安装虚拟机系统

[root@centos-template networks]# virt-install 
> --virt-type kvm 
> --name demo-001 
> --memory 1024 
> --disk /var/lib/libvirt/images/myvm.qcow2,size=10 
> --graphics none 
> --network default 
> --extra-args="console=ttyo console=ttyS0,115200" 
> --location=/tmp/CentOS-7-x86_64-Miniaml-2009.iso 

当出现以下内容后开始配置,“!”感叹号的需要自定义设置。设置完成后按“b”进行系统安装。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfpC14ud-1674010036843)(image-20220916171320417.png)]

  1. Installation Destination 第五项安装系统时,输入c默认安装即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDGLRMTc-1674009412022)(image-20220916171710858.png)]

4.2 虚拟机配置文件 XML文件修改

我之前创建虚拟机是root用户创建的,后来登录时是普通用户,virsh list是看不到创建的虚拟机的。

KVM支持对已有虚拟机配置进行修改,如磁盘大小、 CPU、内存大小等。在 /etc/libvirt/qemu目录下可以看到多个 xml文件,每一个 xml文件都是虚拟机的配置信息, 可以 通过 直接 修改这个文件就可以修改虚拟机的配置。

在修改配置文件后,需要使用virsh define命令更新虚拟机配置 并且 需要重启虚拟机才会生效 。 官方推荐是使用 virsh edit命令来对文件进行编辑,该命令执行后的效果其实和使用 vim打开差不多,如果配置文件有错的话会进行提醒

例如,修改虚拟机的cpu的个数:

[root@centos-template training]# virsh edit demo-001 
···
  <vcpu placement='static'> 2 </vcpu> # 将个数修改为 2
···

退出编辑的方式和vim一致。
更新虚拟机配置

[root@centos-template training]# virsh define /etc/libvirt/qemu/demo-001.xml 
Domain demo-001 defined from /etc/libvirt/qemu/demo-001.xml

即使虚拟机仍处于运行状态也可以执行此命令,只是要到虚拟机重启后,新的配置才会起作用

[root@centos-template training]# virsh reboot demo-001 
Domain demo-001 is being rebooted

进入虚拟机查看cpu数量

[root@centos-template training]# virsh reboot demo-001 
[root@localhost ~]# lscpu

ctrl+] 可以切换回宿主机终端

4.3 vish命令行工具

virsh是 libvirt默认 的 命令行管理工具 ,可以通过 virsh -h来获取帮助

[root@centos-template training]# virsh -h

从帮助页可以看出
virsh命令大概分了 以下组:
Domain Management(域管理 、 Domain Monitoring(域监控)、 Host and Hypervisor(主机及虚拟化)、 Interface(网卡接口)、 Network Filter(网络防火墙)、 Networking(网络)、 Node Device(节点设备驱动)、 Secret、Snapshot(快照)、 Storage Pool(存储池或存储策略)、 Storage Volume(存储卷)、 Virsh itself virsh shell自身相关)
如果查看某一组帮助信息,我们可以使用 virsh help +组名;比如查看 storage volume组相关命令有哪些,可以使用 virsh help volume;

[root@centos-template training]# virsh list
[root@centos-template training]# virsh list --all # --all 选项可以看到 不活跃和活跃的域列表
[root@centos-template training]# virsh start demo-001 
[root@centos-template training]# virsh shutdown demo-001 
[root@centos-template training]# virsh destroy demo-001 
[root@centos-template training]# virsh reboot demo-001 

使用xml文件创建虚拟机

virsh create xxx .xml
virsh define xxx.xml
virsh define :从指定配置文件中创建虚拟,但不运行 ,create 是创建并运行;

取消定义一个虚拟机

virsh undefine xxx

注意:
默认使用 undefine只会把对应配置文件和虚拟机实例删除 。
设置虚拟机开机自启

virsh autostart xxx

4.4访问虚拟机

virsh console命令可以使用命令方式连接到虚拟机中,

[root@centos-template training]# virsh console demo-001 
Connected to domain demo-001
Escape character is ^]

以上命令 可以 连接 centos7虚拟机 的控制台, 若执行命令后 一直处于卡死的状态,是因为 centos7上默认没有允许 ttyS0。
可以通过以下方式解决此问题,前提是必须要有一种方式能连接虚拟机,可以使用
ssh或 virt-manager 等方式进行连接。 连接到虚拟机后,在 /etc/securetty文件中添加 ttyS0

echo " /etc/securetty

更新内核参数,需要重启才能生效

grubby update kernel=ALL args="console=ttyS0"

重启完成后,再次使用virsh console连接

ctrl+] 可以切换回宿主机终端

5,虚拟机镜像

qemu-img用于离线创建、转换和修改磁盘镜像文件。
注意:不要使用qemu-img修改正在运行的虚拟机或任何其他进程使用的镜像,这可能会破坏镜像。
qemu-img命令有众多的子命令,每个子命令都使用不同的语法格式

qeme-img info 命令可以 查看镜像文件的磁盘大小、 backing file、内部快照等详细信息。 例如查看 centos7虚拟机的镜像文件

[root@centos-template training]# qemu-img info /var/lib/libvirt/images/myvm.qcow2 
image: /var/lib/libvirt/images/myvm.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

返回字段说明:
• image info命令中提供的 FILENAME。
• file format 镜像格式。
• virtual size 即虚拟机看到的磁盘大小。
• disk size 该镜像文件在主机文件系统上占用的空间大小。
• cluster_size 该镜像格式的 cluster_size(如果适用)。
• encrypted 该镜像是否加密,只有当加密时才显示。
• cleanly shut down:如果镜像是脏的,将显示 no,并且必须在 qemu 下次打开它时进行自动修复。
• backing file 如果该镜像有 backing file,则显示。
• backing file format backing file 的镜像格式( if the image enforces it)。
• Snapshot list 列出该镜像所有内部快照。
• Format specific information 该镜像格式的特定信息。

  • raw格式

raw格式是一种很早的镜像格式,格式比较原始、简单,性能上也还不错。并且 raw格式镜像的一个突出好处是它支持转换成其他格式的镜像,或者作为其他格式镜像转换的中间格式。但是, raw格式的一个突出缺点就是不支持快照。 raw格式会 立刻分配 磁盘 空间 。

  • qcow2格式

qcow2格式是目前的一种主流镜像格式,性能上与 raw格式相差无几,但是支持虚拟机快照。 qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费

5.1 创建镜像

qemu-img的子命令 create可以用来创建镜像。使用 qemu-img创建镜像有两种方式 :创建全新的镜像和增量镜像。

创建全新的镜像,例如在/tmp目录下创建一个 2G的 qcow2格式的镜像 base.qcow2

[root@centos-template training]# qemu-img create -f qcow2 /tmp/base.qcow2 2G
Formatting '/tmp/base.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@centos-template training]# qemu-img info /tmp/base.qcow2 
image: /tmp/base.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

在qemu-img create子命令中 如果使用了 -b BACKING_FILE选项,则新镜像文件将是 BACKING_FILE 的差异盘,此时不需要指定 SIZE。除非使用 commit 命令把差异盘中的数据提交到 BACKING_FILE 中,否则 BACKING_FILE 永远不会被修改。

[root@centos-template training]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/myvm.qcow2 /tmp/myvm-1.qcow2
Formatting '/tmp/myvm-1.qcow2', fmt=qcow2 size=10737418240 backing_file='/var/lib/libvirt/images/myvm.qcow2' encry
ption=off cluster_size=65536 lazy_refcounts=off 
[root@centos-template training]# qemu-img info /tmp/myvm-1.qcow2 
image: /tmp/myvm-1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: /var/lib/libvirt/images/myvm.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false

5.2 镜像格式转换

qemu-img的 convert子命令可以 将镜像 文件(或其内部快照)从一种镜像格式转换为另一种镜像格式 。

常用选项:
-p 显示进度。
-f 源镜像文件的格式。
-O(大写 o)目标镜像格式 、源镜像文件名称和目标文件名称。
例如,将 qcow2格式的镜像转换为 raw格式的镜像 。

[root@centos-template training]# qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/myvm.qcow2 myvm.raw

将raw格式的镜像转换为 qcow2

[root@centos-template training]# qemu-img convert -p -f raw -O qcow2 myvm.raw myvm.qcow2
    (100.00/100%)

5.3 guestfs修改镜像

libguestfs是用于访问和修改虚拟机的磁盘镜像的一组工具集合。 libguestfs提供了访问和编辑客户机中的文件、脚本化修改客户机中的信息、监控磁盘使用和空闲的统计信息、 P2V、 V2V、创建客户机、克隆客户机、备份磁盘内容、格式化磁盘、调整磁盘大小等非常丰富的功能。

安装 libguestfs

[root@centos-template training]# yum install libguestfs-tools查看镜像中的文件系统

查看镜像中的文件系统

[root@centos-template training]# virt-df /var/lib/libvirt/images/myvm.qcow2 
Filesystem                           1K-blocks       Used  Available  Use%
myvm.qcow2:/dev/sda1                   1038336     107136     931200   11%
myvm.qcow2:/dev/centos/root            8374272    1251956    7122316   15%

将镜像中的文件系统挂载至本地目录

例如:将myvm.qcow2镜像中的系统分区挂载到本地的 /mnt目录中。

[root@centos-template training]# guestmount -a /var/lib/libvirt/images/myvm.qcow2  -m /dev/centos/root --rw /mnt

查看挂载后的目录,可以看到一个 几乎 完整的根文件系统。

[root@centos-template training]# ls /mnt
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

卸载文件系统

[root@centos-template training]# umount /mnt

virt-edit

该命令可以修改虚机或者镜像里面的内容
-d 选项指定虚拟机名称, 也可以直接对虚拟机磁盘文件操作 ,只需要将 -d domname换成 -a path_of_disk_file

[root@centos-template training]# virt-edit -d demo-001 /etc/hosts
[root@centos-template training]# virt-edit -a /var/lib/libvirt/images/centos7.qcow2 /etc/hosts

以上两个命令都可以编辑虚拟机内部的文件

virt-copy-out

此 命令可以把虚拟机里的文件复制 到当前主机中 , 例如 将 centos7虚拟机中的 /etc/hostname文件 复制到当前目录。

[root@centos-template training]# virt-copy-out -d demo-001 /etc/hostname ./
[root@centos-template training]# ls
hostname  myvm.qcow2  myvm.raw
[root@centos-template training]# cat hostname 
localhost.localdomain

virt-copy-in

此命令可以将文件复制到虚拟机里面,用法和 virt-copy-out基本相同

[root@centos-template training]# virt-copy-in -d centos7 /etc/resolv.conf /etc/

virt-cat

可以查看虚拟机中文件的内容

[root@centos-template training]# virt-cat -d demo-001 /etc/hostname
localhost.localdomain

5.4 virt-sysprep 制作虚拟镜像

virt-sysprep工具 也 来自 libguest-tools软件 包 。

移除虚拟机中的私有信息

virt-sysprep命令若不指定参数的,则 移除 所有 的私有信息 私有信息可以通过 --list-operations选项查看。 如
果我们要手动 指定移除哪些操作,可以使用 --enable选项来指定

[root@centos-template training]# virt-sysprep --list-operations
# 例如只删除ssh-userdir和 bash-history,可以使用以下命令:
[root@centos-template training]# virt-sysprep --enable bash-history,ssh-userdir -d demo-001

设置指定虚拟机的主机名

在操作之前先将虚拟机关机

[root@centos-template training]# virsh shutdown demo-001 
Domain demo-001 is being shutdown
[root@centos-template training]# virt-sysprep --hostname test.com -d demo-001
[   0.0] Examining the guest ...
 ...
[root@centos-template training]# virsh start demo-001
Domain demo-001 started
[root@centos-template training]# virt-cat demo-001 /etc/hostname
test.com

6,存储池管理

KVM平台以 存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录、通过远端磁盘阵列iSCSI、 NFS)分配过来磁盘或目录,当然也支持各类分布式文件系统。
默认的存储是在/var/lib/libvirt/images目录下 。

查看存储池

[root@centos-template training]# virsh pool-list
 Name                 State      Autostart 
-------------------------------------------
 images               active     yes       
 tmp                  active     yes       

[root@centos-template training]# virsh pool-list --details
 Name    State    Autostart  Persistent   Capacity  Allocation  Available
--------------------------------------------------------------------------
 images  running  yes        yes         26.98 GiB    2.80 GiB  24.18 GiB
 tmp     running  yes        yes         26.98 GiB    2.80 GiB  24.18 GiB

查看某一存储池的具体信息

[root@centos-template training]# virsh pool-info images
Name:           images
UUID:           81e446ed-3147-4a34-b78a-06691c3fe897
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       26.98 GiB
Allocation:     2.80 GiB
Available:      24.18 GiB

以XML形式查看某一存储池的具体信息

[root@centos-template training]# virsh pool-dumpxml images 
<pool type='dir'>
  <name>images</name>
  <uuid>81e446ed-3147-4a34-b78a-06691c3fe897</uuid>
  <capacity unit='bytes'>28968488960</capacity>
  <allocation unit='bytes'>3004530688</allocation>
  <available unit='bytes'>25963958272</available>
  <source>
  </source>
  <target>
    <path>/var/lib/libvirt/images</path>
    <permissions>
      <mode>0711</mode>
      <owner>0</owner>
      <group>0</group>
    </permissions>
  </target>
</pool>

6.1 存储池创建

采用本地目录方式创建KVM存储池

定义存储池

创建存储池

查看所有存储池

查看vmfspool的状态

# 采用本地目录方式创建KVM存储池
[root@centos-template training]# mkdir -p /data/vmfs
# 定义存储池
[root@centos-template training]# virsh pool-define-as vmfspool --type dir --target /data/vmfs
Pool vmfspool defined
# 创建存储池
[root@centos-template training]# virsh pool-build vmfspool
Pool vmfspool built
# 查看所有存储池
[root@centos-template training]# virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 images               active     yes       
 tmp                  active     yes       
 vmfspool             inactive   no        
# 查看vmfspool的状态
[root@centos-template training]# virsh pool-info vmfspool 
Name:           vmfspool
UUID:           bfa7e49d-8ad6-4408-8ed3-6452c9cb5e46
State:          inactive
Persistent:     yes
Autostart:      no

设置存储池自动启动

[root@centos-template training]# virsh pool-autostart vmfspool
Pool vmfspool marked as autostarted

启动存储池

[root@centos-template training]# virsh pool-start vmfspool
Pool vmfspool started

6.2 存储池使用

存储池被分为存储卷,这些存储卷保存虚拟镜像或连接到虚拟机作为附加存储。

查看存储卷

[root@centos-template training]# virsh vol-list images
 Name                 Path                                    
------------------------------------------------------------------------------
 myvm.qcow2           /var/lib/libvirt/images/myvm.qcow2   

查看存储卷的详细信息

[root@centos-template training]# virsh vol-info /var/lib/libvirt/images/myvm.qcow2 
Name:           myvm.qcow2
Type:           file
Capacity:       10.00 GiB
Allocation:     1.61 GiB

创建存储卷

在images存储池中创建一个 qcow2格式的存储卷,大小为 1G

[root@centos-template training]# virsh vol-create-as images vol.qcow2 1G --format qcow2
Vol vol.qcow2 created
[root@centos-template training]# virsh vol-list images
 Name                 Path                                    
------------------------------------------------------------------------------
 myvm.qcow2           /var/lib/libvirt/images/myvm.qcow2      
 vol.qcow2            /var/lib/libvirt/images/vol.qcow2 

7,管理虚拟机快照

快照前先关机

使用 snapshot创建快照。

创建快照,这里需要注意,如果虚拟机中 使用了 raw格式的磁盘,创建快照时会出错。

[root@centos-template training]# virsh shutdown demo-001 
Domain demo-001 is being shutdown

[root@centos-template training]# virsh snapshot-create-as demo-001 snap-1
Domain snapshot snap-1 created
[root@centos-template training]# virsh snapshot-list demo-001 
 Name                 Creation Time             State
------------------------------------------------------------
 snap-1               2022-09-19 17:09:13 +0800 shutoff

在/var/lib/libvirt/qemu/snapshot目录下,有以虚拟机的域名为名的文件夹, 快照文件存放在此处 。

虚拟机快照还原

[root@centos-template training]# virsh snapshot-revert demo-001 snap-1 

8,云迁移策略

云迁移策略概述

云计算经过最近五年的产品能力完善、云产品持续新增和稳定性逐步增强,使得大家已经能够广泛接受云计算的理念并积极思考如何在自身业务中使用云计算。那么应用迁移上云应该如何操作,2011年Gartner的分析师提出了5R策略,随着后续的不断发展和补充,目前迁移上云的策略被一般认为为6R策略,本课程介绍的六种云迁移策略。

1,Re-Host

重新托管,也称为“直接迁移”,迁移复杂度:中
应用进行云迁移时最常见的策略,即对应用程序运行环境不做改变的情况下迁移上云,一般的操作是P2V(Physical to Virtual,物理机迁移至虚拟机)、V2V(Virtual to Virtual,虚拟机迁移至虚拟机)。在企业期望快速上云或大型应用上云的场景中,这种策略比较合适

2,Re-Platform

更换平台,也称为“修补后迁移”,迁移复杂度:高
在迁移上云时,在不改变应用核心架构的基础上,对应用程序做些简单的云优化。例如将关系型数据库替换成云服务商提供的数据库服务、将自建消息中间件替换成云服务提供的消息队列服务、将HAProxy更换成云服务商提供的负载均衡服务,以此来降低部分管理成本提升效率

3,Re-Purchase

重新购置,也称为“放弃后购买”,迁移复杂度:高
是指放弃使用原先的产品,改为采购新的替代产品,例如原先企业采用传统软件许可模式的人力资源管理系统,将放弃并选用同类SaaS产品来进行替换,抑或是选用了该厂商的SaaS版本

4,Re-Architect

重构/重新构建,迁移复杂度:高
改变应用的架构和开发模式,进行云原生的应用服务实现,例如单体应用向微服务架构改造,这种策略一般是在现有应用环境下难以满足日后功能、性能或规模上的需求时采用,该策略的迁移成本最高,但是长远来看会更为满足未来的需求

5,Retain

保留,迁移复杂度:低
在部分应用或者业务未做好上云准备,或是更为适合本地部署时,保留现状,不强行进行迁移上云操作。应用迁移应该有优先级设定,根据业务发展实际需要来进行操作

6,Retire

停用,迁移复杂度:低
确定不再使用当前的基础设施,表明这部分系统或应用已经没有使用价值且还在持续消息资源,应该进行必要的归档备份后停用

一些步骤

  • 第一阶段评估阶段
    第一步项目启动
    第二步现状梳理
    第三步应用系统关联关系分析

  • 第二阶段设计阶段
    第四步云架构优化设计
    第五步云迁移方案设计

  • 第三阶段实施阶段
    第六步目标架构搭建
    第七步迁移演练及实施
    第八步试运行

T1 制定《迁移策略与标准》
总体迁移策略与流程
迁移批次规划原则
迁移方式选择(逻辑迁移,物理迁移)
数据迁移技术选择(离线迁移,在线迁移)
迁移风险考虑

T2 制定《迁移主计划》
划分批次和时间
制定迁移流程
迁移团队和职责的定义
迁移风险评估和风险控制

T3 为各待迁移应用制定《迁移详细计划》
迁移步骤
验证计划(测试计划)
应急方案和回退计划

T4 为批次或应用制定《迁移演练计划》
沙盘演练
HAProxy更换成云服务商提供的负载均衡服务,以此来降低部分管理成本提升效率

3,Re-Purchase

重新购置,也称为“放弃后购买”,迁移复杂度:高
是指放弃使用原先的产品,改为采购新的替代产品,例如原先企业采用传统软件许可模式的人力资源管理系统,将放弃并选用同类SaaS产品来进行替换,抑或是选用了该厂商的SaaS版本

4,Re-Architect

重构/重新构建,迁移复杂度:高
改变应用的架构和开发模式,进行云原生的应用服务实现,例如单体应用向微服务架构改造,这种策略一般是在现有应用环境下难以满足日后功能、性能或规模上的需求时采用,该策略的迁移成本最高,但是长远来看会更为满足未来的需求

5,Retain

保留,迁移复杂度:低
在部分应用或者业务未做好上云准备,或是更为适合本地部署时,保留现状,不强行进行迁移上云操作。应用迁移应该有优先级设定,根据业务发展实际需要来进行操作

6,Retire

停用,迁移复杂度:低
确定不再使用当前的基础设施,表明这部分系统或应用已经没有使用价值且还在持续消息资源,应该进行必要的归档备份后停用

一些步骤

  • 第一阶段评估阶段
    第一步项目启动
    第二步现状梳理
    第三步应用系统关联关系分析

  • 第二阶段设计阶段
    第四步云架构优化设计
    第五步云迁移方案设计

  • 第三阶段实施阶段
    第六步目标架构搭建
    第七步迁移演练及实施
    第八步试运行

T1 制定《迁移策略与标准》
总体迁移策略与流程
迁移批次规划原则
迁移方式选择(逻辑迁移,物理迁移)
数据迁移技术选择(离线迁移,在线迁移)
迁移风险考虑

T2 制定《迁移主计划》
划分批次和时间
制定迁移流程
迁移团队和职责的定义
迁移风险评估和风险控制

T3 为各待迁移应用制定《迁移详细计划》
迁移步骤
验证计划(测试计划)
应急方案和回退计划

T4 为批次或应用制定《迁移演练计划》
沙盘演练
数据复制/切换演练

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>