如何在CentOS上安装和配置KVM
KVM 是一种基于内核的虚拟机管理程序,在 Linux 服务器市场中迅速成熟并流行。自 RHEL 6 起,红帽正式放弃了 Xen,转而使用 KVM。随着红帽正式支持 KVM,在基于 RedHat 的系统上安装 KVM 应该变得轻而易举。
在本教程中,我将描述如何在 CentOS 上安装和配置 KVM 和 VirtManager。使用本教程不需要有 CentOS 桌面环境。本教程实际上是在 CentOS 6.4 服务器上测试的。
检查硬件虚拟化支持
KVM需要硬件虚拟化支持,例如Intel VT或AMD的AMD-V,它们是硬件辅助虚拟化的指令集扩展。检查 CentOS 主机上是否支持硬件虚拟化:
$ egrep -i 'vmx|svm' --color=always /proc/cpuinfo
如果CPU标志包含vmx
或svm
,则表示硬件虚拟化支持可用。
为本地主机配置 FQDN
为本地主机配置 FQDN(完全限定域名)。否则,您可能会在启动 libvirtd
守护进程时收到警告,例如“getaddrinfo failed for 'myhost': Name or service notknown”。
要配置 FQDN,请编辑以下配置文件:
$ sudo -e /etc/sysconfig/network
HOSTNAME=xxx.yyy
禁用 SELinux
在安装 KVM 之前,请注意有几个 SELinux 布尔值会影响 KVM 和 libvirt 的行为。在本教程中,我将把 SELinux 设置为 Permissive 以进行演示。如果您不想更改 SELinux 模式,请参阅有关 KVM SELinux 布尔值的文档。
要在 CentOS 上禁用 SELinux:
$ sudo -e /etc/selinux/config
SELINUX=permissive
重新启动计算机以使更改生效。
安装 KVM、QEMU 和用户空间工具
安装 KVM 和 virtinst(创建虚拟机的工具),如下所示:
$ sudo yum install kvm libvirt python-virtinst qemu-kvm
启动 libvirtd
守护进程,并将其设置为自动启动:
$ sudo service libvirtd start
$ sudo chkconfig libvirtd on
检查KVM是否安装成功。您应该不会看到如下错误。
$ sudo virsh -c qemu:///system list
Id Name State
----------------------------------------------------
为 VM 网络配置 Linux 桥
单独安装KVM无法实现虚拟机之间的通信或访问外部网络。您需要单独配置虚拟机网络。在本教程中,我将通过 Linux 桥接设置桥接网络
。
安装创建和管理桥接设备所需的软件包:
$ sudo yum install bridge-utils
如果网络管理器已启用,您需要将其禁用,然后切换到默认的网络管理器
,如下所示。
$ sudo service NetworkManager stop
$ sudo chkconfig NetworkManager off
$ sudo chkconfig network on
$ sudo service network start
禁用网络管理器后,您可以通过在 /etc/sysconfig/network-scripts
中创建其配置来配置桥接接口。
要配置新网桥,您首先必须选择一个活动网络接口(例如,eth0
),并将其从属于该网桥。根据网络接口是通过 DHCP 还是静态分配 IP 地址,有两种不同的方法来配置新网桥。
通过 DHCP 配置网桥 br0
:
$ sudo -e /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BRIDGE=br0
$ sudo -e /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
要使用静态 IP 地址配置网桥 br0
:
$ sudo -e /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BRIDGE=br0
$ sudo -e /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.10.1.105
NETMASK=255.255.255.0
GATEWAY=10.10.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
请注意,从属接口 (eth0
) 的配置没有 BOOTPROTO
字段,但添加了 BRIDGE
字段。
相应生成配置文件后,运行以下命令来激活更改。
$ sudo service network restart
您现在应该看到具有正确 IP 地址的 br0
桥接口,如下所示。
$ ifconfig
br0 Link encap:Ethernet HWaddr D4:85:64:78:01:DC
inet addr:10.10.1.105 Bcast:135.112.33.255 Mask:255.255.255.0
inet6 addr: fe80::d685:64ff:fe78:1dc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:182 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15434 (15.0 KiB) TX bytes:6648 (6.4 KiB)
eth0 Link encap:Ethernet HWaddr D4:85:64:78:01:DC
inet6 addr: fe80::d685:64ff:fe78:1dc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:188 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21424 (20.9 KiB) TX bytes:6408 (6.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
virbr0 Link encap:Ethernet HWaddr 52:54:00:59:A3:88
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
安装VirtManager
最后一步是安装名为 VirtManager 的桌面 UI,用于通过 libvirt 管理虚拟机 (VM)。
Install and Run VirtManager
$ sudo yum install virt-manager libvirt qemu-system-x86 openssh-askpass libcanberra-devel
Launch VirtManager Locally
$ sudo yum install virt-manager libvirt qemu-system-x86 openssh-askpass libcanberra-devel
如果您使用的是 CentOS 桌面,此时您应该能够在本地启动 VirtManager,只需运行:
$ sudo virt-manager

远程启动 VirtManager
但是,如果您使用没有桌面 UI 的 CentOS 服务器,请按照以下步骤启动 VirtManager。
首先,在 CentOS 服务器上运行的 sshd
上启用 X11 转发:
$ sudo yum install xauth
$ sudo -e /etc/ssh/sshd_config
X11Forwarding yes
$ sudo service sshd restart
然后,为 virt-manager 创建以下包装器脚本。
$ sudo -e /usr/bin/vm
#! /bin/bash
xauth list | while read line; do
sudo -i xauth add $line
done
sudo -i virt-manager
$ sudo chmod +x /usr/bin/vm
最后,从单独的桌面计算机连接到 CentOS 服务器,并运行包装脚本 vm
来远程启动 VirtManager。
$ ssh -X [email _server
KVM 和 VirtManager 设置故障排除
1. 如果您在尝试远程启动 VirtManager 时看到以下错误,请确保使用包装脚本 (vm
) 来启动它,如上所述。
X11 connection rejected because of wrong authentication.
Traceback (most recent call last):
File "/usr/share/virt-manager/virt-manager.py", line 383, in
main()
File "/usr/share/virt-manager/virt-manager.py", line 286, in main
raise gtk_error
RuntimeError: could not open display
2. 如果您看到以下 D-Bus 错误:
D-Bus library appears to be incorrectly set up; failed to read machine
uuid: UUID file '/var/lib/dbus/machine-id'
然后运行以下命令并重新启动主机。
$ sudo sh -c 'dbus-uuidgen > /var/lib/dbus/machine-id'
3. 如果运行 VirtManager 时遇到字体问题,请安装以下字体,然后重新启动它。
$ sudo yum install dejavu-lgc-sans-fonts