KVM虚拟化
kvm实验
环境准备,我这里使用虚拟机进行模拟,先设定好虚拟化
image.png
进入系统查看是否支持虚拟化
[root@kvm ~]# lsmod |grep kvm
kvm_intel 174841 0
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
KVM:Kernel-based Virtual Machine
安装需要的软件和下载镜像:
yum install libvirt virt-install qemu-kvm -y
libvirt 作用:虚拟机的管理软件
virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具
qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘
自行下载一个centos7的镜像,我本地有镜像所以不需要下载
[root@kvm opt]# ll
total 171008
-rw-r--r-- 1 root root 175112192 Nov 25 2018 CentOS-7-x86_64-DVD-1804.iso
因为我的实验机是最小化安装的,要想实现图形化界面需要安装桌面,如果不想安装桌面可以下载vnc到windows桌面上待会备用
先启动一个虚拟机
[root@kvm opt]# 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-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm opt]# ps -ef |grep 5900
root 5151 1940 0 20:46 pts/0 00:00:00 grep --color=auto 5900
命令详解:
--virt-type kvm 虚拟化的类型(qemu)
--os-type=linux 系统类型
--os-variant rhel7 系统版本
--name centos7 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10
--cdrom /opt/CentOS-7-x86_64-DVD-1804.iso
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 图形界面用vnc输出
--noautoconsole
这样可以直接连接vnc
image.png
kvm虚拟机的virsh日常管理和配置命令
列表list(--all)
开机start
关机shutdown
拔电源关机destroy
重命名domrename (低版本不支持)
挂起suspend
恢复resume
查询vnc端口号vncdisplay
导出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
删除undefine 推荐:先destroy,在undefine
导入配置define
修改配置edit(自带语法检查)
低版本修改虚拟机名字操作流程
先停掉虚拟机 virsh shutdwon centos7
备份配置文件 virsh dumpxml centos7 >web01.xml
删除虚拟机 virsh undefine centos7
修改配置文件 vim web01.xml <name>web01</name>,删掉uuid
导入虚拟机 virsh define web01.xml
虚拟机优化
当虚拟机挂起或者恢复后时间后出现不一致,所以需要做好时间同步
创建虚拟机系统时取消swap节省内存
虚拟机开机自启
开机启动autostart,前提:systemctl enable libvirtd;
取消开机启动autostart --disable
查看哪些虚拟机设置了开机自启:
当设置了开启自启后在/etc/libvirt/qemu/autostart/
下会存在一个软连接
[root@kvm opt]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx 1 root root 29 Apr 3 22:28 centos7.xml -> /etc/libvirt/qemu/centos7.xml
qemu下命令
查看虚拟磁盘信息
qemu-img info test.qcow2
创建一块qcow2格式的虚拟硬盘:
qemu-img create -f qcow2 test.qcow2 2G
调整磁盘磁盘容量
qemu-img resize test.qcow2 +20G
把raw格式转换为qcow2格式
raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输 总50G 占用2G
qcow2:cow (copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G
- 1.先关闭要修改的虚拟机web01
virsh destroy web01
- 2.查看虚拟机运行状态
virsh list --all
- 3.确定关闭后执行转换命令
qemu-img convert -f raw -O qcow2 /data/web01.raw /data/web01.qcow2
>格式示例qemu-img convert [-f fmt] [-O output_fmt] filename output_filename
- 4.修改web01配置文件
virsh edit web01
[root@oldboy data]# virsh dumpxml web01|grep 'qcow2'
<driver name='qemu' type='qcow2'/>
<source file='/data/web01.qcow2'/>
- 5.重新启动web01,看是否可正常启动
virsh start web01
快照
raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
- 创建快照
virsh snapshot-create-as centos7 --name install_ok
--name 指定快照名字
-
查看快照
virsh snapshot-list centos7
-
还原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
-
删除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
虚拟机克隆
kvm虚拟机:磁盘文件 + 配置文件
- 完整克隆
克隆命令:virt-clone --auto-clone -o web01 -n web02
(完整克隆)
参数解释:
-o 指定要克隆的机器
-n 被克隆的机器
- kvm链接克隆
a.基于源磁盘文件,创建链接磁盘文件
qemu-img create -f qcow2 -b web02.qcow2 web03.qcow2
b:生成虚拟机的配置文件
virsh dumpxml web02 >web03.xml
virsh define web03.xml
virsh start web03
c:导入虚拟机并进行启动测试
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
全自动链接克隆方法:强哥博客
kvm虚拟机网络
默认的虚拟机网络是NAT模式,网段192.168.122.0/24,但是只能被内网访问,要想被外网也访问到,要使用桥接模式
- 默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole - 桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
kvm虚拟机实现桥接模式
1:创建桥接网卡
virsh iface-bridge eth0 br0
在使用此命令后会生成新的网卡信息,原eth0网卡信息也同时变更
取消桥接网卡
virsh iface-unbridge br0
2:测试虚拟机网络
创建一台使用桥接模式的虚拟机进行测试是否可以正常连接外网
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name test --memory 1024 --vcpus 1 --disk /data/test.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
修改已创建的虚拟机的网络模式,需要修改配置文件内的网络类型记名称
virsh edit centos7
<interface type='bridge'>
<mac address='52:54:00:55:aa:fa'/>
<source bridge='br0'/>
在宿主机上,重启虚拟机生效
热添加技术
kvm虚拟机在线热添加硬盘
先创建一块准备添加的硬盘
qemu-img create -f qcow2 add01.qcow2 5G
临时生效
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --subdriver=qcow2
永久生效
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --subdriver qcow2 --config
作业3:扩容kvm虚拟机的根分区
kvm虚拟机在线热添加网卡
kvm虚拟机在线热添加内存
kvm虚拟机在线热添加cpu
虚拟机磁盘扩容:
在kvm虚拟机,卸载
virsh detach-disk centos7 vdb
qemu-img resize /data/centos7-add01.qcow2 +5G
virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
在虚拟机中:xfs_growfs /dev/vdb
根分区扩容:
1)在宿主机上关闭虚拟机并调整虚拟机磁盘大小
qemu-img resize oldboy.qcow2 +10G
2)虚拟机中fdisk重新分区
fdisk /dev/vda
3)重启之后,执行xfs_growfs /dev/vda1,
如果虚拟机磁盘文件系统是ext4:resize2fs /dev/vda1
kvm虚拟机在线热添加网卡
virsh attach-interface web04 --type bridge --source br0 --model virtio
detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
kvm虚拟机在线热添加内存
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
临时热添加内存
setmem web04 1024M --live
永久增大内存
setmem web04 1024M --config
kvm虚拟机在线热添加cpu
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
热添加cpu核数
setvcpus web04 4 --live
永久添加cpu核数
setvcpus web04 4 --config
11:virt-manager和kvm虚拟机热迁移(共享的网络文件系统)
冷迁移kvm虚拟机:配置文件,磁盘文件
热迁移kvm虚拟机:配置文件,nfs共享
1):
yum groupinstall "GNOME Desktop" -y
yum install openssh-askpass -y
yum install tigervnc-server -y
vncpasswd
vncserver :1
vncserver -kill :1
2):kvm虚拟机热迁移
1:两边的环境(桥接网卡)
2:实现共享存储(nfs)
3:虚拟机桥接网络
4:在线热迁移