KVM虚拟化基本操作

news2024/11/24 2:37:54

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 为批次或应用制定《迁移演练计划》
沙盘演练
数据复制/切换演练

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[linux] 进程相关概念理解

文章目录1. 什么是进程管理本质的解释描述组织结论2.查看进程查看进程方法1创建终端输入命令显示进程一个程序存在多个进程查看进程方法2查看成功查看失败结论3.通过系统调用获取进程标识符1.获取PID值验证PID值是否正确2. 获取父进程PID值验证3. 父进程为什么不变化&#xff1…

Vue3实现九宫格抽奖效果

前言 好久没有写文章了&#xff0c;上一次发文还是年终总结&#xff0c;眨眼间又是一年&#xff0c;每每想多总结却是坚持不来&#xff0c;难顶。  这次分享一个九宫格抽奖小游戏&#xff0c;缘起是最近公司内部做积分抽奖需求&#xff0c;抽出其中抽奖动效做一个总结&#x…

利用steam搬砖信息差项目,投入不到1万,一个月净赚3万+

老实说&#xff1a;我在做之前没有任何经验&#xff0c;但做梦也没想到&#xff0c;刚开始操作收益就远远超出我的预期&#xff01; 这个账号我才运营了一个月左右&#xff0c;就有3万多的销售额。现在我每月的收入都在上万元&#xff0c;而且随着收益越来越多&#xff0c;操作…

亚马逊云科技re:Invent引领云计算未来方向

亚马逊云科技合作伙伴网络大使计划&#xff0c;吸纳拥有多项亚马逊云科技认证和深入亚马逊云科技知识的合作伙伴成员&#xff0c;协助其成为各个领域的技术专家&#xff0c;开发可供公众使用的内容&#xff0c;如技术写作、博客、开源项目&#xff0c;宣传亚马逊云科技及其合作…

JavaWeb基础(四) JSP介绍

JavaWeb基础(四) JSP介绍 1&#xff0c;JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS等静态内容&#xff0c;还可以定义 Java代码的动态内容&#xf…

.shp文件的存储结构是怎样的?底层读取shapefile文件

.shp文件的存储结构是怎样的&#xff1f;底层读取shapefile文件基础知识shp的存储结构python 字节流读取Shp文件基础知识 大家都比较熟悉shp文件&#xff0c;它是GIS软件可以读取的矢量文件。但是大家知道它的存储结构吗&#xff1f;这次带着大家聊聊shp文件的存储结构&#x…

Linux diff 命令

Linux diff 命令用于比较文件的差异。diff 以逐行的方式&#xff0c;比较文本文件的异同处。如果指定要比较目录&#xff0c;则 diff 会比较目录中相同文件名的文件&#xff0c;但不会比较其中子目录。语法diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D…

【Java】【系列篇】【Spring源码解析】【三】【体系】【Resource体系】

主要用于加载配置资源等等Resource 前提须知 ClassLoader类的getResource和getResourceAsStream方法是原生JDK中内置的资源加载文件的方式&#xff1b;Spring中资源模型顶级接口不是Resource&#xff0c;而是InputStreamSource接口&#xff1b;Spring为何自己实现一套资源加载…

Nessus 扫描web服务

系列文章 Nessus介绍与安装 Nessus Host Discovery Nessus 高级扫描 Nessus 扫描web服务 1.启动nessus cd nessus sh qd_nessus.sh2.进入nessus网站 https://192.168.3.47:8834/3.点击【New Scan】 4.点击【Web应用程序测试】 5.输入name【web扫描】&#xff0c;描述【web…

Lesson 2. 矩阵运算基础、矩阵求导与最小二乘法

文章目录一、NumPy 矩阵运算基础1. NumPy 中的矩阵表示2. NumPy 中特殊矩阵构造方法3. NumPy 中矩阵基本运算4. NumPy 中矩阵代数运算二、矩阵方程与向量求导方法1. 方程组求解与矩阵方程求解2. 向量求导运算2.1 向量求导基本方法2.2 常见向量求导公式三、最小二乘法的推导过程…

Vue3 函数式组件的开发方式

声明式组件和服务式组件 无论是使用第三方组件库&#xff0c;还是自己封装组件&#xff0c;有一类组件有些与众不同&#xff0c;那就是函数式/服务式组件&#xff0c;比如 Message 消息组件、Notification 通知组件、Loading 加载组件等等。 以 ElementPlus 组件库为例&#…

.net反序列化新手入门--Json.Net

**01 **Json.net简介 Json.net即Newtonsoft.Json&#xff0c;是.Net中开源的Json序列化和反序列化工具&#xff0c;官方地址&#xff1a;http://www.newtonsoft.com/json。 它虽然不是官方库&#xff0c;但凭借其优秀的性能获得了广大开发者的喜爱。 官网给出的性能比较&…

8大预测分析工具比较

什么是预测分析工具&#xff1f; 预测分析工具融合了人工智能和业务报告。这些工具包括用于从整个企业收集数据的复杂管道&#xff0c;添加统计分析和机器学习层以对未来进行预测&#xff0c;并将这些见解提炼成有用的摘要&#xff0c;以便业务用户可以对此采取行动。 预测的…

day17集合

1.Set集合 1.1Set集合概述和特点【应用】 不可以存储重复元素没有索引,不能使用普通for循环遍历 1.2Set集合的使用【应用】 存储字符串并遍历 public class MySet1 {public static void main(String[] args) {//创建集合对象Set<String> set new TreeSet<>()…

超级详细的几道python题(附答案)含解析、建议收藏

名字&#xff1a;阿玥的小东东 学习&#xff1a;python、正在学习c 主页&#xff1a;阿玥的小东东 目录 判断字符串 a “welcome to my world” 是否包含单词 b “world”&#xff0c;包含返回 True&#xff0c;不包含返回 False。 从 0 开始计数&#xff0c;输出指定字符串…

SSH使用入门

目录 .1 基础配置 1.1 vscode使用 1.2 HOST连接 .2 文件传输 .1 基础配置 1.1 vscode使用 拓展里搜索 然后点击remote里的设置 选择配置 然后填写配置 Hostname是你要ssh的服务器的ip地址 user是你要连接的服务器的用户名 Host可以随便写一个 如果有端口号也要对应修改 …

对于KMP的next数组的新发现,好像我们并不用回溯

目录 前言 发现 总结 博客主页&#xff1a;张栩睿的博客主页 欢迎关注&#xff1a;点赞收藏留言 系列专栏&#xff1a;c语言学习 家人们写博客真的很花时间的&#xff0c;你们的点赞和关注对我真的很重要&#xff0c;希望各位路过的朋友们能多多点赞并关注我&#xff0c;我会…

datax数据导入starrocks表报列数量不匹配错误,问题解决思路

背景在做客户数据导入任务的时候&#xff0c;需要将客户oracle的数据通过datax导入到 starrocks的表中&#xff0c;但是datax的配置文件中SQL查找客户数据的列数和要导入的starrocks表的列数都是相同且对应的&#xff0c;但是导入结果就是报了列数不对等的错误&#xff0c;Erro…

把代码贴进去自动找bug,这个debug神器自动修复仅需几秒

在编写程序时&#xff0c;无论是对于初学者还是对于专业开发人员&#xff0c;都会花费大量时间来调试或修复源代码错误&#xff0c;也就是 Debug。 这个过程繁琐复杂&#xff0c;包括 Bug 复现和 Bug 定位等环节。如果有了自动化的 Debug 程序&#xff0c;就可以显著提高编程实…

网络文件服务器:FileVista 8.9.3 Crack

FileVista 用于自托管文件共享的FileVista文件管理器 在几分钟内将您的网站变成一个网络文件服务器。 在您的网站上与您的客户或员工共享文件。 将您的机密文件存储在您自己的服务器上并对其进行完全控制。使您的用户只需使用 Web 浏览器即可从任何地方安全地访问、上传和组织文…