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
vnet0
virbr0 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等(方便以后复制虚拟机)
注:可以通过复制虚拟机的方式,指定一个已经存在的虚拟机镜像来创建虚拟机。