CentOS 6、7 的 Xen4 Libvirt
Contents
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 部份)。
先決條件
此頁假設你已經遵照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
安裝 libvirt(在 Dom0 機器上)
首先我們要安裝 libvirt 所需的基本套件:
CentOS 6 監督器:
yum install libvirt python-virtinst libvirt-daemon-xen
CentOS 7 監督器:
yum install libvirt libvirt-daemon-xen
安裝後,請重新啟動你的 Dom0 機器。
遠端存取 LibVirt
在多數情況,下我們不建議在 Dom0 伺服器上安裝整套圖像化系統,因此多數人會從遠端存取/控制 Dom0 libvirt。
你有 2 個可取的途徑 …… 其一是透過一台圖像化機器(例如一台 CentOS-6 工作站),其二是透過 ssh 應用 virsh 指令行程式。
透過 PolicyKit 控制 libvirt 的存取權
如果你想將一台 CentOS-6 工作站連線到 Dom0 上的 virt-manager 並控制該台電腦上的 DomU 虛擬機器,你便需要利用 PolicyKit。當你利用某台機器上的 virsh 終端機直接連線到 Dom0 及控制它的 DomU 虛擬機器時,PolicyKit 也會被應用。
PolicyKit 讓你設計有彈性、精細的存取權,功能遠超㙎本範例所介紹以 unix 群組授權存取 libvirt 的做法。
如要設計複雜的存取權,請參閱 polkit 的文檔
設定 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。
連線到遠端的 Dom0
從遠端機器透過 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
從遠端機器透過 virsh 連線到 Dom0 機器
你在 Dom0 上利用 virsh 控制 DomU 虛擬機器的做法有兩種。
第一種是純粹 ssh 到 Dom0 機器,然後成為 root 用戶及從指令行執行 virhs。
第二種是採用上述例子的群組然後執行以下指令:
virsh -c xen+ssh://johnny@192.168.0.5
這種做法的好處就是我們無須把 Dom0 的 root 存取權發放給 johnny 用戶,他只須正常帳戶。他同樣能應用 virsh 的一切功能。
有關 virsh 的詳情,請參閱這份指南
建立 DomU 虛擬機器
|
如果你要安裝 CentOS 7 DomU 成為 paravirt 客端,請留意該虛擬機器的 /boot 不能採用 xfs —— 見 https://wiki.xen.org/wiki/PyGrub 。因此你必須利用 kickstart 檔或透過 vnc 進行安裝,以便能更改預設值。你可以在 extra-args 內加入這些選項。 |
利用 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。
透過 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 進行安裝的詳情請參閱此指南。
控制 DomU 虛擬機器
透過 libvirt,你可利用圖像化應用程式(virt-manager)或文字應用程式(virsh)來控制 DomU 虛擬機器。
這些應用程式可以位於 DomU 虛擬機器所身處的 Dom0 上(本地控制),它們也可以位於不同的機器上並連線到 DomU(遠端控制)。
不論是透過遠端或本地連線,兩種工具的實際操作都是相同。
有關遠端 virt-manager 或遠端 virsh 的連線,請參閱這些指引。你必須設置 libvirt 才能用這兩個工具來進行遠端存取。
有關採用 virsh 這參閱此指南;有關採用 virt-manager 這參閱此指南
橋接範例設定
以下是另一個橋接範例設定:
你必須安裝 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