天天看點

RHCSA 系列(十五): 虛拟化基礎和使用 KVM 進行虛拟機管理

假如你在詞典中查一下單詞 “虛拟化virtualize”,你将會發現它的意思是 “創造某些事物的一個虛拟物(而非真實的)”。在計算機行業中,術語虛拟化virtualization指的是:在相同的實體(硬體)系統上,同時運作多個作業系統,且這幾個系統互相隔離的可能性,而那個硬體在虛拟化架構中被稱作主控端host。

RHCSA 系列(十五): 虛拟化基礎和使用 KVM 進行虛拟機管理

rhcsa 系列: 虛拟化基礎和使用 kvm 進行虛拟機管理 – part 15

通過使用虛拟機螢幕(也被稱為虛拟機管理程式hypervisor),虛拟機(被稱為 guest)由底層的硬體來供給虛拟資源(舉幾個例子來說,如 cpu,ram,存儲媒體,網絡接口等)。

考慮到這一點就可以清楚地看出,虛拟化的主要優點是節約成本(在裝置和網絡基礎設施,及維護工作等方面)和顯著地減少容納所有必要硬體所需的實體空間。

由于這個簡單的指南不能涵蓋所有的虛拟化方法,我鼓勵你參考在總結部分中列出的文檔,以此對這個話題做更深入的了解。

<a target="_blank"></a>

為了設定虛拟化,你的 cpu 必須能夠支援它。你可以使用下面的指令來檢視你的系統是否滿足這個要求:

<code># grep -e 'svm|vmx' /proc/cpuinfo</code>

在下面的截圖中,我們可以看到目前的系統(帶有一個 amd 的微處理器)支援虛拟化,svm 字樣的存在暗示了這一點。假如我們有一個 intel 系列的處理器,我們将會看到上面指令的結果将會出現 vmx 字樣。

RHCSA 系列(十五): 虛拟化基礎和使用 KVM 進行虛拟機管理

檢查 kvm 支援

另外,你需要在你主控端的硬體(bios 或 uefi)中開啟虛拟化。

現在,安裝必要的軟體包:

qemu-kvm 是一個開源的虛拟機程式,為 kvm 虛拟機螢幕提供硬體仿真,而 qemu-img 則提供了一個操縱磁盤鏡像的指令行工具。

libvirt 包含與作業系統的虛拟化功能互動的工具。

libvirt-python 包含一個子產品,它允許用 python 寫的應用來使用由 libvirt 提供的接口。

libguestfs-tools 包含各式各樣的針對虛拟機的系統管理者指令行工具。

virt-install 包含針對虛拟機管理的其他指令行工具。

指令如下:

<code># yum update &amp;&amp; yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install</code>

一旦安裝完成,請確定你啟動并開啟了 libvirtd 服務:

<code># systemctl start libvirtd.service</code>

<code># systemctl enable libvirtd.service</code>

預設情況下,每個虛拟機将隻能夠與放在相同的實體伺服器上的虛拟機以及主控端自身通信。要使得虛拟機能夠通路位于區域網路或網際網路中的其他機器,我們需要像下面這樣在我們的主控端上設定一個橋接接口(比如說 br0):

1、 添加下面的一行到我們的 nic 主配置中(類似 <code>/etc/sysconfig/network-scripts/ifcfg-enp0s3</code> 這樣的檔案):

<code>bridge=br0</code>

2、 使用下面的内容(注意,你可能需要更改 ip 位址,網關位址和 dns 資訊)為 br0 建立一個配置檔案(<code>/etc/sysconfig/network-scripts/ifcfg-br0</code>):

<code>device=br0</code>

<code>type=bridge</code>

<code>bootproto=static</code>

<code>ipaddr=192.168.0.18</code>

<code>netmask=255.255.255.0</code>

<code>gateway=192.168.0.1</code>

<code>nm_controlled=no</code>

<code>defroute=yes</code>

<code>peerdns=yes</code>

<code>peerroutes=yes</code>

<code>ipv4_failure_fatal=no</code>

<code>ipv6init=yes</code>

<code>ipv6_autoconf=yes</code>

<code>ipv6_defroute=yes</code>

<code>ipv6_peerdns=yes</code>

<code>ipv6_peerroutes=yes</code>

<code>ipv6_failure_fatal=no</code>

<code>name=br0</code>

<code>onboot=yes</code>

<code>dns1=8.8.8.8</code>

<code>dns2=8.8.4.4</code>

3、 最後在檔案<code>/etc/sysctl.conf</code> 中設定:

<code>net.ipv4.ip_forward = 1</code>

來開啟包轉發并加載更改到目前的核心配置中:

<code># sysctl -p</code>

這意味着你需要確定你在檔案系統中配置設定了必要的空間來容納你的虛拟機。

下面的指令将使用位于 <code>/home/gacanepa/isos</code>目錄下的 rhel-server-7.0-x86_64-dvd.iso 鏡像檔案和 br0 這個網橋來建立一個名為 <code>tecmint-virt01</code> 的虛拟機,它有一個虛拟 cpu,1 gb(=1024 mb)的 ram,20 gb 的磁盤空間(由<code>/var/lib/libvirt/images/tecmint-virt01.img</code>所代表):

<code># virt-install \</code>

<code>--network bridge=br0</code>

<code>--name tecmint-virt01 \</code>

<code>--ram=1024 \</code>

<code>--vcpus=1 \</code>

<code>--disk path=/var/lib/libvirt/images/tecmint-virt01.img,size=20 \</code>

<code>--graphics none \</code>

<code>--cdrom /home/gacanepa/isos/rhel-server-7.0-x86_64-dvd.iso</code>

<code>--extra-args="console=tty0 console=ttys0,115200"</code>

假如安裝檔案位于一個 http 伺服器上,而不是存儲在你磁盤中的鏡像中,你必須将上面的 <code>-cdrom</code> 替換為 <code>-location</code>,并明确地指出線上存儲倉庫的位址。

至于上面的 <code>–graphics none</code> 選項,它告訴安裝程式隻以文本模式執行安裝過程。假如你使用一個 gui 界面和一個 vnc 視窗來通路主虛拟機控制台,則可以省略這個選項。最後,使用 <code>–extra-args</code> 參數,我們将傳遞核心啟動參數給安裝程式,以此來設定一個串行的虛拟機控制台。

現在,所安裝的虛拟機應當可以作為一個正常的(真實的)服務來運作了。假如沒有,請檢視上面列出的步驟。

作為一個系統管理者,還有一些典型的管理任務需要你在虛拟機上去完成。注:下面所有的指令都需要在你的主控端上運作:

1. 列出所有的虛拟機:

<code># virsh list --all</code>

你必須留意上面指令輸出中的虛拟機 id(盡管上面的指令還會傳回虛拟機的名稱和目前的狀态),因為你需要它來執行有關某個虛拟機的大多數管理任務。

2. 顯示某個虛拟機的資訊:

<code># virsh dominfo [vm id]</code>

3. 開啟,重新開機或停止一個虛拟機作業系統:

<code># virsh start | reboot | shutdown [vm id]</code>

4. 假如網絡無法連接配接且在主控端上沒有運作 x 伺服器,可以使用下面的指令來通路虛拟機的串行控制台:

<code># virsh console [vm id]</code>

注:這需要你添加一個串行控制台配置資訊到 <code>/etc/grub.conf</code> 檔案中(參考剛才建立虛拟機時傳遞給<code>-extra-args</code>選項的參數)。

5. 修改配置設定的記憶體或虛拟 cpu:

首先,關閉虛拟機:

<code># virsh shutdown [vm id]</code>

為 ram 編輯虛拟機的配置:

<code># virsh edit [vm id]</code>

然後更改

<code>&lt;memory&gt;[記憶體大小,注意不要加上方括号]&lt;/memory&gt;</code>

使用新的設定重新開機虛拟機:

<code># virsh create /etc/libvirt/qemu/tecmint-virt01.xml</code>

最後,可以使用下面的指令來動态地改變記憶體的大小:

<code># virsh setmem [vm id] [記憶體大小,這裡沒有括号]</code>

對于 cpu,使用:

<code>&lt;cpu&gt;[cpu 數目,這裡沒有括号]&lt;/cpu&gt;</code>

至于更深入的指令和細節,請參考 rhel 5 虛拟化指南(這個指南盡管有些陳舊,但包括了用于管理虛拟機的 virsh 指令的詳盡清單)的第 26 章裡的表 26.1。

本文來自雲栖社群合作夥伴“linux中國”,原文釋出日期:2015-10-07