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