CentOS 6、7 的 Xen4 Libvirt
Contents
1. Libvirt 及 Xen 的基礎
Xen 的主機操作系統稱為 Dom0。透過 Xen 來執行的虛擬操作系統(VM)稱為 DomU。
在預設情況下,libvirt 會在預設網絡卡(一般是 eth0)背後建立一個 192.168.122.0/24 的 NAT 網絡。
在這個 NAT 網絡上運行的 DomU VM 可以互相連線及通過 Dom0 的網絡向外連線,但你只能在 Dom0 上透過 libvirt(或 xen)連線到它們。你可以把預設的 NAT 網絡改為一個橋接式網絡,這樣你便能連線到 DomU VM,仿如它們與 Dom0 在同一個實體網絡上。有關橋接的討論收錄在下文(第 7 部份)。
2. 先決條件
此頁假設你已經遵照Xen4QuickStart 指引安裝了一個 Xen 內核,而 xl info 這個指令作出類似的匯報:
[root@xentest1 ~]# xl info host : immortal release : 3.10.56-11.el6.centos.alt.x86_64 version : #1 SMP Thu Oct 9 14:57:01 CDT 2014 machine : x86_64 nr_cpus : 4 max_cpu_id : 31 nr_nodes : 1 cores_per_socket : 4 threads_per_core : 1 cpu_mhz : 2533 hw_caps : bfebfbff:2c100800:00000000:00003f00:029ee3ff:00000000:00000001:00000000 virt_caps : hvm hvm_directio total_memory : 6141 free_memory : 5030 sharing_freed_memory : 0 sharing_used_memory : 0 outstanding_claims : 0 free_cpus : 0 xen_major : 4 xen_minor : 4 xen_extra : .1-4.el6 xen_version : 4.4.1-4.el6 xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 xen_scheduler : credit xen_pagesize : 4096 platform_params : virt_start=0xffff800000000000 xen_changeset : Wed Oct 15 15:36:23 2014 +0100 git:9f49483-dirty xen_commandline : dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all com1=115200,8n1 console=com1,vga cc_compiler : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) cc_compile_by : mockbuild cc_compile_domain : centos.org cc_compile_date : Mon Dec 15 17:54:14 UTC 2014 xend_config_format : 4
除非特別指定,所有指令均須由 root 用戶在 Dom0 機器上執行。
我習慣在最少安裝上加入數個套件,因為它們稍後也許會有用。請以此指令安裝它們:
yum install rsync wget vim-enhanced openssh-clients
3. 安裝 libvirt(在 Dom0 機器上)
首先我們要安裝 libvirt 所需的基本套件:
CentOS 6 監督器:
yum install libvirt python-virtinst libvirt-daemon-xen
CentOS 7 監督器:
yum install libvirt libvirt-daemon-xen
安裝後,請重新啟動你的 Dom0 機器。
4. 遠端存取 LibVirt
在多數情況,下我們不建議在 Dom0 伺服器上安裝整套圖像化系統,因此多數人會從遠端存取/控制 Dom0 libvirt。
你有 2 個可取的途徑 …… 其一是透過一台圖像化機器(例如一台 CentOS-6 工作站),其二是透過 ssh 應用 virsh 指令行程式。
4.1. 透過 PolicyKit 控制 libvirt 的存取權
如果你想將一台 CentOS-6 工作站連線到 Dom0 上的 virt-manager 並控制該台電腦上的 DomU 虛擬機器,你便需要利用 PolicyKit。當你利用某台機器上的 virsh 終端機直接連線到 Dom0 及控制它的 DomU 虛擬機器時,PolicyKit 也會被應用。
PolicyKit 讓你設計有彈性、精細的存取權,功能遠超㙎本範例所介紹以 unix 群組授權存取 libvirt 的做法。
如要設計複雜的存取權,請參閱 polkit 的文檔
4.1.1. 設定 libvirt 供群組存取
若要把存取權授予某個 unix 群組的成員,我們只須建立一個 PolicyKit 本地權限檔。
這是一個純文字檔,一般被放置於這個目錄中:
/etc/polkit-1/localauthority/50-local.d/
你可隨意為這個檔案命名,但它必須以兩個數目字起首及以 .pkla 結尾。例如:
/etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
它的內容應包含:
[Remote libvirt SSH access] Identity=unix-group:group_name Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes
你應該以合適的群組名稱取替 group_name。
舉個例說:你擁有一位名為 johnny 的 unix 用戶,而你希望建立一個名為 remote-libvirt 的群組來遠端存取 libvirt,並把 johnny 加進該群組內。
首先我們要透過 ssh 登入 Dom0 機器並取得 root 的身份。接著我們便執行以下指令來建立新的群組:
groupadd remote-libvirt
然後我們可以用這個指令把用戶加進 remote-libvirt 這個群組內:
usermod -G remote-libvirt johnny
現在 johnny 這個 unix 用戶可以遠端控制 libvirt。
4.2. 連線到遠端的 Dom0
4.2.1. 從遠端機器透過 virt-manager 連線到 Dom0 機器
請登入你的圖像化桌面(它可以是台 CentOS-6 工作台或是一台用來管理數台非圖像化 Dom0 機器的圖像化伺服器),然後透過開啟一個終端機視窗及以 root 身份執行以下指令,確保 virt-manager 已被安裝:
yum install virt-manager
以普通用戶的身份開啟 virt-manager。你可利用 Applications => System Tools => Virtual Machine Manager 這條捷徑,或從終端機視窗輸入 virt-manager。
在 virt-manager 應用程式內,開啟 File => Add Connection 選單項目,接著選取 Xen 作為監督器,選用 connect to a remote host,選取 SSH 作為方法,輸入你加進 remote-libvirt 群組內的用戶(在這個範例中是 johnny)作為用戶名稱,最後輸入 DomU 的主機名稱或 IP 位址(這我的範例中,我們會採用 192.168.0.5)…… 然後點擊 connect。
它會問 johnny 在 DomU 上的 ssh 用戶名稱 …… 輸入後,你便會看見它連線到主機及在 virt-manager 內看見一個 Domain-0 的圖示。
這個例子中的 URI 是:
xen+ssh://johnny@192.168.0.5
4.2.2. 從遠端機器透過 virsh 連線到 Dom0 機器
你在 Dom0 上利用 virsh 控制 DomU 虛擬機器的做法有兩種。
第一種是純粹 ssh 到 Dom0 機器,然後成為 root 用戶及從指令行執行 virhs。
第二種是採用上述例子的群組然後執行以下指令:
virsh -c xen+ssh://johnny@192.168.0.5
這種做法的好處就是我們無須把 Dom0 的 root 存取權發放給 johnny 用戶,他只須正常帳戶。他同樣能應用 virsh 的一切功能。
有關 virsh 的詳情,請參閱這份指南
5. 建立 DomU 虛擬機器
|
如果你要安裝 CentOS 7 DomU 成為 paravirt 客端,請留意該虛擬機器的 /boot 不能採用 xfs —— 見 https://wiki.xen.org/wiki/PyGrub 。因此你必須利用 kickstart 檔或透過 vnc 進行安裝,以便能更改預設值。你可以在 extra-args 內加入這些選項。 |
5.1. 利用 virt-manager 來安裝 DomU
現在你可以在 virt-manager 內選取新的主機名稱/IP 位址,然後按滑鼠右鍵並選取 New 或點擊 Create a new Virtual Machine 的圖示,接著按照提示來建立新的機器。
這個過程在遠端及本地連線下都相同 …… 唯一差別就是 Step 1 of 5 提示頁上的 Connection 對話方塊。
安裝新機器的過程與此指南很相似,唯獨在 Step 1 of 5 提示頁上的連線將會顯示你的遠端主機名稱(在我們的範例中是 192.168.0.5),而在 Step 5 of 5 提示頁的進階選項的 Virt Type 內,你會看見 xen(paravirt) 或 xen(fullvirt) 而不是 KVM。
5.2. 透過 SSH 利用 virt-install 來安裝 DomU
另一個進行遠端安裝的方法就是利用 ssh 連線到 Dom0 機器及成為 root 用戶,然後利用 virt-install 及終端機來人進行安裝。以下指令(以 root 身份在指令行執行)可以從遠端進行文字模式的安裝:
virt-install -d -n TestVM1 -r 2048 --vcpus=1 --disk /var/lib/libvirt/images/TestVM1.img,size=8 --nographics -p -l "http://192.168.0.10/centos/6.4/os/x86_64" --extra-args="text console=com1 utf8 console=hvc0"
在上述例子中,指令的含意包括:
-d — 偵錯模式,列印大量文字及完整的設定樣作偵錯之用
-n TestVM1 — 虛擬機器的名稱
-r 2048 — 記憶體大少(2048 MB,即 2 GB)
--vcpus=1 — 虛擬 CPU 的數量
--disk=/var/lib/libvirt/images/TestVM1.img,size=8 — 碟盤映像的位置及以 GB 計算的大少 …… 它可指向 LVM、等
--nographics — 由於我們的 Dom0 沒有安裝圖像介面,因此不要採用 VNC、等
-p — 採用半虛擬化
-l "http://192.168.0.10/centos/6.4/os/x86_64" — centos 目錄樹的位置,也可採用 http://mirror.centos.org/centos/6/os/x86_64/ 或其它鏡像。
--extra-args="text console=com1 utf8 console=hvc0" — 告訴 linux 利用 com1 和 xen 利用 hvc0,好讓你能透過終端機進行文字模式安裝
註:這類安裝採用終端機,因此局限於文字模式的安裝。上述(前一段)的 virt-manager 卻能同時支援圖像化安裝。
有關利用 virt-install 進行安裝的詳情請參閱此指南。
6. 控制 DomU 虛擬機器
透過 libvirt,你可利用圖像化應用程式(virt-manager)或文字應用程式(virsh)來控制 DomU 虛擬機器。
這些應用程式可以位於 DomU 虛擬機器所身處的 Dom0 上(本地控制),它們也可以位於不同的機器上並連線到 DomU(遠端控制)。
不論是透過遠端或本地連線,兩種工具的實際操作都是相同。
有關遠端 virt-manager 或遠端 virsh 的連線,請參閱這些指引。你必須設置 libvirt 才能用這兩個工具來進行遠端存取。
有關採用 virsh 這參閱此指南;有關採用 virt-manager 這參閱此指南
7. 橋接範例設定
以下是另一個橋接範例設定:
你必須安裝 bridge-utils 才可設置橋接。你可以在 CentOS 下以這個指令進行安裝:
yum install bridge-utils
以下檔案位於 /etc/sysconfig/network-scripts/,它們必須被修改。
定義 br1 的最簡單範例
ifcfg-eth0
DEVICE=eth0 NM_CONTROLLED=no ONBOOT=yes TYPE=Ethernet BRIDGE="br1" USERCTL=no
ifcfg-br1
DEVICE=br1 BOOTPROTO=none NM_CONTROLLED=no ONBOOT=yes TYPE=Bridge IPADDR=192.168.0.5 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 USERCTL=no
此處及此處探討了其他橋接範例設定。另外,Google 亦是你的好幫手
Translation of revision 24