Centos7.4安装kvm虚拟机(使用virt-manager管理)

之前介绍了使用WebVirtMgr或Openstack来部署及管理kvm虚拟机,下面简单介绍centos7.4下使用virt-manager部署及管理kvm虚拟机的做法:

0)KVM是什么

KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心
源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm
还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的
完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配
器等。

KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT)
, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了
另一个独立的虚拟化解决方案:KVM+QEMU。

1)kvm相关安装包及其作用

qemu-kvm          主要的KVM程序包
python-virtinst   创建虚拟机所需要的命令行工具和程序库
virt-manager      GUI虚拟机管理工具
virt-top          虚拟机统计命令
virt-viewer       GUI连接程序,连接到已配置好的虚拟机
libvirt           C语言工具包,提供libvirt服务
libvirt-client    虚拟客户机提供的C语言工具包
virt-install      基于libvirt服务的虚拟机创建命令
bridge-utils      创建和管理桥接设备的工具

2)centos7安装VNC环境

请参考:http://www.cnblogs.com/kevingrace/p/5821450.html

3)安装kvm

1)检查cpu是否支持虚拟化
[root@kevin ~]# grep vmx /proc/cpuinfo
如果有vmx信息输出,就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。


2)确保BIOS里开启虚拟化功能,即查看是否加载KVM模块
[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================
如果没有加载,运行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
=========================================================

内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月  29 11:56 /dev/kvm


3)桥接网络
如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils ,
[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network

配置KVM的网桥模式
[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge"                                        //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"                                           //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"         //这一行注释
DEVICE="br0"                                         //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"

[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0                                           //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210"                          //注释掉这几行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"

重启网卡服务
[root@openstack network-scripts]# systemctl restart network

查看网卡
[root@openstack network-scripts]# brctl show
bridge name bridge id   STP enabled interfaces
br0   8000.0894ef518b22 no    eno1
virbr0    8000.52540095d7c2 yes   virbr0-nic

查看ip信息
[root@openstack network-scripts]# ifconfig |head -20
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.210  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::a94:efff:fe51:8b22  prefixlen 64  scopeid 0x20<link>
        ether 08:94:ef:51:8b:22  txqueuelen 1000  (Ethernet)
        RX packets 856  bytes 52981 (51.7 KiB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 120  bytes 23450 (22.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:94:ef:51:8b:22  txqueuelen 1000  (Ethernet)
        RX packets 10077  bytes 793083 (774.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1184  bytes 228415 (223.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16 

eno2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 08:94:ef:51:8b:23  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)


[root@openstack network-scripts]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=2.08 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=1.80 ms
........


4)安装libvirt及kvm
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
[root@kevin ~]#  yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64  libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch  libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64  dbus-devel  virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst

由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)
[root@kevin ~]# yum groupinstall "X Window System"

安装中文字符,解决界面乱码问题
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"

启用libvirt
[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd

4)使用virt-manager管理kvm(通过VNC连接服务器)

提前将ISO系统镜像存放到服务器的一个目录里,比如/data/iso

[root@openstack ~]# mkdir /data/iso
[root@openstack ios]# ll
总用量 3356384
-rw-r--r--. 1 qemu qemu 3436937216 1月  29 11:41 win-server2008_R2.iso

未分类

未分类

未分类

未分类

未分类

未分类

5)解决KVM虚拟机在使用vnc连接时鼠标不同步的问题

在VNC界面中感觉virt-manager管理的虚拟机界面总是鼠标跟不上,指到哪儿也看不出来,界面上一直显示press control_l+a/t_l来移动鼠标!十分郁闷!
想要修改鼠标和宿主机界面同步方法如下:

[root@openstack ~]# cd /etc/libvirt/qemu
[root@openstack qemu]# ls
networks  test-win2008.xml
[root@openstack qemu]# cp test-win2008.xml /opt/
[root@openstack qemu]# vim test-win2008.xml               //在<devices>标签中添加下面这段配置
<devices>   
......                                      
  <input type='tablet' bus='usb'/>                        //即添加这句话即可!
......    
</devices>

[root@openstack qemu]# virsh define /etc/libvirt/qemu/test-win2008.xml
定义域 test-win2008(从 /etc/libvirt/qemu/test-win2008.xml)

然后重启虚拟机后,发现虚拟机中的鼠标就会好事了,打开VNC查看虚拟机界面后默认情况下虚拟机中的鼠标指针和实体机的鼠标指针就是重合的,且两者运动速度也是同步的,
这下就彻底解决了鼠标指针漂移/不同步的情况了!

6)重定向USB设备

(即将宿主机上的USB设备指定到目标虚拟机上)。适合挂载银行前置机设备!

先将USB设备插到宿主机上,接着在virt-manager界面里打开虚拟机,然后虚拟机界面上栏里打开”虚拟机”->”重定向USB设备(R)”。(特别注意:如下选择将usb设备挂载到虚拟机上后,不要关闭这个挂载界面,否则usb挂载动作就会结束!)

未分类

未分类

查看虚拟机,发现指定的USB设备已经挂载到该虚拟机上了!

未分类

如果要卸载该虚拟机上挂载的这个USB设备,即在”重定向设备usb(R)”里将这个USB设备去掉,然后”确定”即可!

未分类

未分类

centos7 kvm和设置桥接br0

一、kvm

1、查cpu是否支持VT

egrep '(vmx|svm)' --color=always /proc/cpuinfo

2、检查内核模块是否加载

lsmod | grep kvm

3、查看Selinux状态

sestatus

如果是启用状态

# vi /etc/sysconfig/selinux

SELINUX=disabled 

reboot

4、安装 KVM(在centos7里面有些软件包已经没有了)

yum install kvm libvirt python-virtinst qemu-kvm virt-viewer tunctl bridge-utils avahi dmidecode qemu-kvm-tools virt-manager qemu-img virt-install net-tools libguestfs-tools -y

5、启动libvirt服务

systemctl start libvirtd

systemctl enable libvirtd

6、查看kvm服务是否正常,目前没任何虚拟机,所以没有内容显示

virsh -c qemu:///system list

二、桥接(eth0网卡是代称,我实际弄机器时是em1)

服务器上弄kvm,装虚拟机什么的,需要弄桥接,所以

需要用到brctl这个命令、centos7上默认已经有了,
前面他们让我弄的时候,只是给了我一个文本,ifcfg-br0里面的内容,没有说要用brctl这个命令,我搞了好久都没搞定

1、

brctl  addbr  br0    #创建网桥
brctl  addif  br0 eth0  #把br0和eth0网卡绑定
brctl  stp   br0 on    #有关stp协议的

2、在/etc/sysconfig/network-scripts/创建 ifcfg-br0

内容如下:

DEVICE=br0  
TYPE=Bridge
BOOTRPOTO=static
IPADDR=192.168.1.108
NETMASK=255.255.255.0
GATEWAY= 192.168.12.2
DNS1=192.168.211.103
ONBOOT=yes

修改ifcfg-eth0文件

BOOTRPOTO=none

追加 BRIDGE=br0

完整的如下所示:注释部分是没弄br0前弄得

未分类

都弄好后service network restart

正常情况下就好了

我在弄第二台机器是就不行了,一旦执行 service network restart 它会在/etc/sysconfig/network-scripts/ 下生成ifcfg-br0-1,或者ifcfg-eth0-1 不知道这是什么原因

我一直没搞定,不得不重启
在重启机器前我已经把br0删除了

删除如下:

brctl delif br0 eth0    #解除绑定
ifconfig br0 down     #关闭br0,不关闭删不掉
brctl delbr br0       #删除br0

重启后我按照上面的步骤重做了一遍,发现网络还是不通,但是ifconfig 可以看到br0的ip已经设置成功了,/etc/sysconfig/network-scripts/没有产生新文件

后面发现前面br0与eth0的绑定消失了,在过程中自动取消了绑定
重新绑定:

brctl addif br0 eth0
service network restart

网络就正常了

virsh命令添加kvm虚拟机共享磁盘

在使用kvm虚拟机的时候,有时候部署一些应用如Oracle RAC、corosync等高可用的时候,往往会用到共享硬盘。比如本人在部署corosync+mysql高可用的时候就遇到了一些小问题(像我们这种折腾达人,肯定不会用nfs做共享存储),因此记录一下。

环境

宿主机当然是linux,否则也用不到kvm
没有图形界面,否则直接virt-manager也很快。。

操作过程

新建一块虚拟盘

root@qujun:~# qemu-img -f raw shared.img 10G

要用raw格式,理论上来说应该qcow2也可以

编写xml文件

root@qujun:~# vim share-disk.xml
    <disk type='file' device='disk'> 
        //由于我们用的文件,disk的type是file,device字段则指我们想让这个盘在虚拟机中映射为什么设备。
      <driver name='qemu' type='raw' cache='none'/>
            // 驱动是指明我们底层是哪种虚拟化,同时指定磁盘为raw格式、cache为none
      <source file='shared.img'/>
            // 磁盘的映射源,有file、block、network、volume等值
      <target dev='vdb' bus='virtio'/>
            // 映射给虚拟机的盘符、使用的驱动,
      <shareable/>
            // 标记此硬盘将于多个虚拟机间共享。
    </disk>

<span style="color:red"> 上面比较重要的是cache要标记为none、有shareable标记,在最开始的时候我用的qcow2硬盘,并用writeback的cache导致一堆问题。
</span>

准备完之后,使用virsh命令挂载就可以了。

root@qujun:~# virsh attach-device --config Guest1 share-disk.xml

<span style="color:red"> 由于virtio是热添加驱动,这时候如果你系统支持硬盘热添加,就可以在系统中fdisk -l看到一块vdb的新硬盘啦,我们就可以像真实环境一样来部署高可用系统了~ </span>

挂载kvm虚拟机windows虚拟机镜像文件

1、先用losetup 命令关联loop设备与虚拟机文件

losetup -f 命令可以查看目前空闲的loop设备,使用losetup -a 命令可以查看使用的loop设备的关联情况

关联命令为

losetup /dev/loop0 /root/win2003.img

关闭关联命令为 losetup -d /dev/loop0

2、使用kpartx 命令将映射分区

kpartx -av /dev/loop0

参数-a 表示添加映射关系,-v表示显示映射的对应关系

映射成功的设备在/dev/mapper下面,比如/dev/mapper/loop0p1

3、适应mount命令挂载,因为默认不能识别ntfs分区,需要先安装ntfs-3g软件

ntfs-3g依赖fuse,先安装

yum install fuse -y

下载ntfs-3g(下载页面 http://www.tuxera.com/community/ntfs-3g-download/)

wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2011.4.12.tgz
tar -zxvf ntfs-3g_ntfsprogs-2011.4.12.tgz
./configuer
make 
make install
mount -t ntfs-3g /dev/mapper/loop0p1 /mnt

完成后依次关闭

umount /mnt
kpartx -dv /dev/loop0
losetup -d /dev/loop0

KVM NAT 模式下 虚拟机上不了外网

自己在服务器上搭建了KVM,准备使用kvm模式下的NAT模式给虚拟机上网,但是虚拟机ping外网ping不通。

我创建的虚拟是dhcp模式

未分类

这时候需要在宿主机开启路由转发的功能。

我的宿主机是centos7

编辑/etc/stsctl.conf 文件,增加 net.ipv4.ip_forward = 1

sysctl -p

这时候虚拟机ping外网就能通了。

wok和kimchi – kvm虚拟机网页管理

先安装wokd服务

1、解决依赖

yum install gcc make autoconf automake gettext-devel git rpm-build libxslt 
python-cherrypy python-cheetah PyPAM m2crypto 
python-jsonschema python-psutil python-ldap 
python-lxml nginx openssl python-websockify 
fontawesome-fonts logrotate python-ordereddict

2、下载rpm包

wget https://github.com/kimchi-project/wok/releases/download/2.5.0/wok-2.5.0-0.el7.centos.noarch.rpm

3、安装wokd

rpm -ivh wok-2.5.0-0.el7.centos.noarch.rpm

4、启动wokd服务

systemctl daemon-reload
systemctl start wokd

安装kimchi

1、解决依赖

yum install gcc make autoconf automake gettext-devel git rpm-build libxslt 
libvirt-python libvirt libvirt-daemon-config-network 
qemu-kvm python-ethtool sos python-ipaddr nfs-utils 
iscsi-initiator-utils pyparted python-libguestfs 
libguestfs-tools novnc spice-html5 
python-configobj python-magic python-paramiko 
python-pillow python-ordereddict

重启libvirtd服务:

systemctl restart libvirtd

2、下载rpm包

wget https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.el7.centos.noarch.rpm

3、安装kimchi

rpm -ivh kimchi-2.5.0-0.el7.centos.noarch.rpm

启动服务:

关闭selinux:

setenforce 0

重启wokd服务:

systemctl restart wokd

启动nginx服务:

systemctl start nginx

关闭网络自动管理

systemctl stop NetworkManager

通过浏览器访问:

https://IP_ADDR:8001

wokd默认通过PAM方式来验证,因此可以直接使用主机上的用户账号登录。

ubuntu-14.04下安装KVM虚拟化

ubuntu-server 上安装KVM

一、检查CPU是否支持安装 KVM

egrep -o '(vmx|svm)' /proc/cpuinfo

二、安装KVM所需要的软件包

apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils

注:virt-manager为GUI管理窗口,bridge-utils:用于网络桥接

三、检查安装是否成功

lsmod | grep kvm

四、拉取镜像

wget http://mirrors.ustc.edu.cn/ubuntu-releases/trusty/ubuntu-14.04.4-server-amd64.iso
qemu-img create -f raw /data1/kvm/data/kvm-20160724-01.img 1024G

五、网卡配置参照

cat > /etc/network/interfaces <<OEF
# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet manual

auto br0
iface br0 inet static
address 118.123.9.86
netmask 255.255.255.192
gateway 118.123.9.65
dns-nameservers 144.114.114.114
bridge_ports eth0

auto br1
iface br1 inet static
address 10.10.20.16
netmask 255.255.255.0
gateway 10.10.20.254
bridge_ports eth1
OEF

六、虚拟机安装

virt-install --name kvm-20160725-01     --ram 8196     --vcpus=8,sockets=1,cores=8,threads=1     --arch=x86_64     --os-type=linux     --os-variant=ubuntutrusty     --accelerate --cdrom /data8/kvm/images/ubuntu-14.04.4-server-amd64.iso     --boot menu=on     --disk path=/data8/kvm/data/kvm-20160725-01.img,size=500,cache=writeback,device=disk     --network network=default,model=virtio     --graphics vnc,port=-1,listen=0.0.0.0

kvm iptables转发

#!/bin/bash
pro='tcp'
NAT_Host='125.65.43.197'
NAT_Port=3000
Dst_Host='10.10.20.100'
Dst_Port=22
iptables -t nat -A PREROUTING  -m $pro -p $pro  --dport $NAT_Port -j DNAT --to-destination $Dst_Host:$Dst_Port
iptables -t nat -A POSTROUTING -m $pro -p $pro --dport $Dst_Port -d $Dst_Host -j SNAT --to-source $NAT_Host
#iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -d 192.168.122.0/24 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

克隆:

virt-clone --original ubuntu-14-tmp --name kvm-20160715-01 --file /data1/kvm/data/kvm-20160715-01.img

在线添加网卡:

virsh attach-interface --domain kvm-20160725-01 --type bridge --source br0 --model virtio --config --live

进入virt-manager

在桌面版的命令窗出入:virt-manager

快速建虚拟机:

修改配置文件:

sudo vim /opt/cd-image/isolinux/isolinux.cfg
# D-I config version 2.0
include menu.cfg
default vesamenu.c32
prompt 0
timeout 1
ui gfxboot bootlogo
sudo vim /opt/cd-image/preseed/ubuntu-bbd-installer.seed 

截取修改的部分

# Static network configuration.
d-i netcfg/get_nameservers string 10.0.0.1
d-i netcfg/get_ipaddress string 10.0.0.171  (只修改此行,为虚拟机ip)
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 10.0.0.1
d-i netcfg/confirm_static boolean true

# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string bbdtao01 (虚拟机主机名)
d-i netcfg/get_domain string

镜像制作:

mkisofs -r -V "BBD Server Install CD" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ubuntu-bbd-installer-bbdhdp02-net162.iso /opt/cd-image/

创建虚拟机:

virt-install --name bbdhdp02 --hvm --ram 20480 --vcpus 2 --disk path=/data/kvm/bbdhdp02.qcow2,size=100 --bridge=br0 --accelerate --vnc --vncport=5982 --cdrom /home/bbd/ubuntu-bbd-installer-bbdhdp02-net162.iso -d

网址信息:

http://zhidao.baidu.com/link?url=inrg0yVfsi4JF_Okeq06FnMCZDGWUSwoJaK0LwxR7wne4-3hcaxiAFk0fod1DYNnFEbF2VIA9_4Fx1LhO9Z8fdjYMJyPlO8HgTsqQFe-JjS
http://www.linuxidc.com/Linux/2011-03/33653p3.htm
https://wiki.xargs.cn/wiki/doku.PHP/linux:kvm:kvm%E6%89%8B%E5%86%8C

KVM虚拟化平台部署及命令行管理虚拟机教程

KVM是Kernel Virtual Machine的简写,目前Red Hat只支持在64位的RHEL5.4及以上的系统运行KVM,同时硬件需要支持VT技术。KVM的前身是QEMU,2008年被Red Hat公司收购并获得一项hypervisor技术,不过Red Hat的KVM被认为是将成为未来Linux hypervisor的主流,准确来说,KVM仅仅是Linux内核的一个模块。管理和创建完整的KVM虚拟机,需要更多的辅助工具。

案例:搭建KVM虚拟化平台

一、案例分析

1、案例概述

公司部分Linux服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统。例如,在运行Nginx的服务器上部署KVM,然后在虚拟机上运行Tomcat

2、案例前置知识点

KVM自Linux 2.6.20版本后就直接整合到Linux内核,它依托CPU和虚拟化指令集(如Inter-VT、AMD-V)实现高性能的虚拟化支持。由于与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现

未分类

图上简单描述了KVM虚拟化架构,在KVM环境中运行的每个虚拟化操作系统都将表现为单个独立的系统进程。因此它可以很方便地与Linux系统中的安全模块进行整合(SElinux),可以灵活地实现资源的管理及分配

3、案例环境

采用CentOS 6.6 x86_64,开启CPU虚拟化支持

二、案例实施

1、安装方式

(1)最简单的安装方法就是在安装系统的时候,选择桌面安装,然后选择虚拟化选项

未分类

安装桌面

未分类

安装虚拟化平台

(2)在已有系统基础上,安装KVM所需软件

yum  -y  groupinstall  "Desktop"                  //安装GNOME桌面环境
    yum  -y  install  qemu-kvm.x86_64                  //KVM模块
    yum  -y  install  qemu-kvm-tools.x86_64            //KVM调试工具,可不安装

    yum  -y  install  python-virtinst.noarch          //python组件,记录创建VM时的xml文件

    yum  -y  install  qemu-img.x86_64                  //qemu组件,创建磁盘、启动虚拟机等

    yum  -y  install  bridge-utils.x86_64              //网络支持工具

    yum  -y  install  libvirt                          //虚拟机管理工具

    yum  -y  install  virt-manager                    //图形界面管理虚拟机

    yum  -y  install  libguestfs*                      //virt-cat等命令的支持软件包

(3)验证。重启系统后,查看CPU是否支持虚拟化,对于Inter服务器可以 通过一下命令查看,只要有输出就说明CPU支持虚拟化;AMD服务器可用cat /proc/cpuinfo | grep smv命令查看

[root@localhost ~]# cat  /proc/cpuinfo  |  grep  vmx
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase bmi1 avx2 smep bmi2 invpcid

检查KVM模块是否安装:

[root@localhost ~]# lsmod  |  grep  kvm
kvm_intel              55496  0 
kvm                  337772  1 kvm_intel

2、设置KVM网络

宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT

关于两种模式的说明:

(1)用户模式,即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络

(2)桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持

这里以Bridge(桥接)为例

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=00:0C:29:4C:0C:24
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE="br0"

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp

重启network服务

[root@localhost ~]# service network restart
正在关闭接口 br0:                                    [确定]
正在关闭接口 eth0:                                  [确定]
关闭环回接口:                                        [确定]
弹出环回接口:                                        [确定]
弹出界面 eth0:                                      [确定]
弹出界面 br0: 
正在决定 br0 的 IP 信息...完成。                      [确定]

确认IP地址信息

[root@localhost ~]# ifconfig 
br0      Link encap:Ethernet  HWaddr 00:0C:29:4C:0C:24  
          inet addr:192.168.0.106  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe4c:c24/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:70 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:69660 (68.0 KiB)  TX bytes:3066 (2.9 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:4C:0C:24  
          inet6 addr: fe80::20c:29ff:fe4c:c24/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28413 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:37239885 (35.5 MiB)  TX bytes:1683986 (1.6 MiB)

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:65536  Metric:1
          RX packets:140 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12096 (11.8 KiB)  TX bytes:12096 (11.8 KiB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:0B:01:73  
          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)

出现以上信息,说明网卡桥接成功了

3、KVM管理

[root@localhost ~]# virt-manager

virt-manager是基于libvirt的图像化虚拟机管理软件。请注意,不同的发行版上virt-manager的版本可能不同,图形界面和操作方法可能不同。本文使用了Centos 6企业版。创建KVM虚拟机最简单的方法是通过virt-manager接口。从控制台窗口启动这个工具,以root身份输入virt-manager命令

未分类

虚拟机管理界面

虚拟机管理步骤如下

(1)创建存储池,双击localhost(QEMU),选择“存储选项卡”,然后单击“+”按钮新建存储池。单击“前进”按钮,根据提示输入或浏览以设置存储目录,如/data_kvm/store,最后单击“完成”按钮即可

未分类

创建存储池

(2)以同样的操作创建一个镜像存储池,命名为linux_iso,目录为/data_kvm/iso即可。在安装操作系统时,我们把镜像上传到服务器目录/data_kvm/iso

未分类

创建镜像存储池

(3)创建存储卷,单击刚创建好的“linux”,单击对话框右下角的“新建卷”按钮建立一个存储卷,并设置最大容量与分配容量

未分类

创建存储卷

(4)单击“完成”按钮后,回到虚拟系统管理器。右击“localhost(QEMU)”,然后选择“新建”选项,在弹出的对话框中将虚拟机名称命令为“Centos-6.6”,然后单击“前进”按

未分类

新建虚拟机(1)

单击“浏览”按钮选择镜像文件,再选择操作系统类型及版本

未分类

新建虚拟机(2)

单击“前进”按钮,在对话框中适当分配内存和CPU资源,如1核CPU、512MB内存

未分类

新建虚拟机(3)

单击“前进”按钮,在对话框中勾选“立即分配整个磁盘”复选框,点选“管理的或者其他现有存储”单选按钮,单击“浏览”按钮选择文件,然后单击“前进”按钮

未分类

新建虚拟机(4)

在所示的对话框中勾选“在安装前自定义配置”复选框,单击“完成”按钮,弹出对话框

未分类

新建虚拟机(5)

未分类

新建虚拟机(6)

在“Overview”视图中,定位到“机器设置”,把机器设置-时钟偏移-改为“localtime”,单击“应用”按钮即可。定位到“Boot Options”,勾选“主机引导时启动虚拟机”复选框,这样在物理宿主机启动后,这个VM也会启动,最后单击“应用”按钮。如果要远程管理,需要在“显示VNC”中,将Keymap设置为“Copy Local Keymap”

未分类

新建虚拟机(7)

最后单击“Begin Installation”按钮即可,整个虚拟机配置过程完成。下面就是安装操作系统的工作,和平时安装Linux系统一样

未分类

CentOS安装界面

案例:使用KVM命令集管理虚拟机

一、案例分析

案例环境使用一台物理机器,一台服务器安装Centos 6.6的64位系统(即Stranded), Centos-6.6是在宿主机Stranded中安装的虚拟机

主机  操作系统    IP地址    主要软件
Stranded    Centos-6.6  x86_64  192.168.1.100   Xshell
Centos-6.6

Centos-6.6  x86_64  192.168.1.103   
Xmanager

二、案例实施

1、安装Linux虚拟机

安装过程同上一案例,使用Xshell远程控制Stranded主机

2、KVM基本功能管理

(1)查看命令帮助

[root@localhost ~]# virsh  -h
......      //省略输出内容

(2)查看KVM的配置文件存放目录(Centos-6.6.xml是虚拟机系统实例的配置文件)

[root@localhost ~]# ls  /etc/libvirt/qemu
autostart  Centos-6.6.xml  networks

(3)查看虚拟机状态

[root@localhost ~]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 2    Centos-6.6                  running

(4)虚拟机关机与开机

首先要确认acpid服务安装并运行

[root@localhost ~]# virsh  shutdown  Centos-6.6
[root@localhost ~]# virsh  start  Centos-6.6

(5)强制实例系统关闭电源

[root@localhost ~]# virsh  destroy  Centos-6.6

(6)通过配置文件启动虚拟机系统实例

[root@localhost ~]# virsh  create  /etc/libvirt/qemu/Centos-6.6.xml
[root@localhost ~]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 3    Centos-6.6                  running

(7)挂起虚拟机

[root@localhost ~]# virsh  suspend  Centos-6.6

查看虚拟机状态

[root@localhost ~]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 3    Centos-6.6                  暂停

(8)恢复虚拟机

[root@localhost ~]# virsh  resume  Centos-6.6

[root@localhost ~]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 3    Centos-6.6                  running

(9)配置虚拟机实例伴随宿主机自动启动

[root@localhost ~]# virsh  autostart  Centos-6.6

上述命令将创建/etc/libvirt/qemu/autostart/目录,目录内容为开机自动启动的系统

(10)导出虚拟机配置

[root@localhost ~]# virsh  dumpxml  Centos-6.6 >/etc/libvirt/qemu/Centos-02-6.6.xml

(11)虚拟机的删除与添加

删除虚拟机

[root@localhost ~]# virsh  shutdown Centos-6.6
[root@localhost ~]# virsh  undefine Centos-6.6

查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除

[root@localhost ~]# ls  /etc/libvirt/qemu
autostart  Centos-02-6.6.xml  networks

通过virsh list -all查看不到Centos-6.6的信息,说明此虚拟机被删除

[root@localhost ~]# virsh  list --all
 Id    名称                  状态
----------------------------------------------------

通过备份的配置文件重新定义虚拟机

[root@localhost ~]# cd  /etc/libvirt/qemu
[root@localhost qemu]# mv  Centos-02-6.6.xml  Centos-6.6.xml

重新定义虚拟机

[root@localhost qemu]# virsh  define Centos-6.6.xml

查看虚拟机信息

[root@localhost qemu]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 -    Centos-6.6                  关闭

(12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息)

直接通过vim命令修改

[root@localhost ~]# vim  /etc/libvirt/qemu/Centos-6.6.xml

通过virsh命令修改

[root@localhost ~]# virsh  edit  Centos-6.6

3、KVM文件管理

通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw与qcow2格式,KVM虚拟机默认使用raw格式,raw格式性能最好,速度最快,其缺点是不支持一些新的功能,如镜像、Zlib磁盘压缩、AES加密等,针对两种格式的文件有不同的工具可供选择。这里介绍本地YUM安装libguestfs-tools后产生的命令行工具(这个工具可以直接读取qcow2格式的磁盘文件,因此需要将raw格式的磁盘文件转换成qcow2的格式)

(1)转换raw格式磁盘至qcow2格式

查看当前磁盘格式

[root@localhost ~]# qemu-img  info  /data_kvm/store/linux_kvm.img 
image: /data_kvm/store/linux_kvm.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G

关闭虚拟机

[root@localhost ~]# virsh  shutdown  Centos-6.6

转换磁盘文件格式

[root@localhost ~]# qemu-img  convert  -f  raw  -O  qcow2  /data_kvm/store/linux_kvm.img  /data_kvm/store/linux_kvm.qcow2

(2)修改Centos-6.6的xml配置文件

[root@localhost ~]# virsh  edit  Centos-6.6
......            //省略部分内容
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/data_kvm/store/linux_kvm.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
......            //省略部分内容

(3)virt-cat命令,类似于cat命令

[root@localhost ~]# virt-cat  -a  /data_kvm/store/linux_kvm.qcow2  /etc/sysconfig/network
NETWORINT=yes
HOSTNAME=localhost.localdomain

(4)virt-edit命令,用于编辑文件,用法与vim基本一致

[root@localhost ~]# virt-edit  -a  /data_kvm/store/linux_kvm.qcow2  /etc/resolv.conf
nameserver  8.8.8.8

(5)virt-df命令用于查看虚拟机磁盘信息

[root@localhost  ~]# virt-df  -h  Centos-6.6
Filesystem                                    Size        Used      Available    Use%
Centos-6.6:/dev/sda1                          476M        32M        419M        7%
Centos-6.6:/dev/sdb1                          4.3G        4.3G          0          100%
Centos-6.6:/dev/VolGroup/lv_root              8.3G        620M        7.2G        8%

4、虚拟机克隆

(1)查看虚拟机状态

[root@localhost  ~]# virsh  list  --all
 Id    名称                        状态
----------------------------------------------------
 -    Centos-6.6                  关闭

(2)从Centos-6.6克隆Centos-02-6.6

[root@localhost  ~]# virt-clone  -o  Centos-6.6  -n  Centos-02-6.6  -f  /data_kvm/store/Centos-02-6.6.qcow2

(3)查看虚拟机状态

[root@localhost  ~]# virsh  list  --all
 Id    名称                      状态
----------------------------------------------------
 -    Centos-02-6.6              关闭
 -    Centos-6.6                关闭

(4)启动虚拟机

[root@localhost  ~]# virsh  start  Centos-02-6.6

5、虚拟机快照

KVM虚拟机要使用快照功能,磁盘格式必须是qcow2,之前已经将Centos-6.6的磁盘格式转换成了qcow2

下面介绍KVM虚拟机快照备份的过程

(1)对Centos-6.6创建快照

[root@localhost  ~]# virsh  snapshot-create  Centos-6.6
Domain snapshot 1440950172 created

(2)查看虚拟机快照版本信息

[root@localhost ~]# virsh  snapshot-current  Centos-6.6
<domainsnapshot>
  <name>1440950172</name>      //快照版本号
  <state>shutoff</state>
......            //省略部分内容

(3)查看快照信息

[root@localhost ~]# virsh  snapshot-list  Centos-6.6
 名称            Creation Time              状态
------------------------------------------------------------
 1440950172      2015-08-30 23:56:12  +0800  shutoff

(4)创建新快照

[root@localhost ~]# virsh  snapshot-create  Centos-6.6
Domain snapshot 1440950433 created

(5)查看快照信息

[root@localhost ~]# virsh  snapshot-list  Centos-6.6
 名称              Creation Time              状态
------------------------------------------------------------
 1440950172        2015-08-30 23:56:12  +0800  shutoff
 1440950433        2015-08-31 00:00:33  +0800  shutoff

(6)回复虚拟机状态至1440950172

[root@localhost ~]# virsh  snapshot-revert  Centos-6.6  1440950172

(7)查看虚拟机快照版本信息

[root@localhost ~]# virsh  snapshot-current  Centos-6.6
<domainsnapshot>
  <name>1440950172</name>              //快照版本号
  <state>shutoff</state>
......            //省略部分输出

(8)删除快照

[root@localhost ~]# virsh  snapshot-delete  Centos-6.6  1440950172
Domain snapshot 1440950172 deleted

kvm直接拷贝qcow2虚机文件到另一个虚机启动的问题

场景是这样的:

  • 实体机是kvm,上面跑了A和B两台虚机。

  • A 机 IP 是 192.168.85.40,然后胡乱鼓捣,里面乱作一团,然后想恢复。

  • B 机 IP 是 192.168.85.47,全新安装。

  • 想直接把 B 机的qcow2文件翻版覆盖A机,然后启动改个 ip 即可。

结果是不行,用 virsh console A 上去查看,发现 eth0 没了,多了一个 eth1 。

于是明白,网卡冲突了,解决方法如下:

vi /etc/udev/rules.d/70-persistent-net.rules  
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f0:00:c0:a8:55:2f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f0:00:c0:a8:55:28", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"  

看到了吧,eth1 的地址是 f0:00:c0:a8:55:28 ,把这行删掉,把上面 eth0 的地址改成 f0:00:c0:a8:55:28即可。

顺手改了ifcfg-eth0和network,重启一切搞定。

KVM使用virsh命令行调整虚拟机的cpu和内存

1、virsh edit centos73 (更改前要将virsh shutdown centos73 )
找到“memory”和“vcpu”标签,将

<name>centos73</name>
  <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>

改为:

<name>centos73</name>
  <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
  <memory unit='KiB'>3145728</memory>
  <currentMemory unit='KiB'>3145728</currentMemory>
  <vcpu placement='static'>2</vcpu>

virsh define /etc/libvirt/qemu/centos73.xml 重定义使配置生效

重启虚拟机

virsh start centos73 --console

查看原配置信息

[root@localhost kvm]# virsh dominfo centos734
Id:             -
Name:           centos73
UUID:           2220a6d1-a36a-4fbb-8523-e078b3dfe795
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

调整后信息:

[root@localhost kvm]# virsh dominfo centos73
Id:             -
Name:           centos73
UUID:           2220a6d1-a36a-4fbb-8523-e078b3dfe795
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     3145728 KiB
Used memory:    3145728 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0