libvirt 介绍
用途    libvirt 是虚拟机管理工具不仅限于管理kvm 包括xen、vmware
安装      yum -y install libvirt
服务启动    systemctl  libvirtd   start
libvirt 架构分为三部分:
 1、libvird 服务
 2、virsh 等命令
 3、libvirt API    可以通过此接口进行二次开发 
libvirt 进程作用
 1、进程停止后,虚拟机还能正常运行
 2、virsh list --all 等管理虚拟机的命令不能使用了,也是说此服务管理虚拟机的。
   也就是说openstack挂了但是虚拟机不一定有问题,当openstack 不能管理虚拟机时,可以通过virsh 等命令进行开机等命令管理虚拟机虚拟机管理
virsh  list  --all               查看所有创建的虚拟机
virsh  start   centos-7.0_x86_64     虚拟机启动(启动后会在后台启动一个以qemu 用户身份启动的一个进程,通过ps   aux | grep kvm 查看,实际此进程就是启动的虚拟机)
虚拟机配置文件
 libvirt 通过xml 文件管理虚拟机,每一个虚拟机的配置都会记录在一个xml 文件中,在创建虚拟机的时候自动生成。
 /etc/libvirt/qemu/XXX.xml
 此文件只能通过virsh edit 命令编辑,不可以vi 更改
 注:openstack 管理虚拟机也是通过xml 文件,但是xml 不能手动更改,只能通过python 代码管理CPU/内存热添加 
当宿主机与虚拟机都是centos-7 时,虚拟机的cpu与内存支持热添加也就是不用重启服务器即可生效。 (注:当前只限于在kvm虚拟机,openstack N版本中不能实现,另外生产环境中谨慎操作)
 无论时cpu 还是 内存虚拟机的配置不能大于宿主机的配置,先更改xml 的允许最大值,再命令配置当前值,xml 更改后必须重启虚拟机才生效。 CPU热添加
 virsh edit centos-7.xml 原配置: <vcpu placement='static'>1</vcpu>
 改成: <vcpu placement='auto' current="1">4</vcpu> 1:当前 4:最大
 重启虚拟机 命令更改cpu数量:virsh setvcpus CentOS-7-x86_64 2 --live
 内存热添加
 virsh edit centos-7.xml 
 必要请况下,更改内存允许最大配置: <memory unit='KiB'>1048576</memory>
 重启虚拟机 查看当前内存: virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
 设置内存大小: virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
 
创建桥接网卡
 原网络架构
 启动libvirt 服务后会生成一个网卡 virbr0,创建虚拟机并启动后会生成网卡vnet0,虚拟机默认通过vnet0 连接virbr0,
 通过nat 方式上网,所以无法直接通过xshell 等工具直接连接虚拟机,只能通过vnc 通过宿主机ip 连接虚拟机。 
 解决:宿主机上创建一个虚拟网卡br0,br0桥接在eth0上,占用其ip ,然后虚拟机通过vnet0桥接在br0 上

 拓展:openstack 也是在宿主机上自动创建一个类似br0 的虚拟网卡占用eth0 ip,所有的虚拟机桥接在br0上与外界连接。操作步骤 
 1.建立虚拟网卡,并桥接在eth0上,且占用其ip(以脚本的形式执行,否则会断开与宿主机的连接,生产环境切勿命令操作)
 #!/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 up
 route add default gw 192.168.56.2 2.更改虚拟机的网卡配置,使其桥接在br0
 virsh edit CentOS-7-x86_64
 配置由
 <interface type='network'>
 <source network='default'/>
 更改为
 <interface type='bridge'>
 <source bridge='br0'/> 3. 重启虚拟机让配置生效
 virsh shutdown CentOS-7-x86_64
 virsh start CentOS-7-x86_64 4. 修改虚拟机网卡配置
 vi /etc/sysconfig/network-scripts/ifcfg-eth0
 BOOTPROTO=static
 IPADDR=
 NETMASK=
 GATEWAY=5.查看
[root@localhost ~]# brctl show
bridge name   bridge id          STP enabled   interfaces
br0        8000.000c295f951e     no        eth0
                                vnet0virbr0         8000.000000000000      yes
br0 相当于一个交换机,eth0与vnet0 相当于两个接口,br0 通过桥接eth0 访问宿主机的网络,虚拟机通过vnet0 连接br0。
拓展:
openstack 也是在宿主机上自动创建一个类似br0 的虚拟网卡占用eth0 ip,所有的虚拟机桥接在br0上与外界连接。
虚拟机的创建
1.下载一个ISO系统镜像
2.创建虚拟机磁盘
qemu-img create -f raw      /tmp/test.raw       10G      #raw 格式磁盘创建大小即实际存储大小
qemu-img create -f qcow2 /tmp/test.qcow2   10G      #创建完成后磁盘实际很小,根据实际存储数据大小显示实际大小 
3.virt-install 安装虚拟机
   不使用swap分区
   只分一个/
   不使用LVM等。
 安装命令
  virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 \
  --cdrom=/tmp/CentOS-7.2-x86_64-DVD-1511.iso --disk /tmp/CentOS-7-x86_64.qcow2,foramt=qcow2 \
   --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole   注意:创建的磁盘格式为raw 时,不需要format=qcow2 参数。
 
4.安装完毕后,初始化:
   1.关闭SELinux。iptables。
   2.修改网卡配置,去掉UUID MAC等(方便以后复制虚拟机)注:可以通过复制虚拟机的方式,指定一个已经存在的虚拟机镜像来创建虚拟机。