2021-05-12 14:32:11
RHCSA 系列(十五): 虛擬化基礎和使用 KVM 進行虛擬機器管理
假如你在詞典中查一下單詞 “虛擬化(virtualize)”,你將會發現它的意思是 “創造某些事物的一個虛擬物(而非真實的)”。在計算機行業中,術語虛擬化(virtualization)指的是:在相同的物理(硬體)系統上,同時執行多個作業系統,且這幾個系統相互隔離的可能性,而那個硬體在虛擬化架構中被稱作宿主機(host)。
RHCSA 系列: 虛擬化基礎和使用 KVM 進行虛擬機器管理 – Part 15
通過使用虛擬機器監視器(也被稱為虛擬機器管理程式(hypervisor)),虛擬機器(被稱為 guest)由底層的硬體來供給虛擬資源(舉幾個例子來說,如 CPU,RAM,儲存媒介,網路介面等)。
考慮到這一點就可以清楚地看出,虛擬化的主要優點是節約成本(在裝置和網路基礎設施,及維護工作等方面)和顯著地減少容納所有必要硬體所需的物理空間。
由於這個簡單的指南不能涵蓋所有的虛擬化方法,我鼓勵你參考在總結部分中列出的文件,以此對這個話題做更深入的了解。
請記住當前文章只是用於在 RHEL 7 中用命令列工具使用 KVM (Kernel-based Virtual Machine(基於核心的虛擬機器)) 學習虛擬化基礎知識的一個起點,而並不是對這個話題的深入探討。
檢查硬體要求並安裝軟體包
為了設定虛擬化,你的 CPU 必須能夠支援它。你可以使用下面的命令來檢視你的系統是否滿足這個要求:
#grep-E 'svm|vmx'/proc/cpuinfo
在下面的截圖中,我們可以看到當前的系統(帶有一個 AMD 的微處理器)支援虛擬化,svm 字樣的存在暗示了這一點。假如我們有一個 Intel 系列的處理器,我們將會看到上面命令的結果將會出現 vmx 字樣。
檢查 KVM 支援
另外,你需要在你宿主機的硬體(BIOS 或 UEFI)中開啟虛擬化。
現在,安裝必要的軟體包:
- qemu-kvm 是一個開源的虛擬機器程式,為 KVM 虛擬機器監視器提供硬體模擬,而 qemu-img 則提供了一個操縱磁碟映象的命令列工具。
- libvirt 包含與作業系統的虛擬化功能互動的工具。
- libvirt-Python 包含一個模組,它允許用 Python 寫的應用來使用由 libvirt 提供的介面。
- libguestfs-tools 包含各式各樣的針對虛擬機器的系統管理員命令列工具。
- virt-install 包含針對虛擬機器管理的其他命令列工具。
命令如下:
#yum update &&yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install
一旦安裝完成,請確保你啟動並開啟了 libvirtd 服務:
#systemctl start libvirtd.service
#systemctl enable libvirtd.service
預設情況下,每個虛擬機器將只能夠與放在相同的物理伺服器上的虛擬機器以及宿主機自身通訊。要使得虛擬機器能夠存取位於區域網或因特網中的其他機器,我們需要像下面這樣在我們的宿主機上設定一個橋接介面(比如說 br0):
1、 新增下面的一行到我們的 NIC 主設定中(類似 /etc/sysconfig/network-scripts/ifcfg-enp0s3
這樣的檔案):
BRIDGE=br0
2、 使用下面的內容(注意,你可能需要更改 IP 地址,閘道器地址和 DNS 資訊)為 br0 建立一個組態檔(/etc/sysconfig/network-scripts/ifcfg-br0
):
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NM_CONTROLLED=no
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
ONBOOT=yes
DNS1=8.8.8.8
DNS2=8.8.4.4
3、 最後在檔案/etc/sysctl.conf
中設定:
net.ipv4.ip_forward =1
來開啟包轉發並載入更改到當前的核心設定中:
#sysctl-p
注意,你可能還需要告訴 firewalld 讓這類的流量應當被允許通過防火牆。假如你需要這樣做,記住你可以參考這個系列的 使用 firewalld 和 iptables 來控制網路流量。
建立虛擬機器映象
預設情況下,虛擬機器映象將會被建立到 /var/lib/libvirt/images
中,且強烈建議你不要更改這個設定,除非你真的需要那麼做且知道你在做什麼,並能自己處理有關 SELinux 的設定(這個話題已經超出了本教學的討論範疇,但你可以參考這個系列的第 13 部分 使用 SELinux 來進行強制存取控制,假如你想更新你的知識的話)。
這意味著你需要確保你在檔案系統中分配了必要的空間來容納你的虛擬機器。
下面的命令將使用位於 /home/gacanepa/ISOs
目錄下的 rhel-server-7.0-x86_64-dvd.iso 映象檔案和 br0 這個網橋來建立一個名為 tecmint-virt01
的虛擬機器,它有一個虛擬 CPU,1 GB(=1024 MB)的 RAM,20 GB 的磁碟空間(由/var/lib/libvirt/images/tecmint-virt01.img
所代表):
# virt-install
--network bridge=br0
--name tecmint-virt01
--ram=1024
--vcpus=1
--disk path=/var/lib/libvirt/images/tecmint-virt01.img,size=20
--graphics none
--cdrom /home/gacanepa/ISOs/rhel-server-7.0-x86_64-dvd.iso
--extra-args="console=tty0 console=ttyS0,115200"
假如安裝檔案位於一個 HTTP 伺服器上,而不是儲存在你磁碟中的映象中,你必須將上面的 -cdrom
替換為 -location
,並明確地指出線上儲存倉庫的地址。
至於上面的 –graphics none
選項,它告訴安裝程式只以文字模式執行安裝過程。假如你使用一個 GUI 介面和一個 VNC 視窗來存取主虛擬機器控制台,則可以省略這個選項。最後,使用 –extra-args
引數,我們將傳遞核心啟動引數給安裝程式,以此來設定一個序列的虛擬機器控制台。
現在,所安裝的虛擬機器應當可以作為一個正常的(真實的)服務來執行了。假如沒有,請檢視上面列出的步驟。
管理虛擬機器
作為一個系統管理員,還有一些典型的管理任務需要你在虛擬機器上去完成。註:下面所有的命令都需要在你的宿主機上執行:
1. 列出所有的虛擬機器:
# virsh list--all
你必須留意上面命令輸出中的虛擬機器 ID(儘管上面的命令還會返回虛擬機器的名稱和當前的狀態),因為你需要它來執行有關某個虛擬機器的大多數管理任務。
2. 顯示某個虛擬機器的資訊:
# virsh dominfo [VM Id]
3. 開啟,重新啟動或停止一個虛擬機器作業系統:
# virsh start |reboot|shutdown[VM Id]
4. 假如網路無法連線且在宿主機上沒有執行 X 伺服器,可以使用下面的命令來存取虛擬機器的序列控制台:
# virsh console [VM Id]
註:這需要你新增一個序列控制台設定資訊到 /etc/grub.conf
檔案中(參考剛才建立虛擬機器時傳遞給-extra-args
選項的引數)。
5. 修改分配的記憶體或虛擬 CPU:
首先,關閉虛擬機器:
# virsh shutdown[VM Id]
為 RAM 編輯虛擬機器的設定:
# virsh edit [VM Id]
然後更改
<memory>[記憶體大小,注意不要加上方括號]</memory>
使用新的設定重新啟動虛擬機器:
# virsh create /etc/libvirt/qemu/tecmint-virt01.xml
最後,可以使用下面的命令來動態地改變記憶體的大小:
# virsh setmem [VM Id][記憶體大小,這裡沒有括號]
對於 CPU,使用:
# virsh edit [VM Id]
然後更改
<cpu>[CPU 數目,這裡沒有括號]</cpu>
至於更深入的命令和細節,請參考 RHEL 5 虛擬化指南(這個指南儘管有些陳舊,但包括了用於管理虛擬機器的 virsh 命令的詳盡清單)的第 26 章裡的表 26.1。
總結
在這篇文章中,我們涵蓋了在 RHEL 7 中如何使用 KVM 和虛擬化的一些基本概念,這個話題是一個廣泛且令人著迷的話題。並且我希望它能成為你在隨後閱讀官方的 RHEL 虛擬化入門 和 RHEL 虛擬化部署和管理指南 ,探索更高階的主題時的起點教學,並給你帶來幫助。
另外,為了分辨或拓展這裡解釋的某些概念,你還可以參考先前包含在 KVM 系列 中的文章。
--------------------------------------分割線 --------------------------------------
相關文章