在CentOS 6.3服务器上使用KVM进行虚拟化
本指南介绍如何安装和使用KVM在CentOS 6.3服务器上创建和运行虚拟机。 我将演示如何创建基于图像的虚拟机以及使用逻辑卷(LVM)的虚拟机。 KVM是基于内核的虚拟机的缩写,并利用硬件虚拟化,即需要一个支持硬件虚拟化的CPU,例如Intel VT或AMD-V。
我不会保证这将为您工作!
1初步说明
我正在使用CentOS 6.3服务器,其主机名为server1.example.com
,IP地址为192.168.0.100,
这里是我的KVM主机。
我的CentOS 6.3系统上已禁用SELinux。 我没有用SELinux测试; 它可能会工作,但如果没有,你最好关闭SELinux:
vi /etc/selinux/config
设置SELINUX =已禁用
...
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted |
...并重启:
reboot
我们还需要一个桌面系统,我们安装virt-manager,以便我们可以连接到我们安装的虚拟机的图形控制台。 我在这里使用Fedora 17桌面。
2安装KVM
CentOS 6.3 KVM主机:
首先检查您的CPU是否支持硬件虚拟化 - 如果是这种情况,该命令
egrep '(vmx|svm)' --color=always /proc/cpuinfo
应该显示一些东西,例如:
[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
[root@server1 ~]#
如果没有显示任何内容,那么您的处理器不支持硬件虚拟化,您必须停止在这里。
现在我们导入软件包的GPG密钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
要安装KVM和virtinst
(创建虚拟机的工具),我们运行
yum install kvm libvirt python-virtinst qemu-kvm
然后启动libvirt守护进程:
/etc/init.d/libvirtd start
要检查KVM是否已成功安装,请运行
virsh -c qemu:///system list
它应该显示如下:
[root@server1 ~]# virsh -c qemu:///system list
Id Name State
----------------------------------
[root@server1 ~]#
如果它显示错误,那么出现问题。
接下来,我们需要在我们的服务器上设置一个网桥,以便我们的虚拟机可以从其他主机访问,就像它们是网络中的物理系统一样。
为此,我们安装了包bridge-utils
...
yum install bridge-utils
...并配置一个桥。 创建文件/ etc / sysconfig / network-scripts / ifcfg-br0
(请使用/ etc / sysconfig / network-scripts / ifcfg-eth0
文件中的IPADDR
, PREFIX
, GATEWAY,DNS1
和DNS2
值); 确保使用TYPE = Bridge
,而不是TYPE =以太网
:
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0" |
修改/ etc / sysconfig / network-scripts / ifcfg-eth0
如下(注释掉BOOTPROTO
, IPADDR
, PREFIX
, GATEWAY
, DNS1
和DNS2
,并添加BRIDGE = br0
):
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" #BOOTPROTO=none NM_CONTROLLED="yes" ONBOOT=yes TYPE="Ethernet" UUID="73cb0b12-1f42-49b0-ad69-731e888276ff" HWADDR=00:1E:90:F3:F0:02 #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" BRIDGE=br0 |
重新启动网络...
/etc/init.d/network restart
...运行
ifconfig
现在应该显示网桥( br0
):
[root@server1 ~]# ifconfig
br0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:460 (460.0 b) TX bytes:2298 (2.2 KiB)
eth0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18455 errors:0 dropped:0 overruns:0 frame:0
TX packets:11861 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26163057 (24.9 MiB) TX bytes:1100370 (1.0 MiB)
Interrupt:25 Base address:0xe000
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:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2456 (2.3 KiB) TX bytes:2456 (2.3 KiB)
virbr0 Link encap:Ethernet HWaddr 52:54:00:AC:AC:8F
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)
[root@server1 ~]#
3安装virt-viewer或virt-manager在您的Fedora 17桌面上
Fedora 17桌面:
我们需要一种连接到我们客人的图形控制台的方法 - 我们可以使用virt-manager来实现。 我假设你使用的是Fedora 17桌面。
成为根...
su
...并运行...
yum install virt-manager libvirt qemu-system-x86 openssh-askpass
...安装virt-manager。
(如果您使用的是Ubuntu 12.04桌面,可以按如下方式安装virt-manager:
sudo apt-get install virt-manager
)
4从命令行创建一个Debian Squeeze Guest(基于图像)
CentOs 6.3 KVM主机:
现在我们回到CentOS 6.3 KVM主机。
看一眼
man virt-install
学习如何使用virt-install。
我们将在第二章中安装KVM时自动创建的/ var / lib / libvirt / images /目录
中创建基于映像的虚拟机。
要创建名称为vm10,512MB
RAM,两个虚拟CPU和磁盘映像/var/lib/libvirt/images/vm10.img
(大小为12GB)的Debian Squeeze guest虚拟机(桥接模式),请插入Debian将Netinstall CD压缩到CD驱动器并运行
virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /dev/cdrom --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
当然,您还可以创建Debian Squeeze Netinstall CD的ISO映像(请在/ var / lib / libvirt / images /目录中
创建它,因为稍后将介绍如何通过Fedora从Fedora创建虚拟机桌面和virt-manager将在/ var / lib / libvirt / images /目录
中查找ISO映像)
dd if=/dev/cdrom of=/var/lib/libvirt/images/debian-6.0.5-amd64-netinst.iso
...并在virt-install命令中使用ISO映像:
virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.5-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
输出如下:
[root@server1 ~]# virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.5-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
Starting install...
Allocating 'vm10.img' | 12 GB 00:00
Creating domain... | 0 B 00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@server1 ~]#