RHCSA 系列(十五): 虛擬化基礎和使用 KVM 進行虛擬機管理
RHCSA 系列: 虛擬化基礎和使用 KVM 進行虛擬機管理 – Part 15
通過使用虛擬機監視器(也被稱為 虛擬機管理程序 ),虛擬機(被稱為 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 系列 中的文章。
via: http://www.tecmint.com/kvm-virtualization-basics-and-guest-administration/
作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive