深入学习KVM
深入学习KVM
一、环境准备
主机名 IP 操作系统 内存 硬盘
kvm01
10.0.0.11
centos7
4G
50G
优化:kvm01在安装系统的时候,不要使用自动分区,自动分区使用的LVM分区,在使用kvm的时候,特别卡!
- 关闭selinux关
[root@kvm02 ~]# grep "SELINUX=disabled" /etc/selinux/configSELINUX=disabled
- 闭firewalld
[root@kvm02 ~]# systemctl stop firewalld[root@kvm02 ~]# systemctl disable firewalld
[root@kvm02 ~]# systemctl status firewalld
安装kvm管理工具
安装:yum install libvirt virt-install qemu-kvm -y
介绍:
libvirt服务:管理kvm虚拟机的生命周期
virt-install工具:创建安装虚拟机
qemu-kvm工具:使用qemu-img为虚拟机提供硬盘
Linux上几种虚拟化软件
- qemu 软件纯模拟全虚拟化软件,特别慢!
- xen 性能特别好,需要使用专门修改之后的内核,兼容性差。
- KVM 需要cpu支持虚拟化,基于内核,不需要使用专门的内核,兼容行好,性能较好。
安装kvm虚拟机准备条件
在window上安装TightVNCtightvnc官网:http://www.tightvnc.com
vnc是一个跨平台的远程桌面软件,待会安装kvm虚拟机系统的时候使用
启动libvirtd服务
systemctl start libvirtd.service
systemctl status libvirtd.service
安装虚拟机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7.5-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
二、虚拟机的日常管理
日常管理一:
- 列表list
- 开机start
- 关机shutdown
- 拔电源关机destroy
常用命令:
virsh list --allvirsh destroy centos7
virsh shutdown centos7
virsh start centos7
日常管理二:
- 导出配置dumpxml
- 删除undefine
- 推荐:先destroy,在undefine
- 导入配置define
- 修改配置edit
- 重命名domrename (注意:低版本不支持)
实例:virsh dumpxml centos7 >centos7.xml
cat centos7.xml
[root@kvm02 opt]# virsh define centos7.xml (备份的配置文件)
[root@kvm02 opt]# virsh list --all
mv centos2.raw centos7.raw
virsh edit centos7
virsh start centos7
virsh list --all
[root@kvm02 opt]# virsh domrename centos7 web01
Domain successfully renamed
[root@kvm02 opt]# virsh list --all
[root@kvm02 /]# virsh suspend web01
[root@kvm02 /]# virsh resume web01
[root@kvm02 /]# virsh vncdisplay web01
:0
[root@kvm02 /]# virsh autostart web01
域 web01标记为自动开始
[root@kvm02 /]# virsh autostart --disable web01
三、kvm虚拟机console登陆
1:常规情况下,安装完 KVM 之后,可能都会通过 VNC 连接到 KVM 虚拟机里面去修改 IP 等信息。但是一旦虚拟机比较多的话,打开过多的端口会造成安全问题。
2:很多时候,我们是通过跳板机连接的宿主机,你的window和kvm宿主机没有直达的路由,这时候vnc都用不了,如何快速进入到 KVM 虚拟机里面去排查问题呢?
在centos7的kvm虚拟机中执行:grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot重启生效
使用console登录:
[root@kvm02 /]# virsh console web01
连接到域 web01
换码符为 ^]
四、kvm虚拟磁盘格式转换和快照管理
kvm虚拟机两种常用的格式
- raw:裸格式,占用空间比较大,不适合远程传输,不支持快照功能,性能较好
- qcow2:cow(copy on write)占用空间小,适合传输,支持快照,性能比raw差一点点
qemu-img create test.raw 10Gqemu-img info test.raw
qemu-img create -f qcow2 test.qcow2 5G
qemu-img info test.qcow2
qemu-img resize test.qcow2 +10G
qemu-img info test.qcow2
修改磁盘格式:
qemu-img convert -f raw -O qcow2 test.raw test1.qcow2
[root@kvm02 opt]# qemu-img info test1.qcow2
案例1:
将现有的虚拟机的磁盘格式由raw转换为qcow2,并测试运行
qemu-img convert -f raw -O qcow2 centos7.raw web01.qcow2
virsh edit web01
修改磁盘的配置文件
virsh start web01
快照管理:
创建快照virsh snapshot-create centos7
查看快照
virsh snapshot-list centos7
还原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
删除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
实例:
虚拟机上创建文件:测试恢复快照后文件消失
dd if=/dev/zero of=/tmp/test.raw bs=100M count=1
virsh snapshot-create web01
virsh snapshot-list web01
virsh snapshot-revert web01 --snapshotname 1586618763
virsh snapshot-list web01
virsh snapshot-delete web01 --snapshotname 1586618763
virsh snapshot-list web01
五、kvm虚拟机的克隆
完整克隆
实现方法: virt-clone -o web01 --auto-clone
virsh dumpxml web01 >web01.xml
virsh dumpxml web01-clone >web01-clone.xml
vimdiff web01.xml web01-clone.xml
对比克隆前后的配置文件差异
virsh domrename web01-clone web03
对克隆机器重命名
virsh list --all
virsh edit web03
链接克隆
实现方法:
shell脚本
完整克隆:(手工克隆)
1:克隆虚拟磁盘文件cp centos7.qcow2 web03.qcow2
2:生成新的虚拟机配置文件
name修改
uuid删掉
disk路径/opt/web03.qcow2
mac地址删除
3:测试启动
virsh define web01.xml
实例:
cp web01.qcow2 web04.qcow2
vim web01.xml
virsh define web01.xml (virsh dumpxml web01 >web01.xml)
virsh list --all
virsh start web04
链接克隆
链接克隆实战:基于原磁盘克隆磁盘:
qemu-img create -f qcow2 -b cetnos7.qcow2 web02.qcow2
创建克隆机器:(区别:--boot hd)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
案例:
[root@kvm02 opt]# qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
[root@kvm02 opt]# qemu-img info web02.qcow2
[root@kvm02 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm02 opt]# virsh list --all
[root@kvm02 opt]# virsh vncdisplay web02
六、kvm虚拟机的桥接网络
我们运行虚拟机的目的是,在虚拟机中运行我们的业务,现在业务所需要的服务都已经运行了,可是除了在宿主机上能访问,其他人都访问不了!!!
创建桥接网络1:virsh iface-bridge eth0 br0
如果命令创建失败,可以手工进行创建:
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"(注意点)
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"(注意点)
BOOTPROTO="none"
IPADDR="10.0.0.12"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@kvm02 opt]#
基于桥接网络创建虚拟机(区别:--network bridge=br0)
2:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
将已有的虚机修改为桥接网络1:virsh edit web02
<interface type="bridge">
<mac address="52:54:00:55:aa:fa"/>
<source bridge="br0’/>
2:修改虚拟机ip地址
/etc/sysconfig/network-scripts/ifcfg-eth0
kvm NAT模式网络原理图
kvm 桥接网络原理图
七、kvm虚拟机的热添加技术
热添加技术就是不停机的情况下,在线热添加硬盘,内存,cpu,网卡等设备,热添加技术一般都是在虚拟机资源不够了,又不能停机的情况下使用的,热添加技术是虚拟机相对于物理机的一个很大的优势,它让资源分配变得更灵活!
热添加种类有:
- 1.热添加硬盘
- 2.热添加网卡
- 3.热添加cpu
- 4.热添加内存
热添加硬盘
[root@kvm02 opt]# qemu-img create -f qcow2 web02-add.qcow2 10G[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
虚拟机上配置:
fdisk /dev/vdb
mkfs.xfs /dev/vdb1
mount /dev/vdb1 /mnt
df -h
磁盘扩容案例:
虚拟机配置:
umount /mnt
宿主机配置:
[root@kvm02 opt]# virsh --help | grep disk
attach-disk 附加磁盘设备
detach-disk 分离磁盘设备
[root@kvm02 opt]# virsh detach-disk web02 vdb
成功分离磁盘
[root@kvm02 opt]# qemu-img resize web02-add.qcow2 +5G
Image resized.
[root@kvm02 opt]# qemu-img info web02-add.qcow2
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
虚拟机配置:
fdisk /dev/vdb
d(删除重新配置)
mkfs.xfs /dev/vdb1
partprobe /dev/vdb
xfs_growfs /mnt(ext 格式的需要resize2fs /mnt)
mount /dev/vdb /mnt
df -h
热添加网卡
添加网卡virsh attach-interface web02 --type bridge --model virtio --source br0
热添加CPU
安装参数:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
热添加cpu
virsh setvcpus web02 --count=2
热添加内存:
安装参数virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
热添加内存
virsh setmem web02 1G
八、kvm虚拟机的热迁移
热迁移:
相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,这次通过大家熟悉的nfs来实现,当然也可以采用Glusterfs等分布式文件系统来实现。
上一节我们学习了在线热添加技术,就很容易理解了。假设我初级只有一台16G内存的物理机,为了充分利用资源,我可能运行了8台2G内存的虚拟机,然后访问量增加,虚拟机的2G内存不够用了,需要扩容,扩容之前我们就需要先迁移一部分虚拟机到其他宿主机上了,有的业务特别核心,暂停的时间不能太长,这时候就要用到我们的热迁移了。
热迁移过程:
假设我们有2台宿主机kvm01和kvm02,在kvm01上挂起虚拟机vm01,发送vm的虚拟机配置文件和运行时内存中的数据到kvm02, 接受完毕,kvm02恢复vm01,热迁移完成。
热迁移环境准备:
主机名 ip 内存 网络 软件需求 虚拟化
kvm01
10.0.0.11
2G
创建br0桥接网卡
kvm和nfs
开启虚拟化
kvm02
10.0.0.12
2G
创建br0桥接网卡
kvm和nfs
开启虚拟化
nfs01
10.0.0.31
1G
无
nfs
无
热迁移步骤
(一):在kvm01和kvm02上安装kvm和nfs,配置桥接网卡
yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -ysystemctl start libvirtd.service
virsh iface-bridge eth0 br0
(二):在nfs01上安装配置nfs
yum install nfs-utils -ymkdir /data
vim /etc/exports
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
systemctl restart rpcbind
systemctl restart nfs
(三):kvm01和kvm02挂载共享目录/opt
mount -t nfs 10.0.0.31:/data /opt
(四):安装一台基于桥接模式的虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole(这里利用之前保存下来的硬盘,virsh edis web04,将已有的硬盘名称配置到配置文件中)
热迁移的命令:
virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
将宿主机10.0.0.11上的kvm虚拟机web04迁移到10.0.0.12
(五):在kvm01上安装图形界面、vnc服务端和virt-manager
yum groups install "GNOME Desktop" -yyum install tigervnc-server.x86_64 -y
yum install virt-manager -y
六:启动vnc服务端
vncserver :1 启动5901端口的vnc服务端vncserver -kill :1 关闭5901端口的vnc服务端
七:使用vnc连接宿主机,使用virt-manager进行迁移
这时候会提醒输入密码,就是之前第6步的时候设置的vnc连接密码
![1587143636550](
连接成功。
在迁移的过程中,使用ping虚拟机的ip,发现只丢了一个包 。
以上是 深入学习KVM 的全部内容, 来源链接: utcz.com/z/515599.html