KVM 安装
判断机器是否支持硬件虚拟化的支持
$ cat /proc/cpuinfo | egrep 'vmx|svm'
Centos7 安装图形化
$ yum groupinstall "X Window System"
$ yum groupinstall "GNOME Desktop"
$ ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
# Centos7 运行级别切换
# 获取当前系统启动模式
$ systemctl get-default
# 由命令行模式更改为图形界面模式
$ systemctl set-default graphical.target
# 由图形界面模式更改为命令行模式
$ systemctl set-default multi-user.target
安装 kvm 虚拟化
$ yum -y install qemu-kvm libvirt virt-install bridge-utils virt-manager
配置网桥
[root@localhost network-scripts]# cat ifcfg-enp0s25
TYPE=Ethernet
NAME=enp0s25
DEVICE=enp0s25
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
BRIDGE=br0
[root@localhost network-scripts]# cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.103
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=114.114.114.114
DNS2=8.8.8.8
NM_CONTROLLED=no
KVM 常用命令及其配置
# 1、KVM 虚拟机配置文件及运行状态,--all 显示所有虚拟机(包括已关机)
$ virsh list --all
KVM 虚拟机默认配置文件位置: /etc/libvirt/qemu/
autostart 目录是配置 kvm 虚拟机开机自启动目录
# 2、KVM 虚拟机开机
$ virsh start oeltest01
# 3、KVM 虚拟机关机或断电
# 关机,默认情况下 virsh 工具不能对 linux 虚拟机进行关机操作,linux 操作系统需要开启与启动 acpid 服务。在安装 KVM linux 虚拟机必须配置此服务
$ chkconfig acpid on
$ service acpid restart
# virsh关机
$ virsh shutdown oeltest01
# 强制关闭电源
$ virsh destroy wintest01
# 4、通过配置文件启动虚拟机
$ virsh create /etc/libvirt/qemu/wintest01.xml
# 5、配置开机自启动虚拟机,autostart 目录是 kvm 虚拟机开机自启动目录,可以看到该目录中有 KVM 配置文件链接
$ virsh autostart oeltest01
# 6、导出 KVM 虚拟机及配置文件
$ virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml
# 7、添加与删除 KVM 虚拟机
# 删除 KVM 虚拟机,说明:该命令只是删除wintest01的配置文件,并不删除虚拟磁盘文件
$ virsh undefine wintest01
# 重新定义虚拟机配置文件
# 通过导出备份的配置文件恢复原 KVM 虚拟机的定义,并重新定义虚拟机。
$ mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml
$ virsh define /etc/libvirt/qemu/wintest01.xml
# 8、编辑KVM虚拟机配置文件,virsh edit 将调用 vi 命令编辑 /etc/libvirt/qemu/wintest01.xml 配置文件。也可以直接通过vi命令进行编辑,修改,保存
$ virsh edit wintest01
# 9、挂起及恢复服务器
$ virsh suspend oeltest01
$ virsh resume oeltest01
# 10、通过命令创建虚拟机
[root@localhost ~]$ virt-install --name=centos1 \
--ram 1024 --vcpus=1 \
--disk path=/root/centos1.img,size=10 \
--accelerate --cdrom /root/CentOS-6.5-x86_64-bin-DVD1.iso \
--graphics vnc,port=5921 --network bridge=br0
KVM 虚拟机克隆
# 克隆必须要关闭源主机
[root@node02 ~]$ virsh shutdown centos7.0
# 以 oeltest01 做为源,克隆 oeltest01 虚拟机,并创建名称为 oeltest02 虚拟机,使用磁盘文件 /data/test02.img
[root@node02 ~]$ virt-clone -o centos7.0 -n centos7.1 -f /KVM/2.qcow2
# 终端连接,修改主机名、IP 地址等参数
[root@node02 ~]$ virsh console centos7.1
# 连接不成功,修改 Linux 启动配置
[root@node02 ~]$ cat > /etc/default/grub << EOF
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
EOF
[root@node02 ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
[root@node02 ~]$ reboot
KVM 虚拟机快照
kvm 虚拟机默认使用 raw 格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像, zlib 磁盘压缩, AES 加密等。要使用镜像功能,磁盘格式必须为 qcow2 。下面开始 kvm 虚拟机快照备份的过程
1)查看磁盘格式
[root@node02 ~]# qemu-img info /KVM/1.qcow2
2)raw 格式磁盘需要转换为 qcow2 格式,关闭虚拟机进行磁盘转换
[root@node02 ~]# virsh shutdown centos7.1
3)转换磁盘格式
[root@node02 ~]# qemu-img convert -f raw -O qcow2 /KVM/2.qcow2 /KVM/2q.qcow2
-f 源镜像的格式
-O 目标镜像的格式
4)修改虚拟机配置文件
[root@node02 ~]# virsh edit centos7.1
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/KVM/2q.qcow2'/>
# 修改磁盘类型以及采用的磁盘文件
5)对虚拟机进行快照管理
# 常见虚拟机快照
[root@node02 ~]# virsh snapshot-create 虚拟机名称
# 指定快照别名的方式常见快照
[root@node02 ~]# virsh snapshot-create-as centos7.1 ss1
# 查看虚拟机快照
[root@node02 ~]# virsh snapshot-list centos7.1
# 查看快照的详细信息
[root@node02 ~]# virsh snapshot-current centos7.1
# 查看当前虚拟机镜像文件
[root@node02 ~]# qemu-img info /KVM/2q.qcow2
# 快照配置文件在/var/lib/libvirt/qemu/snapshot/虚拟机名称/
6)从快照恢复虚拟机状态
# 恢复虚拟机必须关机
[root@node02 ~]# virsh shutdown centos7.1
# 确认恢复快照名称
[root@node02 centos7.1]# virsh snapshot-list centos7.1
# 从选择的快照进行数据还原
[root@node02 centos7.1]# virsh snapshot-revert centos7.1 ss1
7)删除虚拟机快照
# 查看虚拟机快照信息
[root@node02 ~]# qemu-img info /KVM/2q.qcow2
# 从查看到的 info 中获取当前 ID,进行删除
[root@node02 ~]# virsh snapshot-delete centos7.1 tagName
# 重新查看信息确认
[root@node02 ~]# qemu-img info /KVM/2q.qcow2
KVM 热添加
热添加磁盘
# 创建磁盘
[root@node02 centos7.1]# qemu-img create -f qcow2 /KVM/add.qcow2 5G
# 附加磁盘设备
[root@node02 centos7.1]# virsh attach-disk centos7.1 /KVM/add.qcow2 vdb --live --cache=none --subdriver=qcow2
# 格式化磁盘
[root@localhost ~]# mkfs.xfs /dev/vdb
# 挂载
[root@localhost ~]# mount /dev/vdb /data
磁盘扩容
# 卸载磁盘
[root@localhost ~]# umount /dev/vdb
# 分离磁盘设备
[root@node02 centos7.1]# virsh detach-disk centos7.1 vdb
# 增加磁盘大小
[root@node02 centos7.1]# qemu-img resize /KVM/add.qcow2 +10G
# 附加磁盘设备
[root@node02 centos7.1]# virsh attach-disk centos7.1 /KVM/add.qcow2 vdb --live --cache=none --subdriver=qcow2
# 挂载
[root@localhost ~]# mount /dev/vdb /data
# 重新分配磁盘空间
[root@localhost ~]# xfs_growfs /dev/vdb
热添加网卡
# 添加 NAT 模式网卡
[root@node02 centos7.1]# virsh attach-interface centos7.1 --type network --model virtio --source default
# 添加 Br 模式网卡
[root@node02 centos7.1]# virsh attach-interface web01 --type bridge --model virtio --source br0
# 采用 xml 文件进行添加
[root@node02 centos7.1]# virsh edit centos7.1
<interface type='bridge'>
<mac address='52:54:00:45:02:55'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
热添加 CPU(目前只能增加不能减小,可关机减小)
[root@node02 centos7.1]# virsh setvcpus web01 --count=2
# 查看当前虚拟机 CPU 逻辑核心数
[root@localhost ~]# cat /proc/cpuinfo| grep "processor"| wc -l
[root@localhost ~]# virsh setvcpus web01 --count=2
热添加内存
[root@node02 centos7.1]# virsh setmem centos7.1 2G
热添加 USB 设备
# 安装 lsusb 命令行工具
[root@node02 centos7.1]# yum -y install usbutils
# 查询 usb 的对应 id
[root@node02 centos7.1]# lsusb
# 创建 usb.xml 用来 kvm 识别 usb
[root@node02 centos7.1]# vi usb.xml
<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='0x0424'/>
<product id='0x2514'/>
</source>
</hostdev>
# 正在运行中的虚机直接挂载 usb
# 挂载,如果是固定一直使用u盘类似于加密狗这样的软件,建议使用 加载到配置项中 使用参数 --persistent
[root@node02 centos7.1]# virsh attach-device [虚机名] usb.xml
# 卸载
[root@node02 centos7.1]# virsh detach-device [虚机名] usb.xml
KVM 虚拟机热迁移
一、同一宿主机之间的冷迁移
# 查看当前存在的虚拟机
[root@node01 ~]# virsh list
# 查看当前虚拟机使用的磁盘
[root@node01 ~]# virsh domblklist 4
# 拷贝磁盘文件至迁移目录下
[root@node01 disk]# mv /KVM/centos7.0-1.qcow2 /disk/
# 修改磁盘路径
[root@node01 disk]# virsh edit centos7.0
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
# 修改磁盘路劲
<source file='/disk/1.qcow2'/>
<target dev='vda' bus='virtio'/>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
# 启动虚拟机
[root@node01 disk]# virsh start centos7.0
二、不同宿主机之间的冷迁移
# 查看当前存在的虚拟机
[root@node01 ~]# virsh list
# 查看当前虚拟机使用的磁盘
[root@node01 ~]# virsh domblklist 4
# 拷贝磁盘至别的主机节点
[root@node01 ~]# rsync -avz /KVM/1.qcow2 root@node02:/KVM
# 备份虚拟机的定义文件
[root@node01 ~]# virsh dumpxml centos7.0 > /tmp/1.xml
# 拷贝文件至 node02 主机,导入定义文件
[root@node01 ~]# rsync -avz /root/1.xml root@node02:/root
[root@node01 ~]# virsh define /root/1.xml
[root@node02 ~]# virsh start centos7.0
三、通过命令行进行不同主机间的热迁移
环境说明
centos7.6 172.27.137.11 node01 kvm
centos7.6 172.27.137.12 node02 kvm
centos7.6 172.27.137.13 nfs nfs
环境初始化
1、node01,node02 安装 kvm 环境
2、nfs 机器安装配置 nfs-server 服务,其它 kvm 节点安装 nfs 客户端
(all)$ yum -y install nfs-utils rpcbind
3、在 kvm 节点创建如下存储方式
4、在 node01 安装 centos 操作系统
5、进行远程 kvm 主机连接:如果出现报错,安装相关软件报文
$ yum -y install openssl-askpass
6、使用命令进行热迁移
$ virsh
virsh # migrate centos7.0 qemu+ssh://root@node02/system --live --unsafe --persistent --undefinesource
四、通过图形化进行不同主机间的热迁移
环境说明
centos7.6 172.27.137.11 node01 kvm
centos7.6 172.27.137.12 node02 kvm
centos7.6 172.27.137.13 nfs nfs
环境初始化
1、node01,node02 安装 kvm 环境
2、nfs 机器安装配置 nfs-server 服务,其它 kvm 节点安装 nfs 客户端
(all)$ yum -y install nfs-utils rpcbind
3、在 kvm 节点创建如下存储方式
4、在 node01 安装 centos 操作系统
5、进行远程 kvm 主机连接:如果出现报错,安装相关软件报文
$ yum -y install openssl-askpass
6、进行图形化迁移
评论区