部署KVM虚拟化平台
目录
案例概述
KVM组成
KVM虚拟化三种模式
案例环境
搭建KVM环境步骤
yum安装KVM
关闭防火墙
修改hosts文件
查看CPU信息
查看内核
开启libvirtd服务
设置KVM网络
KVM管理
弹出一个图形管理工具
双击
创建虚拟磁盘
新建虚拟机
点击浏览选择镜像文件
使用 KVM 命令集管理虚拟机
查看虚拟机状态
关闭虚拟机状态
开启虚拟机状态
强制关机
通配置文件启动虚拟机
挂起虚拟机
将挂起的虚拟机恢复
配置虚拟机实例伴随宿主机自动启动
导出虚拟机配置
虚拟机删除与添加
KVM文件管理
查看当前磁盘格式
virt-cat 命
virt-edit 命令
列出磁盘信息
克隆虚拟机
虚拟机快照
查看虚拟机快照的信息
查看快照信息
恢复快照信息
删除快照
案例概述
- 公司部分Linxu服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统
- 例如:在运行Nginx的服务器上部署KVM,然后在虚拟机上运行Tomcat
- LVM虚拟化架构
- KVM模块直接整合在Linux内核中
KVM组成
- KVM Driver
- 虚拟机创建
- 虚拟机内存分配
- 虚拟CPU寄存器读写
- 虚拟CPU运行
- QEMU(快速访真器)
- 模拟PC硬件的用户控件组件
- 提供I/O设备模型及访问外设的途径
KVM虚拟化三种模式
- 客户模式(客户是你的虚拟机)
- 用户模式(为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu运行在这个模式下
- 内核模式(模拟cpu、内存,实现客户模式切换,处理客户模式的退出,KVM内核模块运在这个模式下)
- 用户模式
- libkvm:通过ioctl进入内核
- ioctl:输入输出控制器
- fd:通过ioctl向设备驱动器(/dev/kvm)发送创建、运行(虚拟机)等操作
- 内核模式
- VMM(Linux内核+KVM Driver)
案例环境
操作系统 | IP 地址 | 主机 |
CentOS7.9 | 192.168.10.201 | KVM虚拟机 |
CentOS7.9 | 192.168.10.202 | KVM虚拟机 |
搭建KVM环境步骤
yum安装KVM
[root@localhost ~]# yum -y install qemu-kvm #KVM模块
[root@localhost ~]# yum -y install qemu-img #qemu组件,创建磁盘,启动虚拟机
[root@localhost ~]# yum -y install bridge-utils #网络支持工具
[root@localhost ~]# yum -y install qemu-img bridge-utils qemu-kvm-tools virt-install libvirt virt-manager libguestfs-tools
#QEMU磁盘管理工具、虚拟机与外界通信的命令管理工具、gemu-kvm工具包、虚拟机安装工具、必须安装的核心工具、图形界面管理虚拟机、访问虚拟机磁盘映像文件
关闭防火墙
关闭防火墙功能并设置永久关闭
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
修改主机的主机名称
[root@localhost ~]# hostnamectl set-hostname kvm01
[root@localhost ~]# bash
修改hosts文件
201主机
[root@kvm01 ~]# vim /etc/hosts
192.168.10.201 kvm01
192.168.10.202 kvm02
202主机
[root@kvm02 ~]# vim /etc/hosts
192.168.10.201 kvm01
192.168.10.202 kvm
关闭虚拟机,右键点设置将处理器设置大一点,设置4个处理器,勾选虚拟化功能,如果不勾选CPU不支持虚拟化的支持,
[root@kvm01 ~]# poweroff #关闭虚拟机
查看当前信息,查看当前的CPU是否支持虚拟化的技术,查看内核是否支持虚拟化的模块
查看CPU信息
[root@kvm01 ~]# cat /proc/cupinfo | grep vmx #查看英特尔处理器
[root@kvm01 ~]# cat /proc/cupinfo | grep vm #查看ADM处理器
查看内核
[root@kvm01 ~]# lsmod | grep vm
#查看内核模块
开启libvirtd服务
开启libvirtd,设置永久开启
[root@kvm01 ~]# systemctl start libvirtd
[root@kvm01 ~]# systemctl enable libvirtd
设置KVM网络
拷贝物理网卡的配置文件,将他拷贝为另外一个名称为br0(这些网卡不是真实的网卡),要想去通信要有一个网络的桥接,生成一个虚拟的网卡
[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
修改物理网卡跟桥接网卡
[root@kvm01 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.201
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #配置网络桥接,用于将虚拟机的网络接口桥接到物理网络上
[root@kvm01 network-scripts]# vim ifcfg-br0
TYPE=Bridge #修改类型
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.201
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
修改了网卡信息,重启一下网络
[root@kvm01 network-scripts]# systemctl restart network
部署完成后可以做一个快照
KVM管理
弹出一个图形管理工具
[root@kvm01 ~]# virt-manager
修改图形化的分辨率
双击
点击存储创建存储池名称为kgc,点击前进修改存储池的路径
创建虚拟磁盘
创建存储卷,创建虚拟磁盘文件
创建完成后点击文件点击关闭
将Linux系统的ISO文件拷贝到/opt目录下,并关闭存储设置
新建虚拟机
回到主页面点击文件,新建虚拟机,安装到本地上,点击前进
点击浏览选择镜像文件
分配内存和CPU资源,默认为1G跟一个CPU
点击选择或创建自定义存储,点击管理,选择刚刚创建的kgc文件系统目录,点击选择卷,点击前进
给这个虚拟机起一个名称,名称不要太复杂,网络选择为桥接模式,点击完成
安装为最小安装,存储位置为默认存储,设置网络信息,信息设置完成后点击开启
使用 KVM 命令集管理虚拟机
查看虚拟机状态
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 test01 running
关闭虚拟机状态
[root@kvm01 ~]# virsh shutdown test01
域 test01 被关闭
开启虚拟机状态
[root@kvm01 ~]# virsh start test01
域 test01 已开始
强制关机
[root@kvm01 ~]# virsh destroy test01
域 test01 被删除
通配置文件启动虚拟机
[root@kvm01 ~]# virsh create /etc/libvirt/qemu/test01.xml
域 test01 被创建(从 /etc/libvirt/qemu/test01.xml)
挂起虚拟机
[root@kvm01 ~]# virsh suspend test01
域 test01 被挂起
将挂起的虚拟机恢复
[root@kvm01 ~]# virsh resume test01
域 test01 被重新恢复
配置虚拟机实例伴随宿主机自动启动
[root@kvm01 ~]# virsh autostart test01
域 test01标记为自动开始
导出虚拟机配置
[root@kvm01 ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml
虚拟机删除与添加
查看删除结果,test01的配置文件被删除,但是磁盘文件不会被删除。
[root@kvm01 ~]# virsh shutdown test01
域 test01 被关闭
[root@kvm01 ~]# virsh undefine test01
域 test01 已经被取消定义
恢复
要保证磁盘文件必须存在
[root@kvm01 ~]# cd /etc/libvirt/qemu/
[root@kvm01 qemu]# cp test02.xml test01.xml
[root@kvm01 qemu]# mv test02.xml test01.xml
[root@kvm01 qemu]# virsh define test01.xml
定义域 test01(从 test01.xml)
KVM文件管理
查看当前磁盘格式
[root@kvm01 ~]# qemu-img info /data_kvm/store/test01.qcow2
image: /data_kvm/store/test01.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
为了演示它的特殊使性关闭虚拟机
[root@kvm01 ~]# virsh shutdown test01 域 test01 被关闭
virt-cat 命
类似于cat 命令 ,列出hosts文件
[root@kvm01 ~]# virt-cat -a /data_kvm/store/test01.qcow2 /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
virt-edit 命令
用于编辑文件,用法与vim 基本一致。
[root@kvm01 ~]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/hosts
列出磁盘信息
[root@kvm01 ~]# virt-df -h test01
克隆虚拟机
从 test01克隆 test02在关机情况下允许被克隆
[root@kvm01 ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2
正在分配 'test02.qcow2' | 20 GB 00:00:02
成功克隆 'test02'。
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- test01 关闭
- test02 关闭
虚拟机快照
对test01做快照,内存多大创建的文件就有多大
[root@kvm01 ~]# virsh snapshot-create test01
已生成域快照 1724859265
查看虚拟机快照的信息
[root@kvm01 ~]# virsh snapshot-current test01
查看快照信息
[root@kvm01 ~]# virsh snapshot-list test01
名称 生成时间 状态
------------------------------------------------------------
1724859265 2024-08-28 23:34:25 +0800 shutoff
恢复快照信息
[root@kvm01 ~]# virsh snapshot-revert test01 1724859265
删除快照
指定删除快照信息
[root@kvm01 ~]# virsh snapshot-delete test01 1724859265
已删除域快照 1724859265