1,虛擬化的一些介紹
虛擬化軟件是可以讓一臺物理主機建立與執(zhí)行一至多個虛擬化環(huán)境的軟件,虛擬化將硬件、操作系統(tǒng)和應(yīng)用程序一同封裝一個可遷移的虛擬機檔案文件中。
- 安裝位置分類
目前從Hypervisor(虛擬機管理程序)安裝位置分類,虛擬化層面包括安裝在硬件層上、安裝在宿主操作系統(tǒng)層上、安裝在內(nèi)核層上,具體如下:
安裝在硬件層上:由Hypervisor直接管理硬件,如VMWare ESXi、微軟、思杰KVM、XEN等
安裝在內(nèi)核層上:Hypervisor安裝在宿主操作系統(tǒng)內(nèi)核上,客戶操作系統(tǒng)調(diào)用宿主操作系統(tǒng)內(nèi)核,如OpenVZ等
安裝在宿主操作系統(tǒng)上:Hypervisor:安裝在宿主操作系統(tǒng)上,通過宿主操作系統(tǒng)使用硬件,如VirtualBox、VMWare Workstation等
- 從虛擬化程度分類,虛擬化技術(shù)包括完全虛擬化、半虛擬化、操作系統(tǒng)級虛擬化等,具體如下:
全虛擬化:通過Hypervisor(虛擬機管理程序)來分享底層硬件,客戶操作系統(tǒng)無需意識到在虛擬環(huán)境運行,受保護的指令由Hypervisor來捕獲和處理
特點:全虛擬化最大的優(yōu)點是操作系統(tǒng)無需任何修改。它的限制則是操作系統(tǒng)必須能夠支持底層硬件
半虛擬化:使用Hypervisor(虛擬機管理程序)分享底層的硬件,但客戶操作系統(tǒng)集成了虛擬化方面的代碼。由于操作系統(tǒng)自身能夠與虛擬進程進行很好的協(xié)作,無需Hypervisor捕獲和處理特殊指令
特點:半虛擬化需要客戶操作系統(tǒng)配合Hypervisor做一些修改,性能與原始系統(tǒng)相近。
操作系統(tǒng)級虛擬化:內(nèi)核與Hypervisor(虛擬機管理程序)集成,操作系統(tǒng)上層與內(nèi)核共同組成完整操作系統(tǒng)
特點:性能較高,但操作系統(tǒng)只能是Linux(可以是不同版本)
- libvirt為了更方便地管理平臺虛擬化技術(shù)而設(shè)計的開放源代碼的應(yīng)用程序接口、守護進程和管理工具,提供了對虛擬化客戶機的管理、對虛擬化網(wǎng)絡(luò)和存儲的管理
libvirt是目前使用最為廣泛的對KVM的虛擬機進行管理的工具盒應(yīng)用程序接口,而且一些常用的虛擬機管理工具(virsh/virt-install/virt-manager等)和云計算框架平臺
(OpenStack,/OpenNebula等)都是在底層使用libvirt的應(yīng)用程序接口。
2,KVM軟件安裝
2.1 QEMU軟件安裝
centos7默認(rèn)采用 QEMU/KVM的虛擬化方案,所以應(yīng)該安裝 QEMU相關(guān)的軟件包??梢允褂靡韵旅顏頇z查 QEMU相關(guān)的軟件包是否安裝
[training@centos-template ~]$ rpm -qa | grep '^qemu'
若沒有安裝,可以使用以下命令完成安裝:
[training@centos-template ~]$ yum install qemu-kvm
2.2 KVM軟件安裝及管理工具安裝
libvirt主要由三個部分組成: API庫,一個守護進程 libvirtd 和一個默認(rèn)命令行管理工具 virsh
檢查cpu是否支持虛擬化
[training@centos-template ~]$ grep -E 'vmx|svm' /proc/cpuinfo
? vmx是 Intel的 CPU svm是 AMD的 CPU
? 如果有 vmx信息輸出,就說明支持 VT;如果沒有任何的輸出,說明你的 cpu不支持,將無法使用 KVM虛擬機。
檢查系統(tǒng)是否加載了 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是 應(yīng)用程序接口、守護進程和管理工具,它不僅提供了對虛擬化客戶機的管理,也提供了對虛擬化網(wǎng)絡(luò)和存儲的管 理。 libvirt主要由 3個部分組成,分別是:應(yīng)用程 序編程接口庫、一個守護進程( libvirtd 和一個默認(rèn)命令行管理工具( virsh)
[training@centos-template ~]$ yum install libvirt virt-manager virt-viewer virt-install
virt-manager是虛擬機管理器( Virtual Machine Manager)這個應(yīng)用程序的縮寫,也是該管理工具的軟件包名稱。 virt-manager是用于管理虛擬機的圖形化的桌面用戶接口,目前僅支持在 Linux或其他類 UNIX系統(tǒng)中運行。
virt-viewer是 “Virtual Machine Viewer”(虛擬機查看器)工具的軟件包和命令行工具 名稱,它是一個顯示虛擬化客戶機的圖形界面的工具。
virt-install命令行工具為虛擬客戶機的安裝提供了一個便捷易用的方式
2.3 KVM服務(wù)及日志
libvirtd是作為一個服務(wù)( service)配置在系統(tǒng)中的,所以可以通過 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
虛擬機相關(guān)的日志文件如下
? $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軟件虛擬化結(jié)構(gòu)
KVM配置文件
libvirt相關(guān)的配置文件都在 /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的驅(qū)動的配置文件,包括 VNC、 SPICE等,以及連接它們時采用的權(quán)限認(rèn)證方式的配置,也包括內(nèi)存大頁、 SELinux、 Cgroups等相關(guān)配置。
- /etc/libvirt/qemu/目錄 該 目錄下存放的是使用 QEMU驅(qū)動的域的配置文件。
虛擬機配置文件
在使用libvirt對虛擬化系統(tǒng)進行管理時,很多地方都是以 XML文件作為配置文件的,包 括客戶機(域)的配置、宿主機網(wǎng)絡(luò)接口配置、網(wǎng)絡(luò)過濾、各個客戶機的磁盤存儲配置、磁盤加密、宿主機和客戶機的 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文件中,所有有效配置都在 和 標(biāo)簽之間,這表明該配置文件是一個域的配置。( XML文檔中注釋為 ) 通過 libvirt啟動客戶機,經(jīng)過文件解析和命令參數(shù)的轉(zhuǎn)換,最終也會調(diào)用 qemu命令行 工具來實際完成客戶機的創(chuàng)建。
3.1配置文件說明
<domain type='kvm'>
domain 是一個所有虛擬機都需要的根元素,它有兩個屬性, type定義使用哪個虛擬機管理程序,值可以是:xen、 kvm、 qemu、 lxc、 kqemu,第二個參數(shù)是 id,它唯一的標(biāo)示一個運行的虛擬機,不活躍的客戶端沒有id。
<name>db01</name>
name參數(shù)為虛擬機定義了一個簡短的名字,必須唯一。
<uuid>2e93f70b 78b0 41d5 b049 06c11e585463</uuid>
uuid為虛擬機定義了一個唯一的標(biāo)示符, uuid的格式必須遵循 RFC 4122指定的格式,當(dāng)創(chuàng)建虛擬機沒有指定 uuid時會隨機的生成一個 uuid。
<title>192.168.122.21</title>
title參數(shù)提供一個對虛擬機簡短的說明,它不能包含換行符。
<vcpu placement='static'>1</vcpu>
vcpu的內(nèi)容是為虛擬機最多 分配幾個 cpu,值處于 1~maxcpu之間 。
<features>
<acpi/>
<apic/>
</features>
features標(biāo)簽,表示 Hypervisor為客戶機打開或關(guān)閉 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虛擬化中的概念,它表示在硬件輔助虛擬化技術(shù)( Intel VT或 AMD-V等)的支持下不需要修改客戶機操作系統(tǒng)就可以啟動客戶機。因為 KVM一定要依賴于硬件虛擬化技術(shù)的支持,所以在 KVM中,客戶機類型應(yīng)該總是 hvm。操作系統(tǒng)的架構(gòu)是
x86_64。
機器類型是pc-i440fx-rhel7.0.0(這是 libvirt中針對 RHEL 7系統(tǒng)的默認(rèn)類型,也可以根據(jù)需要修改為其他類型)。
boot選項用于設(shè)置客戶機啟動時的設(shè)備,這里有 hd(即硬盤)和 cdrom(光驅(qū))兩種,而且是按照硬盤、光驅(qū)的順序啟動的,它們在 XML配置文件中的先后順序即啟動時的先后順序。
<memory unit='KiB'>524288</memory>
memory 定義客戶端啟動時可以分配到的最大內(nèi)存,內(nèi)存單位由 unit定義,單位可以是: K、 KiB、 M、 MiB、G、 GiB、 T、 TiB。默認(rèn)是 KiB。
<currentMemory>1024000</currentMemory>
currentMemory 定義實際分給給客戶端的內(nèi)存她小于 memory的定義,如果 沒有定義,值和 memory一致。
3.2 默認(rèn)網(wǎng)絡(luò)配置文件
虛擬網(wǎng)絡(luò)的配置示例如下:
<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的方式,并使用默認(rèn)的網(wǎng)絡(luò)配置,客戶機將會分配到 192.168.122.0/24網(wǎng)段中的一個 IP地址。
在宿主機中,通常會運行著DHCP和 DNS服務(wù)器,一般默認(rèn)使用 dnsmasq軟件查詢??梢酝ㄟ^以下命令查看相關(guān)的進程:
[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
由于配置使用了默認(rèn)的NAT網(wǎng)絡(luò)配置,可以在 libvirt相關(guān)的網(wǎng)絡(luò)配置中看到一個 default.xml文件( 具體路徑為: :/etc/libvirt/qemu/networks/default.xml),它配置了默認(rèn)的連接方式:
[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默認(rèn)存儲池
在該客戶機的XML配置文件中,關(guān)于機磁盤的配置如下:
<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驅(qū)動),設(shè)備名稱為 /dev/vda。
標(biāo)簽是客戶機磁盤配置的主標(biāo)簽,其中包含它的屬性和一些 子標(biāo)簽。
? type屬性表示磁盤使用哪種類型作為磁盤的來源,其取值為 file、 block、 dir或 network中的一個,分別表示使用文件、塊設(shè)備、目錄或網(wǎng)絡(luò)作為客戶機磁盤的來源。
? device屬性表示讓客戶機如何來使用該磁盤設(shè)備,其取值為 floppy、 disk、 cdrom或 lun中的一個,分別表示軟盤、硬盤、光盤和 LUN(邏輯單元號),默認(rèn)值為 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
上面的鏡像可以自行選擇下載。
開始安裝虛擬機系統(tǒng)
[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
當(dāng)出現(xiàn)以下內(nèi)容后開始配置,“!”感嘆號的需要自定義設(shè)置。設(shè)置完成后按“b”進行系統(tǒng)安裝。
- Installation Destination 第五項安裝系統(tǒng)時,輸入c默認(rèn)安裝即可。
4.2 虛擬機配置文件 XML文件修改
我之前創(chuàng)建虛擬機是root用戶創(chuàng)建的,后來登錄時是普通用戶,virsh list是看不到創(chuàng)建的虛擬機的。
KVM支持對已有虛擬機配置進行修改,如磁盤大小、 CPU、內(nèi)存大小等。在 /etc/libvirt/qemu目錄下可以看到多個 xml文件,每一個 xml文件都是虛擬機的配置信息, 可以 通過 直接 修改這個文件就可以修改虛擬機的配置。
在修改配置文件后,需要使用virsh define命令更新虛擬機配置 并且 需要重啟虛擬機才會生效 。 官方推薦是使用 virsh edit命令來對文件進行編輯,該命令執(zhí)行后的效果其實和使用 vim打開差不多,如果配置文件有錯的話會進行提醒
例如,修改虛擬機的cpu的個數(shù):
[root@centos-template training]# virsh edit demo-001
···
<vcpu placement='static'> 2 </vcpu> # 將個數(shù)修改為 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
即使虛擬機仍處于運行狀態(tài)也可以執(zhí)行此命令,只是要到虛擬機重啟后,新的配置才會起作用
。
[root@centos-template training]# virsh reboot demo-001
Domain demo-001 is being rebooted
進入虛擬機查看cpu數(shù)量
[root@centos-template training]# virsh reboot demo-001
[root@localhost ~]# lscpu
ctrl+] 可以切換回宿主機終端
4.3 vish命令行工具
virsh是 libvirt默認(rèn) 的 命令行管理工具 ,可以通過 virsh -h來獲取幫助
[root@centos-template training]# virsh -h
從幫助頁可以看出
virsh命令大概分了 以下組:
Domain Management(域管理 、 Domain Monitoring(域監(jiān)控)、 Host and Hypervisor(主機及虛擬化)、 Interface(網(wǎng)卡接口)、 Network Filter(網(wǎng)絡(luò)防火墻)、 Networking(網(wǎng)絡(luò))、 Node Device(節(jié)點設(shè)備驅(qū)動)、 Secret、Snapshot(快照)、 Storage Pool(存儲池或存儲策略)、 Storage Volume(存儲卷)、 Virsh itself virsh shell自身相關(guān))
如果查看某一組幫助信息,我們可以使用 virsh help +組名;比如查看 storage volume組相關(guān)命令有哪些,可以使用 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文件創(chuàng)建虛擬機
virsh create xxx .xml
virsh define xxx.xml
virsh define :從指定配置文件中創(chuàng)建虛擬,但不運行 ,create 是創(chuàng)建并運行;
取消定義一個虛擬機
virsh undefine xxx
注意:
默認(rèn)使用 undefine只會把對應(yīng)配置文件和虛擬機實例刪除 。
設(shè)置虛擬機開機自啟
virsh autostart xxx
4.4訪問虛擬機
virsh console命令可以使用命令方式連接到虛擬機中,
[root@centos-template training]# virsh console demo-001
Connected to domain demo-001
Escape character is ^]
以上命令 可以 連接 centos7虛擬機 的控制臺, 若執(zhí)行命令后 一直處于卡死的狀態(tài),是因為 centos7上默認(rèn)沒有允許 ttyS0。
可以通過以下方式解決此問題,前提是必須要有一種方式能連接虛擬機,可以使用
ssh或 virt-manager 等方式進行連接。 連接到虛擬機后,在 /etc/securetty文件中添加 ttyS0
echo " /etc/securetty
更新內(nèi)核參數(shù),需要重啟才能生效
grubby update kernel=ALL args="console=ttyS0"
重啟完成后,再次使用virsh console連接
ctrl+] 可以切換回宿主機終端
5,虛擬機鏡像
qemu-img用于離線創(chuàng)建、轉(zhuǎn)換和修改磁盤鏡像文件。
注意:不要使用qemu-img修改正在運行的虛擬機或任何其他進程使用的鏡像,這可能會破壞鏡像。
qemu-img命令有眾多的子命令,每個子命令都使用不同的語法格式
qeme-img info 命令可以 查看鏡像文件的磁盤大小、 backing file、內(nèi)部快照等詳細信息。 例如查看 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 該鏡像文件在主機文件系統(tǒng)上占用的空間大小。
? cluster_size 該鏡像格式的 cluster_size(如果適用)。
? encrypted 該鏡像是否加密,只有當(dāng)加密時才顯示。
? cleanly shut down:如果鏡像是臟的,將顯示 no,并且必須在 qemu 下次打開它時進行自動修復(fù)。
? backing file 如果該鏡像有 backing file,則顯示。
? backing file format backing file 的鏡像格式( if the image enforces it)。
? Snapshot list 列出該鏡像所有內(nèi)部快照。
? Format specific information 該鏡像格式的特定信息。
- raw格式
raw格式是一種很早的鏡像格式,格式比較原始、簡單,性能上也還不錯。并且 raw格式鏡像的一個突出好處是它支持轉(zhuǎn)換成其他格式的鏡像,或者作為其他格式鏡像轉(zhuǎn)換的中間格式。但是, raw格式的一個突出缺點就是不支持快照。 raw格式會 立刻分配 磁盤 空間 。
- qcow2格式
qcow2格式是目前的一種主流鏡像格式,性能上與 raw格式相差無幾,但是支持虛擬機快照。 qcow2只是承諾給你分配空間,但是只有當(dāng)你需要用空間的時候,才會給你空間。最多只給你承諾空間的大小,避免空間浪費
5.1 創(chuàng)建鏡像
qemu-img的子命令 create可以用來創(chuàng)建鏡像。使用 qemu-img創(chuàng)建鏡像有兩種方式 :創(chuàng)建全新的鏡像和增量鏡像。
創(chuàng)建全新的鏡像,例如在/tmp目錄下創(chuàng)建一個 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 命令把差異盤中的數(shù)據(jù)提交到 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 鏡像格式轉(zhuǎn)換
qemu-img的 convert子命令可以 將鏡像 文件(或其內(nèi)部快照)從一種鏡像格式轉(zhuǎn)換為另一種鏡像格式 。
常用選項:
-p 顯示進度。
-f 源鏡像文件的格式。
-O(大寫 o)目標(biāo)鏡像格式 、源鏡像文件名稱和目標(biāo)文件名稱。
例如,將 qcow2格式的鏡像轉(zhuǎn)換為 raw格式的鏡像 。
[root@centos-template training]# qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/myvm.qcow2 myvm.raw
將raw格式的鏡像轉(zhuǎn)換為 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提供了訪問和編輯客戶機中的文件、腳本化修改客戶機中的信息、監(jiān)控磁盤使用和空閑的統(tǒng)計信息、 P2V、 V2V、創(chuàng)建客戶機、克隆客戶機、備份磁盤內(nèi)容、格式化磁盤、調(diào)整磁盤大小等非常豐富的功能。
安裝 libguestfs
[root@centos-template training]# yum install libguestfs-tools查看鏡像中的文件系統(tǒng)
查看鏡像中的文件系統(tǒng)
[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%
將鏡像中的文件系統(tǒng)掛載至本地目錄
例如:將myvm.qcow2鏡像中的系統(tǒng)分區(qū)掛載到本地的 /mnt目錄中。
[root@centos-template training]# guestmount -a /var/lib/libvirt/images/myvm.qcow2 -m /dev/centos/root --rw /mnt
查看掛載后的目錄,可以看到一個 幾乎 完整的根文件系統(tǒng)。
[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
卸載文件系統(tǒng)
[root@centos-template training]# umount /mnt
virt-edit
該命令可以修改虛機或者鏡像里面的內(nèi)容
-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
以上兩個命令都可以編輯虛擬機內(nèi)部的文件
virt-copy-out
此 命令可以把虛擬機里的文件復(fù)制 到當(dāng)前主機中 , 例如 將 centos7虛擬機中的 /etc/hostname文件 復(fù)制到當(dāng)前目錄。
[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
此命令可以將文件復(fù)制到虛擬機里面,用法和 virt-copy-out基本相同
[root@centos-template training]# virt-copy-in -d centos7 /etc/resolv.conf /etc/
virt-cat
可以查看虛擬機中文件的內(nèi)容
[root@centos-template training]# virt-cat -d demo-001 /etc/hostname
localhost.localdomain
5.4 virt-sysprep 制作虛擬鏡像
virt-sysprep工具 也 來自 libguest-tools軟件 包 。
移除虛擬機中的私有信息
virt-sysprep命令若不指定參數(shù)的,則 移除 所有 的私有信息 私有信息可以通過 --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
設(shè)置指定虛擬機的主機名
在操作之前先將虛擬機關(guān)機
[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平臺以 存儲池的形式對存儲進行統(tǒng)一管理,所謂存儲池可以理解為本地目錄、通過遠端磁盤陣列iSCSI、 NFS)分配過來磁盤或目錄,當(dāng)然也支持各類分布式文件系統(tǒng)。
默認(rèn)的存儲是在/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 存儲池創(chuàng)建
采用本地目錄方式創(chuàng)建KVM存儲池
定義存儲池
創(chuàng)建存儲池
查看所有存儲池
查看vmfspool的狀態(tài)
# 采用本地目錄方式創(chuàng)建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
# 創(chuàng)建存儲池
[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的狀態(tài)
[root@centos-template training]# virsh pool-info vmfspool
Name: vmfspool
UUID: bfa7e49d-8ad6-4408-8ed3-6452c9cb5e46
State: inactive
Persistent: yes
Autostart: no
設(shè)置存儲池自動啟動
[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
創(chuàng)建存儲卷
在images存儲池中創(chuàng)建一個 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,管理虛擬機快照
快照前先關(guān)機
使用 snapshot創(chuàng)建快照。
創(chuàng)建快照,這里需要注意,如果虛擬機中 使用了 raw格式的磁盤,創(chuàng)建快照時會出錯。
[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,云遷移策略
云遷移策略概述
云計算經(jīng)過最近五年的產(chǎn)品能力完善、云產(chǎn)品持續(xù)新增和穩(wěn)定性逐步增強,使得大家已經(jīng)能夠廣泛接受云計算的理念并積極思考如何在自身業(yè)務(wù)中使用云計算。那么應(yīng)用遷移上云應(yīng)該如何操作,2011年Gartner的分析師提出了5R策略,隨著后續(xù)的不斷發(fā)展和補充,目前遷移上云的策略被一般認(rèn)為為6R策略,本課程介紹的六種云遷移策略。
1,Re-Host
重新托管,也稱為“直接遷移”,遷移復(fù)雜度:中
應(yīng)用進行云遷移時最常見的策略,即對應(yīng)用程序運行環(huán)境不做改變的情況下遷移上云,一般的操作是P2V(Physical to Virtual,物理機遷移至虛擬機)、V2V(Virtual to Virtual,虛擬機遷移至虛擬機)。在企業(yè)期望快速上云或大型應(yīng)用上云的場景中,這種策略比較合適
2,Re-Platform
更換平臺,也稱為“修補后遷移”,遷移復(fù)雜度:高
在遷移上云時,在不改變應(yīng)用核心架構(gòu)的基礎(chǔ)上,對應(yīng)用程序做些簡單的云優(yōu)化。例如將關(guān)系型數(shù)據(jù)庫替換成云服務(wù)商提供的數(shù)據(jù)庫服務(wù)、將自建消息中間件替換成云服務(wù)提供的消息隊列服務(wù)、將HAProxy更換成云服務(wù)商提供的負(fù)載均衡服務(wù),以此來降低部分管理成本提升效率
3,Re-Purchase
重新購置,也稱為“放棄后購買”,遷移復(fù)雜度:高
是指放棄使用原先的產(chǎn)品,改為采購新的替代產(chǎn)品,例如原先企業(yè)采用傳統(tǒng)軟件許可模式的人力資源管理系統(tǒng),將放棄并選用同類SaaS產(chǎn)品來進行替換,抑或是選用了該廠商的SaaS版本
4,Re-Architect
重構(gòu)/重新構(gòu)建,遷移復(fù)雜度:高
改變應(yīng)用的架構(gòu)和開發(fā)模式,進行云原生的應(yīng)用服務(wù)實現(xiàn),例如單體應(yīng)用向微服務(wù)架構(gòu)改造,這種策略一般是在現(xiàn)有應(yīng)用環(huán)境下難以滿足日后功能、性能或規(guī)模上的需求時采用,該策略的遷移成本最高,但是長遠來看會更為滿足未來的需求
5,Retain
保留,遷移復(fù)雜度:低
在部分應(yīng)用或者業(yè)務(wù)未做好上云準(zhǔn)備,或是更為適合本地部署時,保留現(xiàn)狀,不強行進行遷移上云操作。應(yīng)用遷移應(yīng)該有優(yōu)先級設(shè)定,根據(jù)業(yè)務(wù)發(fā)展實際需要來進行操作
6,Retire
停用,遷移復(fù)雜度:低
確定不再使用當(dāng)前的基礎(chǔ)設(shè)施,表明這部分系統(tǒng)或應(yīng)用已經(jīng)沒有使用價值且還在持續(xù)消息資源,應(yīng)該進行必要的歸檔備份后停用
一些步驟
-
第一階段評估階段
第一步項目啟動
第二步現(xiàn)狀梳理
第三步應(yīng)用系統(tǒng)關(guān)聯(lián)關(guān)系分析 -
第二階段設(shè)計階段
第四步云架構(gòu)優(yōu)化設(shè)計
第五步云遷移方案設(shè)計 -
第三階段實施階段
第六步目標(biāo)架構(gòu)搭建
第七步遷移演練及實施
第八步試運行
T1 制定《遷移策略與標(biāo)準(zhǔn)》
總體遷移策略與流程
遷移批次規(guī)劃原則
遷移方式選擇(邏輯遷移,物理遷移)
數(shù)據(jù)遷移技術(shù)選擇(離線遷移,在線遷移)
遷移風(fēng)險考慮
T2 制定《遷移主計劃》
劃分批次和時間
制定遷移流程
遷移團隊和職責(zé)的定義
遷移風(fēng)險評估和風(fēng)險控制
T3 為各待遷移應(yīng)用制定《遷移詳細計劃》
遷移步驟
驗證計劃(測試計劃)
應(yīng)急方案和回退計劃文章來源:http://www.zghlxwxcb.cn/news/detail-824135.html
T4 為批次或應(yīng)用制定《遷移演練計劃》
沙盤演練
HAProxy更換成云服務(wù)商提供的負(fù)載均衡服務(wù),以此來降低部分管理成本提升效率
3,Re-Purchase
重新購置,也稱為“放棄后購買”,遷移復(fù)雜度:高
是指放棄使用原先的產(chǎn)品,改為采購新的替代產(chǎn)品,例如原先企業(yè)采用傳統(tǒng)軟件許可模式的人力資源管理系統(tǒng),將放棄并選用同類SaaS產(chǎn)品來進行替換,抑或是選用了該廠商的SaaS版本
4,Re-Architect
重構(gòu)/重新構(gòu)建,遷移復(fù)雜度:高
改變應(yīng)用的架構(gòu)和開發(fā)模式,進行云原生的應(yīng)用服務(wù)實現(xiàn),例如單體應(yīng)用向微服務(wù)架構(gòu)改造,這種策略一般是在現(xiàn)有應(yīng)用環(huán)境下難以滿足日后功能、性能或規(guī)模上的需求時采用,該策略的遷移成本最高,但是長遠來看會更為滿足未來的需求
5,Retain
保留,遷移復(fù)雜度:低
在部分應(yīng)用或者業(yè)務(wù)未做好上云準(zhǔn)備,或是更為適合本地部署時,保留現(xiàn)狀,不強行進行遷移上云操作。應(yīng)用遷移應(yīng)該有優(yōu)先級設(shè)定,根據(jù)業(yè)務(wù)發(fā)展實際需要來進行操作
6,Retire
停用,遷移復(fù)雜度:低
確定不再使用當(dāng)前的基礎(chǔ)設(shè)施,表明這部分系統(tǒng)或應(yīng)用已經(jīng)沒有使用價值且還在持續(xù)消息資源,應(yīng)該進行必要的歸檔備份后停用
一些步驟
-
第一階段評估階段
第一步項目啟動
第二步現(xiàn)狀梳理
第三步應(yīng)用系統(tǒng)關(guān)聯(lián)關(guān)系分析 -
第二階段設(shè)計階段
第四步云架構(gòu)優(yōu)化設(shè)計
第五步云遷移方案設(shè)計 -
第三階段實施階段
第六步目標(biāo)架構(gòu)搭建
第七步遷移演練及實施
第八步試運行
T1 制定《遷移策略與標(biāo)準(zhǔn)》
總體遷移策略與流程
遷移批次規(guī)劃原則
遷移方式選擇(邏輯遷移,物理遷移)
數(shù)據(jù)遷移技術(shù)選擇(離線遷移,在線遷移)
遷移風(fēng)險考慮
T2 制定《遷移主計劃》
劃分批次和時間
制定遷移流程
遷移團隊和職責(zé)的定義
遷移風(fēng)險評估和風(fēng)險控制
T3 為各待遷移應(yīng)用制定《遷移詳細計劃》
遷移步驟
驗證計劃(測試計劃)
應(yīng)急方案和回退計劃
T4 為批次或應(yīng)用制定《遷移演練計劃》
沙盤演練
數(shù)據(jù)復(fù)制/切換演練文章來源地址http://www.zghlxwxcb.cn/news/detail-824135.html
到了這里,關(guān)于KVM虛擬化基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!