在OpenSUSE 12.2服务器上使用KVM进行虚拟化
本指南介绍如何安装和使用KVM在OpenSUSE 12.2服务器上创建和运行虚拟机。 我将演示如何创建基于图像的虚拟机以及使用逻辑卷(LVM)的虚拟机。 KVM是基于内核的虚拟机的缩写,并利用硬件虚拟化,即需要一个支持硬件虚拟化的CPU,例如Intel VT或AMD-V。
我不会保证这将为您工作!
1初步说明
我使用的主机名为server1.example.com
的OpenSUSE 12.2服务器和IP地址192.168.0.100
这里作为我的KVM主机。
我们还需要一个桌面系统,我们安装virt-manager,以便我们可以连接到我们安装的虚拟机的图形控制台。 我在这里使用OpenSUSE 12.2桌面。
2安装KVM
OpenSUSE 12.2 KVM主机:
首先检查您的CPU是否支持硬件虚拟化 - 如果是这种情况,该命令
egrep '(vmx|svm)' --color=always /proc/cpuinfo
应该显示一些东西,例如:
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 rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
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 rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
server1:~ #
如果没有显示任何内容,那么您的处理器不支持硬件虚拟化,您必须停止在这里。
要安装KVM和virtinst
(创建虚拟机的工具),我们运行
zypper install kvm libvirt libvirt-python qemu virt-manager
不幸的是libvirt-python与包模式冲突 - openSUSE-minimal_base-conflict。 因此,我们必须选择卸载该包:
问题:libvirt-python-0.9.11.4-1.2.1.x86_64需要python = 2.7,但无法提供此要求
可卸载的提供者:python-2.7.3-3.6.1.x86_64 [openSUSE-12.2-1.6]
python-2.7.3-3.6.1.i586 [repo-oss]
python-2.7.3-3.6.1.x86_64 [repo-oss]
解决方案1:将执行以下操作:
不要安装libvirt-python-0.9.11.4-1.2.1.x86_64
不要安装virt-manager-0.9.4-1.6.1.x86_64
解决方案2:将执行以下操作:
不要安装virt-manager-0.9.4-1.6.1.x86_64
不要安装libvirt-python-0.9.11.4-1.2.1.x86_64
解决方案3:卸载模式 - openSUSE-minimal_base-conflict-12.2-5.5.1.x86_64
解决方案4:忽略其一些依赖关系libvirt-python-0.9.11.4-1.2.1.x86_64
从上面的解决方案中选择数字或取消[1/2/3/4 / c](c):
< - 3
然后为libvirtd创建系统启动链接...
systemctl enable libvirtd.service
...并启动libvirt守护进程:
systemctl start libvirtd.service
要检查KVM是否已成功安装,请运行
virsh -c qemu:///system list
它应该显示如下:
server1:~ # virsh -c qemu:///system list
WARNING: no socket to connect to
Id Name State
----------------------------------
server1:~ #
如果它显示错误,那么出现问题。
接下来,我们需要在我们的服务器上设置一个网桥,以便我们的虚拟机可以从其他主机访问,就像它们是网络中的物理系统一样。
为此,我们安装了包bridge-utils
...
zypper install bridge-utils
...并配置一个桥。
要配置网桥,请按如下所示创建文件/ etc / sysconfig / network / ifcfg-br0
(请确保使用/ etc / sysconfig / network / ifcfg-eth0
文件中的IPADDR
设置):
vi /etc/sysconfig/network/ifcfg-br0
STARTMODE='auto' BOOTPROTO='static' IPADDR='192.168.0.100/24' MTU='' NETMASK='' NETWORK='' BROADCAST='' USERCONTROL=no NAME='Bridge 0' NM_CONTROLLED=no BRIDGE='yes' BRIDGE_PORTS='eth0' BRIDGE_AGEINGTIME='300' BRIDGE_FORWARDDELAY='0' BRIDGE_HELLOTIME='2' BRIDGE_MAXAGE='20' BRIDGE_PATHCOSTS='19' BRIDGE_PORTPRIORITIES= BRIDGE_PRIORITY= BRIDGE_STP='on' |
(如果您收到消息您没有安装有效的vim二进制包,请安装“vim”,“vim-enhanced”或“gvim”
,请运行
zypper install vim
安装vi并重试。 )
修改/ etc / sysconfig / network / ifcfg-eth0
如下(将IPADDR
设置为0.0.0.0
,并将STARTMODE
更改为hotplug
):
vi /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='static' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='0.0.0.0' MTU='' NAME='MCP77 Ethernet' NETMASK='' NETWORK='' REMOTE_IPADDR='' STARTMODE='hotplug' USERCONTROL='no' |
然后重新启动网络:
systemctl restart network.service
之后运行
ifconfig
现在应该显示网桥( br0
):
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:92 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:12716 (12.4 Kb) TX bytes:5961 (5.8 Kb)
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:131711 errors:0 dropped:0 overruns:0 frame:0
TX packets:80954 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:185764801 (177.1 Mb) TX bytes:6374023 (6.0 Mb)
Interrupt:41 Base address:0x8000
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:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:860 (860.0 b) TX bytes:860 (860.0 b)
server1:~ #
3在您的OpenSUSE 12.1桌面上安装virt-manager
OpenSUSE 12.2桌面:
我们需要一种连接到我们客人的图形控制台的方法 - 我们可以使用virt-manager来实现。 我假设你使用的是一个OpenSUSE 12.2桌面。
成为根...
su
...并运行...
zypper install virt-manager libvirt
...安装virt-manager。
(如果您使用的是Ubuntu 11.10桌面,则可以安装virt-manager,如下所示:
sudo apt-get install virt-manager
)
4创建一个Debian Squeeze Guest(基于图像)
OpenSUSE 12.2 KVM主机:
现在我们回到我们的OpenSUSE 12.2 KVM主机。
看一眼
virt-install --help
学习如何使用它。
我们将在第二章中安装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 /目录中
创建它,因为稍后我将通过您的OpenSUSE的virt-manager显示如何创建虚拟机12.2桌面,virt-manager将在/ var / lib / libvirt / images /目录
中查找ISO映像)
dd if=/dev/cdrom of=/var/lib/libvirt/images/debian-6.0.0-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.0-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
输出如下:
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.0-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
WARNING: no socket to connect to
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.
server1:~ #