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