GVKun编程网logo

CentOS 7 KVM虚拟机实战(centos虚拟化kvm)

8

在本文中,您将会了解到关于CentOS7KVM虚拟机实战的新资讯,同时我们还将为您解释centos虚拟化kvm的相关在本文中,我们将带你探索CentOS7KVM虚拟机实战的奥秘,分析centos虚拟化

在本文中,您将会了解到关于CentOS 7 KVM虚拟机实战的新资讯,同时我们还将为您解释centos虚拟化kvm的相关在本文中,我们将带你探索CentOS 7 KVM虚拟机实战的奥秘,分析centos虚拟化kvm的特点,并给出一些关于003.KVM虚拟机部署-CentOS6.8、CentOS 6.3安装kvm虚拟机并安装Windows系统、Centos 6.5 KVM虚拟机中快照的创建、恢复、删除、CentOS 6.5安装KVM虚拟化的实用技巧。

本文目录一览:

CentOS 7 KVM虚拟机实战(centos虚拟化kvm)

CentOS 7 KVM虚拟机实战(centos虚拟化kvm)

本文运行的环境:
uname -a
3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

检查硬件是否支持虚拟化:
egrep "vmx|svm" /proc/cpuinfo #vmx:Intel svm:AMD

安装KVM和相关工具:
yum install -y qemu-kvm bridge-utils libvirt virt-install
lsmof | grep kvm #验证安装结果
systemctl start libvirtd #启动libvirtd服务
systemctl status libvirtd #查看libvirtd服务启动状态
systemctl is-enabled libvirtd #查看libvirtd服务是否开机自动运行
systemctl enadble libvirtd #设置libvirtd服务开机自动运行

配置网桥:
1、创建网桥ifcfg-br0:
TYPE=Bridge
BOOTPROTO=static
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.16
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=119.29.29.29
DNS2=223.5.5.5
2、配置绑定的物理网卡ifcfg-eth0:
TYPE=Ethernet
BOOTPROTO=none
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=fe2685ec-266a-4bc8-a003-52198570a913
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
3、重启网络服务:
systemctl restart network.service
4、验证结果:
ip addr show

创建虚拟机:
1、创建系统安装ISO文件目录和虚拟机镜像IMG文件目录,并把系统安装文件放入iso目录
mkdir -p /home/iso /opt/image
2、配置防火墙,开放VNC连接端口
firewall-cmd --zone=public --add-port=5900/tcp --permanent
firewall-cmd --reload
3、创建虚拟机:
qemu-img create -f qcow2 /opt/image/win2008.img 100g #创建IMG文件
virt-install -n win2008 --disk /opt/image/win2008.img --network bridge=br0 \
--os-variant=win2k8r2 --cdrom /home/iso/cn_windows_server_2008_r2.iso \
--vnc --vncport=5900 --vnclisten=0.0.0.0 --vcpu=24 --ram 49152
4、通过RealVNC远程连接虚拟机,完成虚拟机系统的安装

虚拟机管理:
1、查看安装的虚拟机列表:
virsh list
2、修改虚拟机配置文件,使之生效的方法:
方法1、virsh shutdown <虚拟机名称> #关闭虚拟机
virsh edit <虚拟机名称> #编辑配置文件
virsh start <虚拟机名称> #启动虚拟机
方法2、virsh destroy <虚拟机名称> #强制关闭虚拟机,相当于拨电源线
virsh edit <虚拟机名称> #编辑配置文件
virsh define /etc/libvirt/qemu/<虚拟机名称>.xml #重新加载虚拟机XML配置文件
virsh start <虚拟机名称> #虚拟机开机
3、重启虚拟机:
virsh reboot <虚拟机名称>
4、虚拟机克隆:
virsh shutdown <源虚拟机名称>
virt-clone -o <源虚拟机名称> -n <目标虚拟机名称> -f /opt/img/<目标虚拟机名称>.img
virsh start <目标虚拟机名称> #启动目标虚拟机,修改hostname、IP信息后重启
5、虚拟机迁移:
1、将:
/opt/img/<源虚拟机名称>.img
/etc/libvirt/qemu/<源虚拟机名称>.xml
复制到目标服务器相应目录下。以下操作在目标服务器上执行。
2、编辑/etc/libvirt/qemu/<虚拟机名称>.xml,修改
<name>win2008</name>
<uuid>5284e097-373e-4e6e-85db-ef5635240023</uuid>
检查:
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘/>
<source file=‘/opt/image/win2008.img‘/>
<target dev=‘hda‘ bus=‘ide‘/>
<address type=‘drive‘ controller=‘0‘ bus=‘0‘ target=‘0‘ unit=‘0‘/>
</disk>
3、重新定义虚拟机
virsh define /etc/libvirt/qemu/<虚拟机名称>.xml
4、开机,修改hostname、ip信息后重启
virsh start <虚拟机名称>
6、虚拟机运行Linux系统时,配置从宿主机上直接进入虚拟机控制台:
1、进入虚拟机,修改/etc/default/grub:
GRUB_disTRIBUTOR="$(sed ‘s,release .*$,g‘ /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_disABLE_SUBMENU=true
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200"
GRUB_disABLE_RECOVERY="true"</pre>

2、更新启动文件,然后重启
     grub2-mkconfig -o /boot/grub2/grub.cfg
3、在宿主机上登录虚拟机,退出登录:Ctrl+]
    virsh console think8848-kvmbase

7、宿主机进入系统自动运行虚拟机virsh autostart <虚拟机名称>

003.KVM虚拟机部署-CentOS6.8

003.KVM虚拟机部署-CentOS6.8

一 实验说明

CentOS 7的KVM虚拟机推荐使用qcow2磁盘格式,本实验在KVM中安装CentOS 6.8 64虚拟机。

二 命令部署过程

2.1 上传镜像

使用winscp上传至/data/iso/

2.2 格式化磁盘

  1 virt-install --network bridge=br0,model=virtio --name=vm01-centos6.8 --ram=1024 --vcpus=2 --disk path=/data/images/vm01-centos6.8.img,size=20,bus=virtio --cdrom /data/iso/CentOS-6.8-x86_64-bin-DVD1.iso --vnc --vncport=5902 --vnclisten=0.0.0.0 --noautoconsole --accelerate

参数说明:

--name:指定虚拟机名称

--ram:分配内存大小。

--vcpus:分配CPU核心数,最大与实体机CPU核心数相同。

--disk:指定虚拟机镜像,size指定分配大小单位为G。

--network:网络类型,此处用的是默认,一般用的应该是bridge桥接。

--accelerate:加速

--cdrom:指定安装镜像iso。

--vnc:启用VNC远程管理,一般安装系统都要启用。

--vncport:指定VNC监控端口,默认端口为5900,端口不能重复。

--vnclisten:指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。

--os-type=linux,windows:常见操作系统类型。

--os-variant=

win7:MicrosoftWindows7

vista:MicrosoftWindowsVista

winxp64:MicrosoftWindowsXP(x86_64)

winxp:MicrosoftWindowsXP

win2k8:MicrosoftWindowsServer2008

win2k3:MicrosoftWindowsServer2003

freebsd8:FreeBSD8.x

generic:Generic

debiansqueeze:DebianSqueeze

debianlenny:DebianLenny

fedora16:Fedora16

fedora15:Fedora15

fedora14:Fedora14

mes5.1:MandrivaEnterpriseServer5.1andlater

mandriva2010:MandrivaLinux2010andlater

rhel6:RedHatEnterpriseLinux6

rhel5.4:RedHatEnterpriseLinux5.4orlater

rhel4:RedHatEnterpriseLinux4

sles11:SuseLinuxEnterpriseServer11

sles10:SuseLinuxEnterpriseServer

ubuntuoneiric:Ubuntu11.10(OneiricOcelot)

ubuntunatty:Ubuntu11.04(NattyNarwhal)

ubuntumaverick:Ubuntu10.10(MaverickMeerkat)

ubuntulucid:Ubuntu10.04(LucidLynx)

ubuntuhardy:Ubuntu8.04LTS(HardyHeron)

2.3 kvm虚拟机安装

  1 [root@kvm-host qemu]# virt-manager

03

安装过程略

三 登录虚机

3.1 启动虚机

  1 [root@kvm-host ~]# virsh list --all
  2  Id    Name                           State
  3 ----------------------------------------------------
  4  -     vm01-centos6.8                 shut off
  5 [root@kvm-host ~]# virsh start vm01-centos6.8

3.1 Virtual Machine Manager登录

图形界面中,使用virt-manager从图形界面登录。

04

3.2 命令行登录

  1 [root@kvm-host ~]# virsh console vm01-centos6.8

四 其他注意

4.1 kvm虚机网络

有可能kvm虚机登录后只有lo网卡,却没有eth0.

05

需要在kvm虚机里执行——

  1 vi /etc/sysconfig/network-scripts/ifcfg-eth0
  2 DEVICE=eth0
  3 HWADDR=52:54:00:cd:4e:34		#需要和kvm的xml配置文件中一直,全局唯一。
  4 ONBOOT=yes				#开机启动
  5 NM_CONTROLLED=yes
  6 BOOTPROTO=dhcp
  7 提示:若局域网内存在DHCP可开启,若不存在,可配置和宿主机同网段的静态IP。
  8 #ifconfig eth0 up
  9 #dhclient eth0			#开启eth0网卡。

4.2 无法console连接kvm虚机

06

出现卡死,需要在kmv虚拟机里修改相关文件,CentOS7的kvm虚拟机中可通过以下方式解决——

  1 [root@kvm-host ~]# grubby --update-kernel=ALL --args="console=ttyS0"
  2 CentOS6中可通过以下方式解决——
  3 [root@kvm-host ~]# echo ssyS0 >> /etc/securetty		#宿主机/etc/securetty添加ttyS0
  4 [root@kvm-host ~]# echo "S0:12345:respawn:/sbin/agetty/ ttyS0 115200" >> /etc/inittab
  5 [root@kvm-host ~]# vi /etc/grub.conf
  6 kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root …… rhgb quiet console=ttyS0    #最后加上console=ttyS0

07

CentOS 6.3安装kvm虚拟机并安装Windows系统

CentOS 6.3安装kvm虚拟机并安装Windows系统

在CentOS6.3上安装配置KVM和创建虚拟机

1.安装KVM
KVM(Kernel-basedVirtualMachine,即内核级虚拟机)是一个开源的系统虚拟化模块,是使用于Linux核心中的虚拟化基础建设,KVM在2007年2月被导入Linux2.6.20核心中,它也被引入FreeBSD。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
l它包含一个为处理器提供底层虚拟化可加载的核心模块kvm.ko (kvm-intel.ko或 kvm-AMD.ko)。
lkvm还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制 和界面。
lkvm能在不改变linux或windows镜像的情况下同时运行多个虚拟机,并为 每一个虚拟 机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
l在主流的linux内核,如2.6.20以上的内核均包含了kvm核心。
1)检查cpu
KVM的虚拟化需要硬件支持(如IntelVT技术或者AMDV技术)。是基于硬件的完全虚拟化
#egrep'vmx|svm'--color=always/proc/cpuinfo
如果输出的结果包含VMX,是Intel处理器虚拟机技术标志:如果包含SVM,是AMD处理器虚拟机技术的标志,如果什么都没有得到,那系统并没有支持虚拟化的处理,不能使用KVM。
2)安装KVM
直接在线安装KVM:
#yuminstall-ykvm-qemu-imglibvirtbridge-utils
安装完成后关闭selinux,然后重启linux
#vi/etc/sysconfig/selinux
SELINUX=disabled
#reboot
重启后确认libvirtd是否正常启动、重启
#/etc/init.d/libvirtdrestart
Stoppinglibvirtddaemon:[OK]
Startinglibvirtddaemon:[OK]

检查KVM是否加载成功
#lsmod|grepkvm
kvm_intel525706
kvm3147391kvm_intel
检查KVM是否成功安装
#virshlist--all
Id名称状态
----------------------------------------------------
KVM版本查询
#qemu-kvm-version
QEMUPCemulatorversion0.12.1(qemu-kvm-0.12.1.2),copyright(c)2003-2008 Fabrice Bellard
#virt-install--version
0.600.0
#virsh--version
0.9.10
配置网络桥接
[root@gb02network-scripts]#viifcfg-br0
DEVICE="br0"
BOOTPROTO=static
HWADDR="00:25:90:04:07:22"
ONBOOT="yes"
TYPE="Bridge"
IPADDR=10.10.102.2
NETMASK=255.255.0.0
GATEWAY=10.10.77.254
DNS1=8.8.8.8

[root@gb02network-scripts]#Viifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
BRIDGE="br0"
HWADDR="00:25:90:04:07:22"
IPADDR="10.10.102.2"
NETMASK="255.255.0.0"
GATEWAY="10.10.77.254"
IPV6INIT="no"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
UUID="2bed6be5-7a7a-48f9-aba9-151642659da8"
DNS1="8.8.8.8"

重启网络
[root@gb02network-scripts]#servicenetworkrestart

查看桥接网络
[root@gb02network-scripts]#brctlshow
bridgename bridgeid STPenabled interfaces
br0 8000.002590040722 no eth0
virbr0 8000.525400083a76 yes virbr0-nic

至此KVM安装完成,注意使用KVM命令时是qemu-kvm-[option]而不是kvm-[option]!!

2.安装VNC-server、VNC-viewer组件
vncserver是一个为了满足分布式用户共享服务器上面的资源,而在服务器上开启的一项服务,对应的客户端软件为vncviewer;它也可以是不同的操作系统,比如利用windows远程访问linux系统资源的一种远程访问方式。在通过KVM创建虚拟机的过程中我们可以在客户端利用VNC-viewer连接到服务器的VNC-server相应端口,进入图形化界面安装。
目前VNC主要有两个版本,即realVNC和tigerVNC,关于服务器安装VNC-server,两种版本都可以,但客户端的VNC-viewer,建议安装tigerVNC-viewer,因为realVNC-viewer会在创建虚拟机的端口如590x由于连接加密的问题连接不上服务器。
本次VNC安装采用服务器端realVNC-server和客户端tigerVNC-viewer。

1)yum源里面没有realVNC,首先要下载realVNC,本系统为64位的centOS6.3,所以下载了64位的版本5.0.5。
http://www.realvnc.com/download/vnc/
2)压缩包解压后会有两个rpm,服务器上仅安装server端
#rpm-ivhVNC-Server-5.0.5-Linux-x64.rpm
如果发现缺少什么包,就用yum安装,实测centos6.3没缺任何包。

3)安装序列号,进行注册
#/usr/bin/vnclicense-addVKUPN-MTHHC-UDHGS-UWD76-6N36A
这里贡献部分license
VKUPN-MTHHC-UDHGS-UWD76-6N36A
69NCN-JRLBC-QD28Y-5KLY2-UEE6A
6GQQQ-HXLBS-U2H8Q-B6UB7-R7R6A
8XWCU-ZRJBF-U7BXZ-G5EAE-ZPQ2A
6XQQQ-WXL4Q-NN4KX-NUTC6-8ZK6A
PGUFQ-HTZBB-WNHU7-YHDQC-A7R6A
至此服务器端的安装已经完成

4)客户端安装tigerVNC-viewer
首先下载tigerVNC,本客户端采用64位win7,所以下载64位的windows 版本
http://sourceforge.net/projects/tigervnc/
这里仅安装客户端tigerVNC-viewer
然后就可以用vncviewer远程桌面连接了,这里要用系统帐号的密码登录, 默认端口为5900,远程桌面连接端口则是5900+n(n是vncserver命令指定的)

CentOS 6.3安装kvm虚拟机并安装Windows系统

3.创建虚拟机
所有组件已经安装好,接下来我们创建虚拟机,分别创建centOS6.3和windows7虚拟机各一个。
1)创建centOS虚拟机

通过qemu-img创建一个10G的映像文件
#qemu-imgcreate-fqow2centos.img10G

通过/usr/libexec/qemu-kvm创建一个虚拟机,内存1024,从CentOS-6.3.iso安装
#qemu-kvm-m1024-cdromCentOS-6.3.iso-drivefile=centos6.3.img-bootd-netnic -nographic-vnc:2(vnc与:2之间有空格,默认5900端口被占用,使用5900+n端口吧)

通过vncviewer观察安装进度
连接端口处写10.10.102.2:5902,连接上之后出现安装界面,继续安装即可。

CentOS 6.3安装kvm虚拟机并安装Windows系统


2)安装windows7虚拟机

下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd,下载后放到工作目录下。
通过kvm-img或者qemu-img创建一个20G左右的映像文件
#qemu-imgcreate-frawwin7.img10G
通过/usr/libexec/qume-kvm创建一个虚拟机,内存1024,从windows7.iso安装
#qume-kvm–m1024-cdromwindows7.iso–drivefile=win7.img,if=virtio,boot=on -fdavirtio-win-1.1.16.vfd-bootd-nographic-vnc:3
通过vncviewer观察安装进度,用vnc安装win7,因为默认没有virtio驱动,所以识别 不了硬盘,需要手动选择,整个过程如下:

CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统

CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


设置开启远程桌面

CentOS 6.3安装kvm虚拟机并安装Windows系统


查看网卡驱动类型

CentOS 6.3安装kvm虚拟机并安装Windows系统


先关机!!!再次启动虚拟机,使用以下命令: kvm -m 1024 -drivefile=win7.img,boot=on -cdrom virtio-win-0.1-30.iso -net nic,model=virtio -net user -boot c -nographic -vnc 10.1.6.228:8

CentOS 6.3安装kvm虚拟机并安装Windows系统


修改网卡驱动类型

CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统

可以看到网卡驱动类型已经更换掉,再次关机!!!
上传win7镜像 glance add name="windows7"is_public=truecontainer_format=ovf disk_format=qcow2 < win7.img

CentOS 6.3安装kvm虚拟机并安装Windows系统



设置安全策略,因为要通过远程桌面连接win7,所以要放开3389端口

CentOS 6.3安装kvm虚拟机并安装Windows系统


启动一个名为win7的虚拟机,第一次启动比较慢,因为要把win7镜像从镜像服务器传送到计算节点上。

CentOS 6.3安装kvm虚拟机并安装Windows系统


通过dashboard的vnc登录

CentOS 6.3安装kvm虚拟机并安装Windows系统


发现一个杯具的事情,那就是dhcp分配的IP并没有生效,那我们就手动配置一下
CentOS 6.3安装kvm虚拟机并安装Windows系统CentOS 6.3安装kvm虚拟机并安装Windows系统

通过本机自带的mstsc登录win7虚拟机:10.1.200.4

CentOS 6.3安装kvm虚拟机并安装Windows系统


CentOS 6.3安装kvm虚拟机并安装Windows系统



大功告成!!!

Centos 6.5 KVM虚拟机中快照的创建、恢复、删除

Centos 6.5 KVM虚拟机中快照的创建、恢复、删除

所有的操作在安装了KVM的主机上


  1. 查看KVM中运行的虚拟机


wKioL1eN62LRTk6AAAAYRXRKjgk703.jpg


2.KVM的快照功能,虚拟机的硬盘一定要是qcow2格式

test用的硬盘是qcow2格式的,LUCI用的是raw格式的

给LUCI创建快照时会出错,如下图

wKiom1eN62KDMAbLAAAjV-unqwk812.jpg


3.

wKioL1eN62PwvtISAAAge_GZIGk379.jpg


给test虚拟机创建一个名为test_test的快照,显示成功如下图

wKiom1eN62Ojg96tAAAT4NZQVW0074.jpg


查看test虚拟机有哪些快照

wKiom1eN62PSuZrgAAAfPxtmUjw269.jpg


4.快照的恢复,可以不用关闭虚拟机直接恢复

wKioL1eN62SxV9atAAAmHTNioAc726.jpg


5.快照的删除(创建一个test_test2的快照并删除)

wKioL1eN62SDq9dwAABRcZFxWyM797.jpg

CentOS 6.5安装KVM虚拟化

CentOS 6.5安装KVM虚拟化

一、KVM简介

KVM(Kernel-basedVirtual Machine)即基于内核的虚拟机,是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

关于KVM:

  • KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。

  • 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。

  • 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

  • KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。

  • KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。

  • 在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

KVM 内存管理

KVM 继承了 Linux 系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对 NUMA 的支持能够让虚拟机高效访问更大的内存空间等。

KVM 基于 Intel 的 EPT ( ExtendedPage Table )或 AMD 的 RVI ( Rapid Virtualization Indexing )技术可以支持更新的内存虚拟功能,这可以降低 cpu 的占用率,并提供较好的吞吐量。

此外, KVM 还借助于 KSM ( Kernel Same-pageMerging )这个内核特性实现了内存页面共享 。 KSM 通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时, KSM 会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同 GuestOS 的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此, KSM 技术可以降低内存占用进而提高整体性能。

KVM组件

KVM主要两类组件组成:

/dev/kvm:管理虚拟机的设备节点,用户空间的程序可通过其ioctl()系统调用集来完成虚拟机的创建启动等管理工作;它是一个字符设备;其主要完成的操作包括:

1
2
3
4
5
创建虚拟机;
为虚拟机分配内存;
读、写Vcpu的寄存器;
向Vcpu注入中断;
运行Vcpu;

qemu进程:工作于用户空间的组件,用于仿真PC机的I/O类硬件设备;

qemu全称Quick Emulator。是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。

半虚拟化virtio组件

wKioL1aJ4m_gHtXgAAB2JYuZmrU358.jpg

virtio半虚拟化驱动的方式,可以获得很好的I/O性能,其性能几乎可以达到和native(即:非虚拟化环境中的原生系统)差不多的I/O性能。所以,在使用KVM之时,如果宿主机内核和客户机都支持virtio的情况下,一般推荐使用virtio达到更好的性能。当然,virtio的也是有缺点的,它必须要客户机安装特定的Virtio驱动使其知道是运行在虚拟化环境中,且按照Virtio的规定格式进行数据传输,不过客户机中可能有一些老的Linux系统不支持virtio和主流的Windows系统需要安装特定的驱动才支持Virtio。不过,较新的一些Linux发行版(如RHEL 6.3、Fedora 17等)默认都将virtio相关驱动编译为模块,可直接作为客户机使用virtio,而且对于主流Windows系统都有对应的virtio驱动程序可供下载使用。

virtio是对半虚拟化hypervisor中的一组通用模拟设备的抽象.该设置还允许hypervisor导出一组通用的模拟设备,并通过一个通用的应用程序接口(API)让它们变得可用.有了半虚拟化hypervisor之后,来宾操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟.后端驱动程序不需要是通用的,因为它们只实现前端所需的行为。

KVM工具栈

wKiom1aJ4mXiC26oAAEjoQk443c231.jpg

二、KVM虚拟化平台构建

1、安装准备

查看你的硬件是否支持虚拟化。命令:

1
egrep '(vmx|svm)' /proc/cpuinfo

注意:

  • 要有vmx或svm的标识才行。总的说来,AMD在虚拟化方面作得更好一些。

  • 我用的是VMware Workstation 10 ,并在虚拟机的设置中打开了cpu设置中的虚拟化引擎,选择了 Intel VT-x/EPT 或 AMD-V/RVI(V) 这个选项;具体设置如下图:

wKioL1aJ5SrhvuNpAADHq9wY-1s547.jpg

2、安装KVM

由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用 KVM 即可,其实这里不操作也没有问题,我们在安装qemu-kvm的时候就会自动加载。

1
2
3
4
[root@node1~] #modprobekvm_intel
[root@node1~] #lsmod|grepkvm
kvm_intel542850
kvm3331721kvm_intel

3、KVM虚拟机创建和管理所依赖的组件介绍

KVM 虚拟机的创建依赖qemu-kvm :

虽然 kvm 的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而 qemu-kvm 则是这样一种技术。它补充了 kvm 技术的不足,而且在性能上对 kvm 进行了优化。

我们还可以使用 virt-manager , virt-viewer 来管理虚拟机;

我们在创建和管理 KVM 虚拟机时还需要 libvirt 这个重要的组件:

它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术, kvm 、 xen 与 lxc 等,都可以调用 libvirt 提供的 api 对虚拟机进行管理。有这么多的虚拟机技术,它为何能提供这么多的管理功能那。是因为它的设计理念,它是面向驱动的架构设计。对任何一种虚拟机技术都开发设计相对于该技术的驱动。这样不同虚拟机技术就可以使用不同驱动,而且相互直接不会影响,方便扩展。而且 libvirt 提供了多种语言的编程接口,可以直接通过编程,调用 libvirt 提供的对外接口实现对虚拟机的操作。如今流行的云计算中的 IaaS 是与该库联系相当密切的。通过下图可以看出它的架构设计思想。

wKiom1aJ53uxzIvkAACEOQphDxo665.jpg

从该图可以看出,在 libvirtapi 之上会有很多个 driver ,对于每一种虚拟机技术都会有一种 driver ,用来充当该虚拟机技术与 libvirt 之间的包装接口。如此设计就可以避免 libvirt 需要设计各种针对不同虚拟机技术的接口,它主要关注底层的实现,提供对外接口调用,而不同的虚拟机技术通过调用 libvirt 提供的接口来完成自己所需要的功能。

4、安装KVM所需组件

1
yum install -yqemu-kvmlibvirtvirt-manager

安装完成后启动 libvirtd 服务:

1
servicelibvirtdstart

会自动启动一个桥设备,这相当于VMware Workstation中的host-only仅主机的网络设备;

wKiom1aJ6onwQ5YqAAGL0E-dHvQ836.jpg

使用网桥管理命令查看:

1
2
3
#brctlshow
bridgenamebridge id STPenabledinterfaces
virbr08000.5254006d26bb yes virbr0-nic

像 VMware Workstation 中我们需要创建物理桥接设备,可以使用 virsh 创建桥设备关联网卡到桥接设备上:

需要将 NetworkManager 服务关闭,开机启动也关闭,然后在创建桥接设备及关联网卡到桥接设备上:

1
virshiface-bridgeeth0br0

查看桥接设备及其他网络设备运行情况:

wKiom1aJ62KwA8V2AAILlQPUpiE282.jpg

至此,我们的虚拟化平台就构建完毕,下面就开始在 KVM 虚拟化平台上创建和管理虚拟机,我们先使用 qemu-kvm 来创建和管理虚拟机。

三、使用qemu-kvm管理KVM虚拟机

1、Qemu-kvm介绍

Qemu 是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可以在一种架构(如 PC 机)下运行另一种架构(如 ARM)下的操作系统和程序。而通过动态转化,其可以获得很高的运行效率。当作为一个虚拟机时,qemu可以通过直接使用真机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时, qemu可以虚拟x86、服务器和嵌入式 powerpc ,以及s390的系统。

QEMU当运行与主机架构相同的目标架构时可以使用KVM。例如,当在一个 x86 兼容处理器上运行 qemu-system-x86时,可以利用KVM加速�D�D为宿主机和客户机提供更好的性能。

Qemu 有如下几个部分组成:

  • 处理器模拟器(x86、PowerPC和Sparc);

  • 仿真设备(显卡、网卡、硬盘、鼠标等);

  • 用于将仿真设备连接至主机设备(真实设备)的通用设备;

  • 模拟机的描述信息;

  • 调试器;

  • 与模拟器交互的用户接口;

基于libvirt的工具如virt-manager和virt-install提供了非常便捷的虚拟机管理接口,但它们事实上上经二次开发后又封装了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能够完成此前的任务。

2、Qemu-kvm的使用帮助

在RHEL6/CentOS6 上,qemu-kvm位于/usr/libexec目录中。由于此目录不属于PATH环境变量,故无法直接使用,这样也阻止了可以直接使用qemu作为创建并管理虚拟机。如若想使用qemu虚拟机,可以通过将/usr/libexec/qemu-kvm链接为/usr/bin/qemu-kvm实现。

1
ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

qemu-kvm命令使用格式为“qemu-kvm [options] [disk_image]”,其选项非常多,不过,大致可分为如下几类。

1
2
3
4
5
6
7
8
9
10
11
标准选项;
USB选项;
显示选项;
i386平台专用选项;
网络选项;
字符设备选项;
蓝牙相关选项;
Linux系统引导专用选项;
调试/专家模式选项;
PowerPC专用选项;
Sparc32专用选项;

qemu-kvm的标准选项

qemu-kvm的标准选项主要涉及指定主机类型、cpu模式、NUMA、软驱设备、光驱设备及硬件设备等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-namename:设定虚拟机名称;
-Mmachine:指定要模拟的主机类型,如StandardPC、ISA-onlyPC或Intel-Mac等,可以使用“qemu-kvm-M?”获取所支持的所有类型;
-mmegs:设定虚拟机的RAM大小;
-cpumodel:设定cpu模型,如coreduo、qemu64等,可以使用“qemu-kvm-cpu?”获取所支持的所有模型;
-smpn[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP架构中cpu的个数等、每个cpu的核心数及cpu的socket数目等;PC机上最多可以模拟255颗cpu;maxcpus用于指定热插入的cpu个数上限;
-numaopts:指定模拟多节点的numa设备;
-fda file
-fdb file :使用指定文件( file )作为软盘镜像, file /dev/fd0 表示使用物理软驱;
-hda file
-hdb file
-hdc file
-hdd file :使用指定 file 作为硬盘镜像;
-cdrom file :使用指定 file 作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将 file 指定为 /dev/cdrom 可以直接使用物理光驱;
-driveoption[,option[,...]]]:定义一个硬盘设备;可用子选项有很多。
file = /path/to/somefile :硬件映像文件路径;
if =interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和writethrough四个;
format = format :指定映像文件的格式,具体格式可参见qemu-img命令;
-boot[order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
-bootorder= dc ,once=d

qemu-kvm的显示选项

显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。

1
2
3
4
5
6
7
8
9
10
11
12
13
-nographic:默认情况下,qemu使用SDL来显示VGA输出;而此选项用于禁止图形接口,此时,qemu类似一个简单的命令行程序,其仿真串口设备将被重定向到控制台;
-curses:禁止图形接口,并使用curses /ncurses 作为交互接口;
-alt-grab:使用Ctrl+Alt+Shift组合键释放鼠标;
-ctrl-grab:使用右Ctrl键释放鼠标;
-sdl:启用SDL;
-spiceoption[,...]]:启用spice远程桌面协议;其有许多子选项,具体请参照qemu-kvm的手册;
-vga type :指定要仿真的VGA接口类型,常见类型有:
cirrus:CirrusLogicGD5446显示卡;
std:带有BochsVBI扩展的标准VGA显示卡;
vmware:VMWareSVGA-II兼容的显示适配器;
qxl:QXL半虚拟化显示卡;与VGA兼容;在Guest中安装qxl驱动后能以很好的方式工作,在使用spice协议时推荐使用此类型;
none:禁用VGA卡;
-vncdisplay[,...]]]:默认情况下,qemu使用SDL显示VGA输出;使用-vnc选项,可以让qemu监听在VNC上,并将VGA输出重定向至VNC会话;使用此选项时,必须使用-k选项指定键盘布局类型;其有许多子选项,具体请参照qemu-kvm的手册;

i386平台专用选项

1
2
3
-no-acpi:禁用ACPI功能,GuestOS与ACPI出现兼容问题时使用此选项;
-balloonnone:禁用balloon设备;
-balloonvirtio[,addr=addr]:启用virtioballoon设备;

网络属性相关选项

网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其它类型请参照qemu-kvm手册。

1
2
3
4
5
6
7
8
9
10
11
-netnic[,vlan=n][,macaddr=mac][,model= type ][,name=name][,addr=addr][,vectors= v ]:创建一个新的网卡设备并连接至vlann中;PC架构上默认的NIC为e1000,macaddr用于为其指定MAC地址,name用于指定一个在监控时显示的网上设备名称;emu可以模拟多个类型的网卡设备,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不过,不同平台架构上,其支持的类型可能只包含前述列表的一部分,可以使用“qemu-kvm-netnic,model=?”来获取当前平台支持的类型;
-nettap[,fd=h][,ifname=name][,script= file ][,downscript=dfile]:通过物理机的TAP网络接口连接至vlann中,使用script= file 指定的脚本(默认为 /etc/qemu-ifup )来配置当前网络接口,并使用downscript= file 指定的脚本(默认为 /etc/qemu-ifdown )来撤消接口配置;使用script=no和downscript=no可分别用来禁止执行脚本;
-netuser[,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
vlan=n:连接至vlann,默认n=0;
name=name:指定接口的显示名称,常用于监控模式中;
net=addr[ /mask ]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0 /8
host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31;
dns=addr:指定GuestOS可见的DNS服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
tftp= dir :激活内置的tftp服务器,并使用指定的 dir 作为tftp服务器的默认根目录;
bootfile= file :BOOTP文件名称,用于实现网络引导GuestOS;如:qemu-hdalinux.img-bootn-netuser,tftp= /tftpserver/pub ,bootfile= /pxelinux .0

四、使用qemu-kvm安装虚拟机Guest OS

测试安装centos6

1、创建虚拟机的磁盘文件

1
qemu-imgcreate-fqcow2-opreallocation=Metadata /images/centos6 .qcow220G


2、安装vnc和图形界面库

1
yum install xorg-x11-xauthtigervnc-y

3、安装虚拟机

创建一个名为centos6的虚拟机,其RAM大小为1024MB ,有一颗cpu的SMP架构,默认引导设备是硬盘,有一个光驱设备和硬盘设备,首先创建一个网卡启动桥接的脚本,以便于虚拟机通过物理网卡联网。

1
cat /etc/qemu-ifup
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
#
bridge=br0
if [-n "$1" ]; then
iplink set $1up
sleep 1
brctladdif$bridge$1
[$?- eq 0]&& exit 0|| exit 1
else
echo "Error:nointerfacespecified."
exit 1
fi
1
chmod +x /etc/qemu-ifup

通过qemu-kvm创建虚拟机

1
2
3
4
5
6
qemu-kvm-namecentos6-smp1-m512\
-drive file = /images/centos6 .qcow2, if =virtio,media=disk,index=0, format =qcow2\
-drive file = /tmp/CentOS-6 .5-x86_64-minimal.iso,index=1,media=cdrom\
-netnic,model=virtio\
-nettap,ifname=vnet0,script= /etc/qemu-ifup ,downscript=no\
-vgacirrus-balloonvirtio

wKioL1aKH2SgGEpDAABk21e726w245.jpg

可以看到VNC监听在了5900端口上面,我们用Xshell再打开一个窗口,输入“vncviewer :5900”即可看到打开的终端界面,如果内存给大点就可以直接图形化界面安装了。

wKioL1aKIIrRtqY2AACVOj4nmXQ990.jpg

wKioL1aKIIuwFOjeAAFLwe8fEdg657.jpg

wKiom1aKIGiDWVIqAACILq-u9iA272.jpg

可以看到宿主机上面多了一个vnet0,虚拟机正常启动已经可以连接外网了。

wKiom1aKK2vDjWg0AAIDy4QAqdU503.jpg

wKiom1aKK6qgIj3PAAEIVSPN36Q871.jpg

4、Qemu监视器的使用

我们可以通过 Qemu 监视器来监测虚拟机的运行情况;

1)、Qemu 监视器打开的方式:

图形窗口模式的打开方式:

CTRL+ALT+2 :通过输入快捷键就能打开 Qemu 的监视器;

CTRL+ALT+1 :输入快捷键即可返回虚拟化机界面;

文本窗口模式的打开方式:

CTRL+a c :这组快捷键可以实现虚拟机界面和 Qemu 监视器之间的切换;

注意:如果需要让虚拟机运行在文本窗口模式,我们需要在创建和启动虚拟机时键入“-nographic”选项。

2)、打开虚拟机的Qemu监视器

按 CRTL+ALT+2 组合键即可打开Qemu监视器;

如图所示:

wKioL1aKLMvxc1tyAAA8YuCLjxg417.jpg

3)、Qemu监视器下的常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
help:显示帮助
info:显示一些虚拟机系统信息的
如:infocpus,infotlb
savevm,loadvm,delvm:保存、装载、删除虚拟机快照
commit:提交虚拟机修改部分
change:改变虚拟机配置
如:changevncpassword
device_add&device_del:实现动态添加和移除设备
usb_add&usb_del:添加和移除usb设备
migrate,migrate_cancel:迁移和取消迁移指令
cpu:设定默认cpu
log&logfile:记录日志和将日志记录到日志文件中
sendkey:向虚拟机发送指令
system_powerdown:向客户端发送关闭电源通知
system_reset:重启虚拟机
system_wakeup:唤醒虚拟机
qorquit:退出qemu监视器,qemu进程会终止;

关于命令的详细演示我这里不做过多介绍。

五、使用virt-install创建虚拟机并安装GuestOS

1、virt-install使用帮助

virt-install是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装;此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。安装过程可以使用本地的安装介质如CDROM,也可以通过网络方式如NFS、HTTP或FTP服务实现。对于通过网络安装的方式,virt-install可以自动加载必要的文件以启动安装过程而无须额外提供引导工具。当然,virt-install也支持PXE方式的安装过程,也能够直接使用现有的磁盘映像直接启动安装过程。

virt-install命令有许多选项,这些选项大体可分为下面几大类,同时对每类中的常用选项也做出简单说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
◇一般选项:指定虚拟机的名称、内存大小、Vcpu个数及特性等;
-nNAME,--name=NAME:虚拟机名称,需全局惟一;
-rMEMORY,-- ram =MEMORY:虚拟机内在大小,单位为MB;
--vcpus=VcpuS[,maxvcpus=MAX][,sockets= #][,cores=#][,threads=#]:Vcpu个数及相关配置;
--cpu=cpu:cpu模式及特性,如coreduo等;可以使用qemu-kvm-cpu?来获取支持的cpu模式;
◇安装方法:指定安装方法、GuestOS类型等;
-cCDROM,--cdrom=CDROM:光盘安装介质;
-lLOCATION,--location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如 ftp : //172 .16.0.1 /pub
--pxe:基于PXE完成安装;
--livecd:把光盘当作LiveCD;
--os- type =disTRO_TYPE:操作系统类型,如linux、unix或windows等;
--os-variant=disTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
-xEXTRA,--extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
--boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel /initrd 来引导系统启动等;例如:
--bootcdrom,hd,network:指定引导次序;
--bootkernel=KERNEL,initrd=INITRD,kernel_args=”console= /dev/ttyS0 ”:指定启动系统的内核及initrd文件;
◇存储配置:指定存储类型、位置及属性等;
--disk=disKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path ,opt1=val1,opt2=val2等;常用的选项有:
device:设备类型,如cdrom、disk或floppy等,默认为disk;
bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
size:新建磁盘映像的大小,单位为GB;
cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
format :磁盘映像格式,如raw、qcow2、vmdk等;
sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
--nodisks:不使用本地磁盘,在LiveCD模式中常用;
◇网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
-wNETWORK,--network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;
--nonetworks:虚拟机不使用网络功能;
◇图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;
--graphicsTYPE,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;
TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;
port:TYPE为vnc或spice时其监听的端口;
listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改 /etc/libvirt/qemu .conf定义新的默认值;
password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
--noautoconsole:禁止自动连接至虚拟机的控制台;
◇设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;
--serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type ,opt2=val2,...”,例如:
--serialpty:创建伪终端;
--serialdev,path=HOSTPATH:附加主机设备至此虚拟机;
--video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;
◇虚拟化平台:虚拟化模型(hvm或paravirt)、模拟的cpu平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等;
- v ,--hvm:当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;
-p,--paravirt:指定使用半虚拟化;
--virt- type :使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virshcapabilities’命令获取;
◇其它:
--autostart:指定虚拟机是否在物理启动后自动启动;
--print-xml:如果虚拟机不需要安装过程(-- import 、--boot),则显示生成的XML而不是创建此虚拟机;默认情况下,此选项仍会创建磁盘映像;
--force:禁止命令进入交互式模式,如果有需要回答 yes 或no选项,则自动回答为 yes
--dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;
-d,--debug:显示debug信息;

尽管virt-install命令有着类似上述的众多选项,但实际使用中,其必须提供的选项仅包括--name、--ram、--disk(也可是--nodisks)及安装过程相关的选项。此外,有时还需要使用括--connect=CONNCT选项来指定连接至一个非默认的hypervisor。

2、virt-install创建虚拟机

下面的示例将创建一个名为centos6的虚拟机,磁盘映像文件为稀疏模式的格式为qcow2且总线类型为virtio,安装过程不启动图形界面(--nographics),但会启动一个串行终端将安装过程以字符形式显示在当前文本模式下,虚拟机显卡类型为cirrus,这里的centos6.qcow2镜像文件会自动创建,不需要收动进行创建,每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML。

1
2
3
4
5
6
7
8
9
10
11
12
virt- install \
--connectqemu: ///system \
--virt- type kvm\
--namecentos6\
--vcpus2,maxvcpus=4\
-- ram 1024\
--diskpath= /images/centos6 .qcow2,size=20,bus=virtio,sparse\
--cdrom /tmp/CentOS-6 .5-x86_64-minimal.iso\
--networkbridge=br0,model=virtio\
--nographics\
--force\
--video=cirrus

我这里使用的“--nographics”字符界面安装,可是走到一个地方一直卡着,后面我还是去掉这个参数使用图形化界面安装,需要安装“yum install virt-viewer”图形控制界面。

wKioL1aKPKrzV4zTAABdywGT5mk886.jpg

下面是真正的图形界面,如果提示已经存在,我们可以先停掉虚拟机“virsh destroy centos6”,然后删掉虚拟机配置文件/etc/libvirt/qemu/centos6.xml或者“virsh undefine centos6”。

wKiom1aKQG-hrV73AAczPAKf0JQ847.png


六、使用virt-manager创建虚拟机

这个是图形化的安装,非常简单,这里不再过多介绍,按理请查看我的Xen虚拟机创建过程的文档。

查看virt-manager创建过程请点击

七、virsh命令简介

1、virsh的使用方法

基本语法

virsh的基本用法如下: virsh [COMMAND] [ARGS...]

另外需要注意的是,virsh提供两种执行模式:”直接模式(Direct Mode)”与”互动模式(Interactive Mode)”。在直接模式里,你必须在Shell中以参数、自变量的方式来执行virsh,如果在互动模式中,则virsh会提供一个提示字符串,你可以在该提示字符串后,输入要执行的命令。如果执行virsh没有指定任何参数或自变量则默认就是进入互动模式。 与xm一样,COMMAND也是 virsh提供的命令,常用的命令如下表所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
命令说明
help显示该命令的说明
quit结束virsh,回到Shell
connect连接到指定的虚拟机服务器
create启动一个新的虚拟机
destroy删除一个虚拟机
start开启(已定义的)非启动的虚拟机
define从XML定义一个虚拟机
undefine取消定义的虚拟机
dumpxml转储虚拟机的设置值
list列出虚拟机
reboot重新启动虚拟机
save存储虚拟机的状态
restore回复虚拟机的状态
suspend暂停虚拟机的执行
resume继续执行该虚拟机
dump将虚拟机的内核转储到指定的文件,以便进行分析与排错
shutdown 关闭虚拟机
setmem修改内存的大小
setmaxmem设置内存的最大值
setvcpus修改虚拟处理器的数量

而virsh命令语法的ARGS则是COMMAND搭配的参数。不同的COMMAND可能需搭配不同的参数,至于什么COMMAND可以搭配哪些参数,我将会在对各功能的介绍中提到。总地来说,如果ARGS需指定虚拟机,你可以使用下列的格式指定是哪一个虚拟机器,虚拟机的名称,虚拟机启动后的标识符,虚拟机的 UUID。 以下就是使用 virsh 的示范。

1
2
3
4
5
6
7
[root@linux~] #virsh?①
[help]以取得命令的求助画面
[quit]离开
virsh #list
IdNameState
----------------------------------------------------
14centos6running
1
virsh #quit②
1
2
3
4
[root@linux~] #virshlist③
IdNameState
----------------------------------------------------
14centos6running

由于virsh与xm的部分功能相同,因此,本节仅介绍virsh与xm的不同之处。查看Domain信息virsh 可以查看虚拟机的相关信息,你只需在执行virsh时配合如表中的命令。

查看Domain信息执行的命令

1
2
3
4
5
6
命令说明
domid查看虚拟机的标识符
domname查看虚拟机的名称
domuuid查看虚拟机的UUID
domstate查看虚拟机目前的状态
dominfo查看虚拟机的信息

执行上述的每一个命令时,你都必须指定虚拟机的名称、标识符和UUID。以下是我使用virsh查看虚拟机信息的示范。

2、转储区域配置

除了上述的功能外,virsh也允许把某一个虚拟机目前的设置值存储下来。virsh把设置值存储下来的动作,称为”转储(Dump)”。

转储虚拟机设置值有什么好处?

好处很多,我至少想到两个。首先,转储虚拟机的设置值可以让你把某一个虚拟机的设置备份下来,以供日后恢复该设置配置。其次,如果要用 virsh 来启动一个虚拟机,你必须指定该虚拟机的配置文件。因此,如果你希望用virsh 来管理所有的虚拟机,

那么请务必把每一个虚拟机的设置值转储下来后妥善保存。

如果要转储虚拟机的设置值,你可以执行:

1
virshdumpxmlDOMAIN

其中的DOMAIN就是要转储的虚拟机。你可以使用虚拟机的名称、标识符或是UUID来指定要转储到哪一个虚拟机。

今天关于CentOS 7 KVM虚拟机实战centos虚拟化kvm的分享就到这里,希望大家有所收获,若想了解更多关于003.KVM虚拟机部署-CentOS6.8、CentOS 6.3安装kvm虚拟机并安装Windows系统、Centos 6.5 KVM虚拟机中快照的创建、恢复、删除、CentOS 6.5安装KVM虚拟化等相关知识,可以在本站进行查询。

本文标签: