一、KVM架构
- KVM功能,是以扩展虚拟化CPU为硬件基础(如Intel-VT,AMD-V),利用CPU虚拟化技术。
- KVM作为内核的一个模块,来提供虚拟化功能。如果系统需要虚拟化功能,则KVM模块可以被linux内核按需动态加载到内存运行。如果不需要的KVM功能,可以动态卸载该模块。
- QEMU是一套模拟CPU的开源软件。KVM作为内核的一个模块,可以通过QEMU提供的模拟方式,来使用处理器。这样,KVM就提供了一个模拟的(虚拟的)硬件层,虚拟机就运行在这个模拟的硬件层之上。
二、KVM软件安装
1、查看CPU是否支持VT技术
2、清理环境:卸载KVM
yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y && rm -rf /var/lib/libvirt/ /etc/libvirt
3、安装软件
yum -y install *qemu* *virt* librbd1-devel
qemu-KVM:主包
libvirt:API接口
virt-manage:图形管理程序
- 在所谓的kvm技术中,应用到的其实有2个东西: qemu+kvm
- kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;
- qemu是模拟Io设备(网卡,磁盘》,kvm加上qemu之后就能实现真正意义上服务器虚拟化。
- 因为用到了上面两个东西,所以一般都称之为qemu-kvm。
- libvirt则是调用kvm虚拟化技术的接口用于管理的,用7ibvirt管理方便.
4、启动libvirtd
systemctl start libvirtd && systemctl enable libvirtd
5、查看KVM模块加载
lsmod | grep KVM
6、四种安装GuestOS方式
先通过安装飞机驾驶舱方式安装
yum install -y cockpit && systemctl start cockpit && systemctl enable cockpit
7、查看9090端口是否启用
netstat -lpnt
8、关闭防火墙
systemctl stop firewalld
setenforce 0
9、浏览器访问:服务地址:9090
飞机驾驶舱cockpit安装完毕
1、使用图形方式安装GuestOS
#打开虚拟系统管理器
virt-manager
选择新建虚拟机
然后开始进入安装界面
2、使用命令行模式安装
虚拟机组成部分
1、虚拟机配置文件
[root@localhost ~]# ls /etc/libvirt/qemu
networks vm1.xml
2、存储虚拟机的介质
[root@localhost ~]# ls /var/lib/libvirt/images/
vm1.qcow2
[root@localhost ~]#
根据配置文件配置虚拟机
1.需要拷贝之前的磁盘镜像文件
2.需要拷贝之前的配置文件
3.配置文件需要修改必要的内存
[root@localhost images]# vim /etc/libvirt/qemu/vm2.xml
4.创建虚拟机
[root@localhost images]#
5.重启一下kvm服务
[root@localhost images]# systemctl restart libvirtd
[root@localhost images]#
6.宿主机开启路由转发
#vim /etc/sysctl.conf
保存退出后,启动
7.验证
#打开虚拟系统管理器
virt-manager
查看是否显示创建的虚拟机vm2?
打开虚拟机查看是否可用
结果:命令行创建的虚拟机可用并且可以ping通外网,如果ping不通记得激活一下网卡
升级虚拟机配置
添加磁盘镜像
创建新的空磁盘卷
重新定义
[root@localhost images]# virsh define /etc/libvirt/qemu/vm1.xml
定义域 vm1(从 /etc/libvirt/qemu/vm1.xml)
[root@localhost images]#
查看vm1有没有添加硬盘成功
添加成功
三、KVM存储
概念
- KVM必须要配置一个目录当作它存储磁盘镜像(存储卷)的目录,我们称这个为存储池
默认存储池
/var/lib/libvirt/images
1、存储池管理
1.创建基于文件夹的存储池(目录)
[root@localhost ~]# mkdir -p /data/vmfs
2.定义存储池与其目录
3.创建以定义的存储池
1)创建已定义的存储池
[root@localhost ~]# virsh pool-build vmdisk
构建池 vmdisk
[root@localhost ~]#
2)查看已定义的存储池
[root@localhost ~]#
4.激活并设置自动启动存储池
5.在存储池中创建虚拟机存储卷
[root@localhost ~]# virsh vol-create-as vmdisk kvm1.qcow2 3G --format qcow2
创建卷 kvm1.qcow2
[root@localhost ~]#
注意:
1:KVM存储池主要是体现一种管理方式,可以通过挂载存储目录,lvm逻辑卷的方式创建存储池,虚拟机存储卷创建完成后,剩下的操作与无存储卷的方式无任何区别了。
注2:KVM存储池也要用于虚拟机迁移任务。
[root@localhost ~]# ll /data/vmfs -h
总用量 196K
-rw------- 1 root root 193K 5月 2 14:56 kvm1.qcow2
[root@localhost ~]#
6.存储池相关管理命令
(1)在存储池中删除存储卷
[root@localhost ~]# virsh vol-delete --pool vmdisk kvm1.qcow2
卷 kvm1.qcow2 被删除
(2)取消激活存储卷
[root@localhost ~]# virsh pool-destroy vmdisk
销毁池 vmdisk
(3)删除存储池定义的目录
[root@localhost ~]# virsh pool-delete vmdisk
池 vmdisk 被删除
(4)取消定义存储池
[root@localhost ~]# virsh pool-undefine vmdisk
池 vmdisk 已经被取消定义
到此KVM存储池配置与管理操作完毕
2、生产环境中添加lvm和远程·存储即可
添加lvm和远程存储即可
3、磁盘格式
3.1.磁盘镜像文件格式
raw
原始格式,性能最好
qcow2
性能上还是不如raw,但是raw不支持快照,qcow2支持快照。
qed
现在默认安装好的用的是raw格式,所有做快照要把他转换成qcow2格式
什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费
3.2.创建磁盘文件
建立qcow2格式磁盘文件
建立raw格式磁盘文件
查看已经创建的虚拟磁盘文件
[root@localhost ~]# ll -h /var/lib/libvirt/
-rw-r--r-- 1 root root 2.0G 5月
-rw-r--r-- 1 root root 193K 5月
[root@localhost libvirt]# qemu-img info test.img
image: test.img
file format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 0
4、挂载磁盘
- 当虚拟机无法启动,而磁盘文件没有损坏时,可以将虚拟机的主分区挂载,拷贝重要信息出来
- 使用Libguestfs,首先需要使用Libvirt。Libvirt是一个管理接口,可以和KVM、Xen和其他一些基于Liunx的虚拟机相互连接。
- Libguestfs的功能更加强大,可以打开Windows虚拟机上的文件。但是首先你需要将虚拟机迁移到libguestfs可用的环境当中,也就是Linux环境。
查看磁盘分区信息
挂载磁盘镜像分区
取消挂载
四、KVM基本管理
1.KVM管理
查看 启动 关闭 重启 重置 查看
查看虚拟机
[root@localhost ~]#
查看KVM虚拟机配置文件
将vm1虚拟机的配置文件保存至vm6.xml:
virsh dumpxml vm1 > /etc/libvirt/qemu/vm6.xml
使用edit修改配置文件,如果直接用vim编辑器修改配置文件,需要重启libvirtd服务
[root@localhost ~]# virsh edit vm1
暂停虚拟机
[root@localhost ~]# virsh suspend vm1
域 vm1 被挂起
恢复虚拟机
[root@localhost ~]# virsh resume vm1
域 vm1 被重新恢复
关闭虚拟机
重启虚拟机
[root@localhost ~]# virsh reboot vm1
域 vm1 正在被重新启动
重置虚拟机(比重启的启动速度快)
[root@localhost ~]# virsh reset vm1
重新设定域 vm1
[root@localhost ~]#
删除虚拟机
[root@localhost ~]# ll /etc/libvirt/qemu
总用量 24
drwx------. 3 root root 42 5月 1 17:08 networks
-rw------- 1 root root 4592 5月 3 12:01 vm1.xml
-rw------- 1 root root 4590 5月 2 11:39 vm2.xml
-rw-r--r-- 1 root root 4642 5月 3 11:52 vm6.xml
[root@localhost ~]# virsh undefine vm1
域 vm1 已经被取消定义
[root@localhost ~]# ll /var/lib/libvirt/images/
总用量 10488020
-rw-r--r-- 1 root root 9286 5月 2 11:58 route
-rw-r--r-- 1 root root 197120 5月 2 12:43 vm1-1.qcow2
-rw-------. 1 qemu qemu 5369757696 5月 3 13:27 vm1.qcow2
-rw------- 1 root root 5369757696 5月 2 12:22 vm2.img
[root@localhost ~]#
注意:虚拟机在开启的情况下undefine是无法删除的, 只会删除配置文件,磁盘镜像还在 ,但是如果在destroy会直接删除
[root@localhost ~]# virsh destroy vm1
域 vm1 被删除
[root@localhost ~]#
设置虚拟机开机启动
[root@localhost ~]# virsh autostart vm2
域 vm2标记为自动开始
[root@localhost ~]# ls /etc/libvirt/qemu/autostart/ #此目录默认不存在,设置开机启动后自动创建
vm2.xml
[root@localhost ~]#
取消虚拟机开机启动
[root@localhost ~]# virsh autostart --disable vm2
域 vm2取消标记为自动开始
[root@localhost ~]#
查看所有开机自启的gues os
[root@localhost ~]# ll /etc/libvirt/qemu/autostart/
总用量 0
[root@localhost ~]# virsh list --all --autostart
Id 名称 状态
----------------------------------------------------
[root@localhost ~]#
2、字符终端
创建快照
[root@localhost ~]# virsh snapshot-create-as vm2 vm2.snap
已生成域快照 vm2.snap
[root@localhost ~]#
查看镜像格式
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/vm2.imgimage: /var/lib/libvirt/images/vm2.imgfile format: qcow2virtual size: 5.0G (5368709120 bytes)disk size: 5.0Gcluster_size: 65536Snapshot list:ID TAG VM SIZE DATE VM CLOCK1 vm2.snap 0 2022-05-03 14:37:36 00:00:00.000Format specific information: compat: 1.1 lazy refcounts: true[root@localhost ~]#
查看创建的快照
创建磁盘
[root@localhost qemu]# qemu-img create -f raw /var/lib/libvirt/images/vm2-1.raw 2G
Formatting '/var/lib/libvirt/images/vm2-1.raw', fmt=raw size=2147483648
将磁盘添加到vm2虚拟机上面
重新加载文件
启动vm2虚拟机
[root@localhost qemu]# virsh start vm2
域 vm2 已开始
[root@localhost qemu]#
尝试给raw格式的磁盘镜像做快照
[root@localhost qemu]# virsh snapshot-create-as vm2 vm2.snap1
错误:不支持的配置:存储类型 vdb 不支持磁盘 raw 的内部快照
[root@localhost qemu]#
失败
raw格式转换成qcow2
[root@localhost qemu]# qemu-img convert -O qcow2 /var/lib/libvirt/images/vm2-1.raw /var/lib/libvirt/images/vm2-1.qcow2
[root@localhost qemu]# #查看是否转成功
将虚拟机的硬盘只想转换后的qcow2.img
重新加载配置文件
[root@localhost images]# virsh define /etc/libvirt/qemu/vm2.xml
定义域 vm2(从 /etc/libvirt/qemu/vm2.xml)
[root@localhost images]#
创建快照
[root@localhost images]# virsh snapshot-create-as vm2 vm2.snap2
已生成域快照 vm2.snap2
[root@localhost images]#
查看添加的硬盘
给虚拟机创建第三个快照vm2.snap3
[root@localhost images]# virsh snapshot-create-as vm2 vm2.snap3
已生成域快照 vm2.snap3
[root@localhost images]#
恢复到快照vm2.snap3(注意先将虚拟机关机)
[root@localhost images]# virsh snapshot-revert vm2 vm2.snap3
产看虚拟机快照
删除虚拟机快照
[root@localhost images]# virsh snapshot-delete --snapshotname vm2.snap3 vm2
已删除域快照 vm2.snap3
[root@localhost images]#
再次查看快照
一、KVM网络管理
NAT网络拓扑
显示虚拟网卡机口
删除虚拟网卡
添加虚拟网卡
1.创建虚拟机vm2虚拟网卡的配置文件
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@localhost network-scripts]# vim ifcfg-br0
修改宿主机网卡配置文件
[root@localhost network-scripts]# vim ifcfg-ens33
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0
重启网络服务
删除桥接网卡步骤:
1.删除br0的配置文件
[root@localhost network-scripts]# rm -rf ifcfg br0
[root@localhost network-scripts]# rm -rf ifcfg-ens33
2.修改正常网卡的配置文件
3.重启服务
2 .配置文件方式创建nat网络
[root@localhost ~]# cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/nat1.xml
[root@localhost ~]# cd /etc/libvirt/qemu/networks/
[root@localhost networks]# vim nat1.xml #修改nat网络配置文件
重启服务
[root@localhost networks]# systemctl restart libvirtd
如果是图形化界面就可以选择刚创建的网卡nat1
3 .配置文件方式创建isolated网络
[root@localhost networks]# cp default.xml isolated200.xml
[root@localhost networks]# vim isolated200.xml
#重启服务
[root@localhost networks]# systemctl restart libvirtd
#查看所有网络
[root@localhost networks]# virsh net-list
名称 状态 自动开始 持久
----------------------------------------------------------
default 活动 是 是
nat1 活动 否 是
#启动网络
[root@localhost networks]# virsh net-start isolated200
网络 isolated200 已开始
#开机自启动
[root@localhost networks]# virsh net-autostart isolated200
网络isolated200标记为自动启动
#查看所有网络
创建网卡之后,添加即可,添加方式与nat1网卡添加上一致