2016/12/17


1.kvm vmware
2.openstack
3.puppet saltstack ansble
4.docker
KVM介绍
KVM与QEMU
QEMU虚拟化的软件,用户层面的虚拟技术。
KVM内核级虚拟化可以虚拟CPU内存,无法虚拟磁盘网卡,PCI设备,借助QEMU来虚拟。
在vmware workstation中虚拟虚拟机嵌套虚拟。
老服务器需要在BIOS中开启CPU虚拟化。


#################################################################################################################################################################
一、
安装使用KVM
qemu-kvm  模拟虚拟机  virt-install创建虚拟机 libvirt管理虚拟机

[root@linux-node1 ~]# yum install -y qemu-kvm qemu-kvm-tools libvirt


virt-install安装虚拟机用的

[root@linux-node1 ~]# yum install -y virt-install net-tools


启动libvirt

[root@linux-node1 ~]# systemctl enable libvirtd 

 [root@linux-node1 ~]# systemctl start libvirtd


二、
启动完libvirt之后会自动在虚拟机中创建virbr网卡类型
创建一台虚拟机条件
1.需要硬盘
2.需要镜像
3.需要VNC工具来连接虚拟机
正式开始创建虚拟机步骤:
磁盘格式介绍
raw 裸磁盘不支持快照
qcow2,不保存原始镜像只会记录操作和原始镜像不同的内容,做快照。写时拷贝的一种技术,这种技术把所做的操作记录在一个文件中,只对这个文件镜像。Openstack使用的方式推荐使用这个
区别:
qcow2 数据的基本组成单元是cluster 
raw性能比qcow2快
raw创建多大磁盘,就占用多大空间直接分配,qcow2动态的用多大占用多大空间。
创建磁盘
创建虚拟机镜像    raw裸磁盘    磁盘的名称      磁盘多小10G 注意的是这个磁盘只能为一台机器使用,相当于一个10G物理硬盘,在创建其他机器需要重新再创建磁盘。

qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G


查看磁盘镜像的格式

qemu-img info /opt/CentOS-7-x86_64.raw


注意镜像权限。
安装虚拟机                             虚拟机名称自定义  内存大小      镜像路径                                 指定刚才创建的磁盘。                     网络默认使用桥接网卡   监听VNC使用VNC工具连接直接操作                                            

virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/root/CentOS-7.2-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole


执行完之后
在VNC中连接
192.168.56.11:5900


安装Centos6 
创建10G raw硬盘,创建虚拟机时使用这个10G硬盘,一个硬盘只能使用在一台机器上面。

qemu-img create -f raw /opt/CentOS-6-x86_64.raw 10G 

 virt-install --virt-type kvm --name CentOS-6-x86_64 --ram 1024 --cdrom=/opt/rhel-server-6.4-x86_64-dvd.iso  --disk path=/opt/CentOS-6-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole


在虚拟机世界里面越简单越好,方便扩展。
如果多次执行安装Centos6

rm -rf /opt/CentOS-6-x86_64.raw 

 qemu-img create -f raw /opt/CentOS-6.6-x86_64.raw 10G 

 virt-install --virt-type kvm --name CentOS-6-x86_64 --ram 1024 --cdrom=/opt/rhel-server-6.4-x86_64-dvd.iso  --disk path=/opt/CentOS-6.6-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole



3.TightVNC 连接到192.168.56.11:5900
KVM虚拟机就是一个进程,只要是进程都会受到CPU的调度。




###############################################################################################################################################################
管理KVM虚拟机
一、
常用命令
(0)查看有哪些虚拟机

[root@linux-node1 ~]# virsh list --all  

  Id    Name                           State 

  [root@localhost ~]# virsh list --all 

 [root@linux-node1 ~]# virt-install   
 #建立kvm虚拟机 

 [root@linux-node1 ~]# virsh list   
 #查看正在运行的KVM虚拟机 

 [root@linux-node1 ~]# virsh list --all 
 
#查看所有KVM虚拟机 

 [root@linux-node1 ~]# virsh start name   
#启动KVM虚拟机 

 [root@linux-node1 ~]# virsh shutdown name 
#正常关闭KVM虚拟机 

 [root@linux-node1 ~]# virsh destroy name   
 #强制关闭KVM虚拟机(类似于直接断电) 

 [root@linux-node1 ~]# virsh suspend name   
 #挂起KVM虚拟机 

 [root@linux-node1 ~]# virsh resume name   
 #恢复挂起的KVM虚拟机 

 [root@linux-node1 ~]# virsh dumpxml name   
 #查看KVM虚拟机配置文件 

 [root@linux-node1 ~]# virsh edit name   
 #编辑KVM虚拟机的xml配置文件 

 [root@linux-node1 ~]# virsh undefine name   
  #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件) 



 ---------------------------------------------------- 

  -     CentOS-7-x86_64             shut off


(1)启动kvm虚拟机

[root@linux-node1 ~]#  virsh start  CentOS-7-x86_64


(2)关闭KVM虚拟机

[root@linux-node1 ~]# virsh shutdown  CentOS-7-x86_64


(3)挂起KVM虚拟机

[root@linux-node1 ~]# virsh resume CentOS-7-x86_64 

 Domain CentOS-7-x86_64 resumed


(4)创建快照
查看创建过哪些快照 

[root@linux-node1 ~]# virsh   snapshot-list CentOS-7-x86_64 



 [root@linux-node1 ~]# virsh snapshot-create CentOS-7-x86_64 #注意创建快照的命令,raw格式磁盘不支持创建快照  

 error: unsupported configuration: internal snapshot for disk vda unsupported for storage type ra 

 [root@linux-node1 ~]# virsh snapshot-delete                  #删除快照




三、
通过VNC连接到KVM虚拟机设置IP地址
创建完虚拟机默认是没有IP地址,需要修改机器的网卡配置文件。

vim /etc/resolv.conf  添加nameserver 

 vim /etc/sysconfig/network-scripts/ifcfg-eth0  修改网卡内容 ONBOOT=yes 注释掉UUID  

 /etc/init.d/network  restart   重启网卡



四、
这个就是刚才创建虚拟机生成的xml文件,这个文件记录了虚拟机硬件和软件内容。

[root@linux-node1 ~]# ls /etc/libvirt/qemu/ 

 CentOS-7-x86_64.xml  networks 

 [root@linux-node1 ~]#  virsh edit CentOS-7-x86_64.xml     编辑虚拟机的XML文件。


virtio半虚拟化的驱动    


五、
测试虚拟机删除和恢复:
虚拟机是通过xml来管理的,不小心把xml删除掉的话可以通过xml来进行恢复,前提是硬盘还在。 
(0)备份xml文件

[root@linux-node1 ~]# virsh dumpxml CentOS-7-x86_64 >CentOS-7-x86_64-bakcup.xml


(1)彻底删除kvm虚拟机做测试

[root@linux-node1 ~]# virsh undefine CentOS-7-x86_64


(2)关闭虚拟机

[root@linux-node1 ~]# virsh  shutdown CentOS-7-x86_64


(3)查看虚拟机,刚才创建的一台虚拟机没有了。

[root@linux-node1 ~]# virsh list --all 

  Id    Name                           State 

 ----------------------------------------------------


(4)恢复虚拟机

[root@linux-node1 ~]# virsh define CentOS-7-x86_64-bakcup.xml


(5)启动虚拟机

[root@linux-node1 ~]# virsh start CentOS-7-x86_64 



 #################################################################################################################################################################


虚拟机调整
CPU 内存 网络 三部分进行调整


一、CPU参数修改
1.编辑虚拟机的XML文件,动态修改CPU个数,不是动态修改CPU个数,修改完需要重新启动KVM虚拟机。
[root@linux-node1 ~]# virsh edit CentOS-7-x86_64
将<vcpu placement='static'>1</vcpu>
修改为<vcpu placement='auto' current="1">4</vcpu> CPU个数允许添加到4个。
重新启动KVM虚拟机

[root@linux-node1 ~]# virsh shutdown CentOS-7-x86_64 

 [root@linux-node1 ~]# virsh start CentOS-7-x86_64


使用命令修改CPU个数,不用重启自动生效。

[root@linux-node1 ~]# virsh setvcpus CentOS-7777-x86_64 2 --live




二、内存参数设置
修改不了KVM xml配置文件
修改内存只能调小,不能增大内存,可以再创建KVM虚拟机时将内存设置大一些这样就可以自由向小的调整了。

[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 1021 

 查看内存 

 [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon 

 balloon: actual=1021




三、网络
KVM内网走的是nat转换。
1.查看桥接网卡

[root@linux-node1 ~]# brctl show 

 bridge name 
 bridge id 
 STP enabled 
 interfaces 

 virbr0 
 8000.fe540052e4a8 
 yes 
 vnet0


2.将KVM网卡IP地址桥接到物理网卡上
brctl addbr br0
3.创建br0桥接网卡

[root@linux-node1 ~]#  brctl addif br0 eth0


4.将br0的关联到eth0上面,这一步会断网。最佳实践是使用脚本。

[root@linux-node1 ~]# ip addr del dev eth0 192.168.56.11/24


进入到虚拟机中操作
5.[root@linux-node1 ~]# ifconfig br0 192.168.56.11/24 up 
6.添加路由要不然不能上网。

[root@linux-node1 ~]# route add default gw 192.168.56.2


7.修改xml文件修改网卡

[root@linux-node1 ~]# virsh edit CentOS-7777-x86_64



<interface type='network'>


修改为

<interface type='bridge'>



<source bridge='br0'/>


修改为
保存退出
8.重启虚拟机

[root@linux-node1 ~]# virsh shutdown CentOS-7-x86_64  

 Domain CentOS-7-x86_64 is being shutdown 

 [root@linux-node1 ~]# virsh start CentOS-7-x86_64  

 Domain CentOS-7-x86_64 started


使用VNC登录上去修改网络配置文件

192.168.56.11:5900 



 vim /etc/sysconfig/network-scripts/ifcfg-eth0  

 TYPE=Ethernet 

 BOOTPROTO=static 

 DEFROUTE=yes 

 PEERDNS=yes 

 PEERROUTES=yes 

 IPV4_FAILURE_FATAL=no 

 NAME=eth0 

 #UUID=a800d4a6-9b1a-4f4c-95e9-242cdccdf372 

 DEVICE=eth0 

 ONBOOT=yes 

 IPADDR=192.168.56.18      #自己设置的网卡IP地址,桥接网卡和物理机在同一个网端中。 

 NETMASK=255.255.255.0 

 GATEWAY=192.168.56.2






创建桥接网卡脚本

#!/bin/bash 

 brctl addbr br0 

 brctl addif br0 eth0 

 ip addr del dev eth0 192.168.56.11/24 

 ifconfig br0 192.168.56.11/24 up  

 route add default gw 192.168.56.2