KVM部署及常用命令
KVM软件安装
1、查看cpu是否支持vt技术
cat /proc/cpuinfo | grep -E 'vmx|svm'
2、卸载kvm
yum remove `rpm -qa |egrep 'qemu|virt|KVM'` -y
rm -rf /var/lib/libvirt/ /etc/libvirt/
3、安装软件
yum install -y *qemu* *virt* librbd1-devel
qemu-KVM: 主包
libvirt:API接口
virt-manager: 图形化管理程序
kvm技术,应用到qemu+kvm
kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但不能模拟其他设备
qemu是模拟IO设备(网卡+磁盘...)。
libvirt是调用kvm虚拟化技术的接口管理工具。
4、启动服务
systemctl start libvirtd
5、查看kvm模块加载
lsmod|grep kvm
guest os 安装
1、飞机驾驶舱安装和管理虚拟机
yum install cockpit -y
systemctl start cockpit
访问:
浏览器访问
服务器地址:9090
# 停止
systemctl stop cockpit.socket
2、图形界面安装
需要提前准备镜像文件
virt-manager
3、完全文本模式安装
# 查看kvm支持的版本
osinfo-query os|grep centos
virt-install --connect qemu:///system -n kvm1 -r 2048 --diskpath=/var/lib/libvirt/images/kvm1.img,size=7 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://192.168.0.1/centos7u4 -x console=ttyS0 --nographics
4、命令行模式
# 虚拟机配置文件位置:
ll /etc/libvirt/qemu
# 储存虚拟机的介质:
ll /var/lib/libvirt/images/
复制虚拟机介质以及配置文件。
修改配置文件:必改点:name,uuid,source file,mac address<只能修改后三位>
# 创建虚拟机
virsh define vm02.xml
# 重启
systemctl restart libvirtd
# 宿主机开启路由转发
net.ipv4.ip_forward = 1
添加磁盘:
# 修改配置文件.xml
file,dev,slot,bus
# 创建磁盘镜像文件
qemu-img create -f qcow2 /var/lib/libvirt/images/vm02-2.xml 2G
virsh define vm02.xml
KVM存储
KVM必须要配置一个目录当作存储磁盘镜像的目录,称之为存储池。
1、存储池管理
# 基于文件夹的存储池
mkdir -p /data/vmfs
# 定义存储池及其目录
virsh pool-define-as vmdisk --type dir --target /data/vmfs
# 构建存储池
virsh pool-build vmdisk
# 查看已经定义的存储池
virsh pool-list --all
# 激活并自动启动已经定义的存储池
virsh pool-start vmdisk
# 设置开机自启动
virsh pool-autostart vmdisk
# 在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk mydisk.qcow2 20G --format qcow2
相关命令:
# 在存储池中删除虚拟机存储卷
virsh vol-delete --pool vmdisk mydisk.qcow2
# 取消激活存储池
virsh pool-destroy vmdisk
# 删除存储池中定义的目录
virsh pool-delete vmdisk
# 取消定义存储池
virsh pool-undefine vmdisk
2、 磁盘格式
raw
原始格式,性能最好
qcow2
性能不如raw,但是支持快照、支持写时拷贝、更小的储存空间、支持zlib的磁盘压缩、支持AES加密
qed
基本不用了
写时拷贝:
raw立即分配空间
qcow2只在需要空间时,才会分配空间
创建磁盘文件:
qemu-img create -f qcow2 /var/lib/libvirt/images/test.qcow2 20G
qemu-img create -f raw /var/lib/libvirt/images/test.img 20G
# 查看虚拟磁盘文件
qemu-img info test.qcow2
# 转换raw格式为qcow2格式
qemu-img convert -O qcow2 /var/lib/libvirt/images/vm2.raw /var/lib/libvirt/images/vm2.qcow2
3、 挂载磁盘
虚拟机无法启动时,通过挂载磁盘排错。利用libguestfs
找出损坏的虚拟机文件。
# 查看磁盘镜像分区信息:
virt-df -h -d vm1
# 查看文件系统:
virt-filesystems -d vm1
# 挂载磁盘镜像分区
guestmount -d vm1 -m /dev/centos/root --rw /mnt
# 取消挂载
guestunmount /mnt
KVM管理
# 查看
virsh list [--all]
# 查看虚拟机配置文件
virsh dumpxml vm1
# 拷贝vm1配置文件
virsh dumpxml vm1 > /etc/libvirt/qemu/vm121.xml
# 修改配置文件
virsh edit vm1
# 启动
virsh start vm1
# 关闭虚拟机
virsh shutdown vm1
# 重启虚拟机
virsh reboot vm1
# 重置虚拟机
virsh reset vm1
# 暂停虚拟机
virsh suspend vm1
# 恢复虚拟机
virsh resume vm1
# 删除虚拟机
virsh undefine vm1
virsh destroy vm1
# 设置虚拟机开机自启动
virsh autostart vm1
ll /etc/libvirt/qemu/autostart/ <设置autostart后创建文件>
# 关闭自启动
virsh autostart --disable vm1
# 查看所有开机自启动的guest os
virsh list --all --autostart 或者
ll /etc/libvirt/qemu/autostart/
虚拟机克隆
图形界面直接克隆
或者:
# 克隆之前保证虚拟机为关机状态
virt-clone -o vm02 -n vm02-2 --auto-clone
virt-clone -o vm02 -n vm02-2 --auto-clone -f /var/lib/libvirt/images/kvm1.img <指定新的磁盘镜像文件>
增量镜像
基本镜像的一个副本,节省磁盘空间,快速复制虚拟机。
# 创建增量镜像文件
qemu-img create -b /var/lib/libvirt/images/vm1.img -f qcow2 /var/lib/libvirt/images/vm2.img
# 查看增量镜像详细信息
qemu-img info /var/lib/libvirt/images/vm2.img
# 拷贝配置文件
cp /etc/libvirt/qemu/vm1.xml /etc/libvirt/qemu/vm2.xml
# 编辑配置文件
vim /etc/libvirt/qemu/vm2.xml
<name>vm2</name>
<uuid>de2739fd-bf1a-4066-b3b9-924d9ab1d27c</uuid>
...
...
然后就是修改配置文件创建虚拟机的步骤了
其他:
# 创建200M大小文件
dd if=/dev/zero of=test bs=1M count=200
快照
raw不支持快照
# 创建快照
virsh snapshot-create-as vm02 vm02.snap02
# 查看快照
virsh snapshot-list vm02
# 关闭虚拟机,恢复快照
virsh snapshot-revert vm02 vm02.snap02
# 删除快照
virsh snapshot-delete --snapshotname vm02.snap02 vm02
网络管理
分为 nat、isolated、bridge
brctl show 查看交换机信息
# 删除网络接口
brctl delif virbr0 vnet0
# 增加网络接口
brctl add virbr0 vnet0
1、桥接网卡
# 在宿主机/etc/sysconfig/network-scripts中添加网卡ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.18.110.73 # 宿主机ip
GATEWAY=10.18.110.254 # route命令查看
NETMASK=255.255.254.0
DNS1=114.114.114.114
DNS2=8.8.8.8
# 修改ens33网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
# 重启libvirtd
systemctl restart libvirtd
# 重启networkd
systemctl restart network
2、 nat网络/isolated
# 复制默认网络配置文件
cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/nat1.xml
# 修改文件 name ,uuid ,birdge.name,mac,ip
# 文件名和name一致
<network>
<name>nat1</name>
<uuid>5d4dc814-ed70-4b0a-be41-a0b4730893a5</uuid>
<forward mode='nat'></forward> # isolated网卡,只需要将forward标签删除即可
<bridge name='nat01' stp='on' delay='0'/>
<mac address='52:54:00:46:1c:d2'></mac>
<ip address='192.168.2.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.2.2' end='192.168.2.254'></range>
</dhcp>
</ip>
</network>
# 重启libvirtd
systemctl restart libvirtd
添加网卡
# 查看所有网络
virsh net-list
# 启动网卡
virsh net-start nat1
# 设置自动启动
virsh net-autostart nat1
# 查看虚拟机的网络接口信息
virsh domiflist vm02