如何在具有桥接网络的CentOS 6.2上安装KVM和libvirt
本教程介绍如何在Linux CentOS 6.2上安装KVM虚拟机管理程序和libvirt虚拟化库。 在本指南的最后,您将拥有一个具有以下功能的CentOS盒(命名为主机):
-
虚拟化容量
:多个客户端(Linux / Windows)的机会运行并共享主机的硬件 -
桥网络配置
:您将能够直接访问客户端,就像它们是同一个LAN上的物理机器一样,反之亦然。 -
可视化管理
:使用virt-manager
(我在这个howto中使用Ubuntu 11.10),您将能够远程管理CentOS主机上的虚拟机。
怎么了
KVM:
“KVM(用于基于内核的虚拟机))是一款针对Linux的x86硬件虚拟化扩展(Intel VT或AMD-V)的完全虚拟化解决方案,它包含一个可加载内核模块kvm.ko,它提供核心虚拟化基础设施和处理器专用模块,kvm-intel.ko或kvm-amd.ko ...“
“使用KVM,可以运行运行未修改的Linux或Windows映像的多个虚拟机,每个虚拟机都有专用的虚拟化硬件:网卡,磁盘,图形适配器等。”
libvirt:
- “与最近版本的Linux的虚拟化功能交互的工具包...”
- “根据GNU通用公共许可证提供的免费软件”。
- “长期稳定的C API”
- “一套通用语言的绑定”
Intel-VT和AMD-V
要求
- 硬件 :
- 软件 :
- 一个以前安装的Linux CentOS 6.2与最近的Linux内核。 关于这个如何 :
$ uname -r
2.6.32-220.2.1.el6.x86_64
$ lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.2 (Final)
Release: 6.2
Codename: Final - 安装了Desktop环境的Linux客户机
- 一个可用的CentOS镜像/存储库
- 一个以前安装的Linux CentOS 6.2与最近的Linux内核。 关于这个如何 :
安装步骤
- 登录CentOS作为bozz用户(一个sudoer用户),并检查您的硬件是否支持虚拟化扩展,在我的硬件上是:
- 安装
kvm
和libvirt
软件包:$ sudo yum install kvm libvirt
- 将这两个软件包更新到可用于存储库/镜像的最新版本:
$ sudo yum update libvirt kvm
$ yum info libvirt
Installed Packages
Name : libvirt
Arch : x86_64
Version : 0.9.4
Release : 23.el6_2.4$ yum info qemu-kvm
Installed Packages
Name : qemu-kvm
Arch : x86_64
Epoch : 2
Version : 0.12.1.2
Release : 2.209.el6_2.1 - 重新启动
libvirtd
守护进程:$ sudo service libvirtd restart
- 验证
kvm
模块是否加载,您应该看到amd
或intel
取决于硬件:$ lsmod | grep kvm
kvm_intel 50380 0
kvm 305113 1 kvm_intel - 发出一个virsh命令,以确保本地根连接。
$ sudo virsh sysinfo
<sysinfo type =“smbios”>
...
- [可选]要使用非root用户使用KVM,请验证是否在安装时创建了kvm组:
$ cat /etc/group | grep kvm
kvm:x:36:qemu
然后将
bozz
用户添加到kvm
组,因此可以访问虚拟机管理程序:$ sudo usermod -a -G kvm bozz
$ logout再次登录为
bozz
用户并验证kvm
的会员资格:$ id
uid=500(bozz) gid=500(bozz) groups=500(bozz),10(wheel),36(kvm) context=...
并验证
/ dev / kvm
是否由组kvm
拥有:$ ls -l /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 Jan 17 14:50 /dev/kvm
在运行udev的系统上,您可能需要在udev配置中添加以下行,以便自动将正确的组分配给新创建的设备:
$ cat /etc/udev/rules.d/80-kvm.rules
KERNEL=="kvm", GROUP="kvm", MODE="0666"
- 要使用非root帐户管理libvirt ,您应该使用PolicyKit 。 定义
libvirt
组的访问控制:$ sudo groupadd libvirt
$ sudo usermod -a -G libvirt bozz
$ logout再次以
bozz
用户身份登录并编辑新档案:$ sudo nano /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
与此内容:
[libvirt Management Access] # For allowing access to specific user only: #Identity=unix-user:bozz # For allowing access to a group (like this guide): Identity=unix-group:libvirt Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes
重新启动
libvirtd
守护进程:$ sudo service libvirtd restart
验证
bozz
用户是否可以本地访问qemu:/// system
( 注意 : 不鼓励使用qemu:/// session ):$ virsh -c qemu:///system sysinfo
<sysinfo type="smbios">
...验证
bozz
用户是否可以远程访问qemu + ssh:// bozz @ SERVER / system
。 所以在Linux客户端问题上:对于Ubuntu客户端(如本指南):
$ sudo apt-get install libvirt-bin
对于CentOS客户端:
$ sudo yum install libvirt
然后:
$ virsh -c qemu+ssh://bozz@SERVER/system sysinfo
<sysinfo type="smbios">
...更改默认映像目录下的组所有权和权限:
$ sudo chown root:libvirt /var/lib/libvirt/images
$ sudo chmod g+rw /var/lib/libvirt/images - [可选]当
libvirtd
( > = 0.9.3 )以非root
方式运行时,它尝试读取〜/ .libvirt / libvirtd.conf
(请参阅此处 )。 解决办法是:$ mkdir -p ~/.libvirt
$ touch ~/.libvirt/libvirtd.conf然后发布一个
virsh
命令作为bozz
用户:$ virsh list
Id Name State
---------------------------------- - 通过在
/ etc / sysconfig / network-scripts / ifcfg-br0
创建新的网络脚本来配置桥接网络:$ sudo nano /etc/sysconfig/network-scripts/ifcfg-br0
并根据您的LAN设置配置参数( 注意 :选项区分大小写,即桥和桥是两个不同的选项):
DEVICE="br0" TYPE=Bridge DELAY=0 ONBOOT="yes" BOOTPROTO=static IPADDR=192.168.11.12 NETMASK=255.255.255.0 NETWORK=192.168.11.0 GATEWAY=192.168.11.1 DNS1=192.168.11.2 PEERDNS="yes" NM_CONTROLLED=no
然后编辑以太网网络脚本
/ etc / sysconfig / network-scripts / ifcfg-eth0
:$ sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
具有以下内容( 注意 :硬件地址取决于您的NIC,此处使用任意MAC地址):
DEVICE="eth0" HWADDR="00:2C:C2:85:29:A3" ONBOOT="yes" BRIDGE=br0 NM_CONTROLLED=no
重新启动网络服务:
$ sudo service network restart
并验证bridge配置:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.002cc28529a3 no eth0
...配置iptables以允许所有流量通过网桥转发:
$ sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
$ sudo service iptables save
$ sudo service iptables restart防止桥接流量被iptables规则处理,这提高了网桥的性能。 在
/etc/sysctl.conf中
附加以下行:net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
重新加载使用sysctl配置的内核参数:
$ sudo sysctl -p /etc/sysctl.conf
重新启动libvirt守护进程:
$ sudo service libvirtd reload
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid