小阿轩yx-部署 KVM 虚拟化平台
案例前置知识点
KVM
- 自 Linux 2.6.20 版本之后就直接整合到 Linux 内核
- 依托 CPU 虚拟化指令(如Intel-VT、AMD-V)实现高性能的虚拟化支持
- 与 Linux 内核高度整合,在性能、安全性、兼容性、稳定性上都有很好的表现
KVM 虚拟化架构图
- 环境中运行的每个虚拟化操作系统都表现为单个独立的系统进程
- 可以很方便的与 Linux 系统中的安全模块进行整合(SELiinux)
- 可以灵活的实现资源管理及分配
KVM 原理简介
广义 KVM 实际包含两部分
- 基于 Linux 内核支持的 KVM 内核模块
- 经过简化和修改的 Qemu
KVM 内核模块
- 模拟处理器和内存以支持虚拟机的运行
- 两者相互结合、相辅相成,构成了一个完整虚拟化平台
Qemu
- 本身不是 KVM 的一部分
- 主要处理 I/O 以及为用户提供一个用户空间工具进行虚拟机的管理
- 是一套完整的虚拟化解决方案
- 是纯软件实现虚拟化
- 包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟
缺点
- 模拟出来的,性能比较低
KVM 运行时的三种模式
- 让 Linux 主机成为一个虚拟机监视器(VMM)
- 且在原有 Linux 内核模式和用户模式的两种执行模式基础上增加了客户模式
客户模式
- 可以理解成客户机在操作系统运行中的模式
- 又分为内核模式和用户模式
内核模式
- 模拟 CPU 以及内存实现客户模式切换,处理从客户模式的退出
用户模式
- 为以后提供虚拟机管理的用户空间工具以及代表用户执行 I/O,Qemu 运行在这个模式之下
三种模式层次关系图
KVM 工作原理
- 用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。
- KVM Driver 为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAUNCH 指令进入客户模式,装载 GuestOS 并运行。
- Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停 Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。
- 内核模式处理这些异常时如果不需要 I/0 则处理完成后重新进入客户模式。
- 如果需要 1/0 则进入到用户模式,由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式
案例实验环境
- 采用 CentOS7.9 操作系统,并开启虚拟化支持
主机 | . 操作系统 | IP地址 | 主要软件 |
kvm201 | CentOS 7.9 x86_64 | 192.168.10.211 | KVM 虚拟机 |
kvm202 | CentOS 7.9 x86_64 | 192.168.10.212 |
案例需求
- 安装 KVM
- 完成基本的 KVM 操作管理(创建、启动、停止等)
- 完成 KVM 命令行操作虚拟机
案例实现思路
- 准备 KVM 装环境
- 安装 KVM
- 配置 KVM 桥接网络
- 创建 KVM 存储池并安装虚拟机
- 命令行操作虚拟机
搭建 KVM 虚拟化平台
准备 kvm 虚拟化环境
YUM 安装 KVM
[root@localhost ~]# yum -y install qemu-kvm
[root@localhost ~]# yum -y install qemu-kvm-tools
[root@localhost ~]# yum -y install virt-install
[root@localhost ~]# yum -y install bridge-utils
[root@localhost ~]# yum -y install libvirt virt-manager libguestfs-tools
-
qemu-kvm:kvm 核心包-虚拟操作系统模拟器加速模块
-
qemu-kvm-tools:qemu-kvm 的工具包
-
virt-install:虚拟机安装工具
-
qemu-img :是QEMU的磁盘管理工具
-
bridge-utils:虚拟机与外界通信的命令管理工具
-
libvirt:必须要装的核心工具
-
virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)
-
QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。
-
QEMU(Quick Emulator)快速仿真器
-
libguestfs-tools:用于访问虚拟机的磁盘映像文件提供的一组命令
永久关闭防火墙、内核机制
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
//修改前
SELINUX=enforcing
//修改后
SELINUX=disabled
修改主机名
[root@localhost ~]# hostnamectl set-hostname kvm01
[root@localhost ~]# bash
修改 hosts 文件
[root@kvm01 ~]# vim /etc/hosts
//添加地址
192.168.10.201 kvm01
192.168.10.202 kvm02
关闭虚拟机
[root@kvm01 ~]# poweroff
增加处理器数量,设置 CPU 支持虚拟化,然后开机
开机后验证
[root@kvm01 ~]# cat /proc/cpuinfo | grep vmx
查看内核模块
[root@kvm01 ~]# lsmod | grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
设置 KVM 网络
[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
拷贝配置文件
[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
修改物理网卡为桥接模式
[root@kvm01 network-scripts]# vim ifcfg-ens33
//添加配置
BRIDGE=br0
修改 br0 网卡
[root@kvm01 network-scripts]# vim /ifcfg-br0
//修改配置
TYPE=Bridge
NAME=br0
DEVICE=br0
重启网络并退出
[root@kvm01 network-scripts]# systemctl restart network
[root@kvm01 network-scripts]# cd
到这里做一个 KVM 快照
KVM 管理工具
[root@kvm01 ~]# virt-manager
这一步修改页面字体大小
创建存储池
双击
自定义名称
为存储池指定路径
为存储池添加卷
打开 XShell 连接上服务器用 ftp 上传镜像
鼠标右键,然后点击新建
选本地安装
选完之后前进
直接前进
开始安装 ,切换到 Install 选项
最小安装、自动分区
设置 ROOT 密码
登录,然后查看地址,ping 一下外网
新开一个服务器测试
列出所有虚拟机运行状态
[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 被删除
切换到 qemu 目录下
[root@kvm01 qemu]# cd qemu
通过配置文件启动虚拟机
[root@kvm01 qemu]# virsh create test01.xml
域 test01被创建 (从 test01.xml)
挂起虚拟机
[root@kvm01 qemu]# virsh suspend test01
域 test01 被挂起
恢复虚拟机
[root@kvm01 qemu]# virsh resume test01
域 test01 被重新恢复
配置虚拟机实例伴随宿主机自动启动
[root@kvm01 qemu]# virsh autostart test01
域 test01标记为自动开始
导出虚拟机配置
[root@kvm01 qemu]# virsh dumpxml test01>test02.xml
虚拟机的删除与添加
[root@kvm01 qemu]# virsh shutdown test01
域 test01 被关闭
[root@kvm01 qemu]# virsh undefine test01
域 test01 已经被取消定义
通过备份的配置文件重新定义虚拟机
[root@kvm01 ~]# cd /qemu
[root@kvm01 qemu]# mv test02.xml test01.xml
重新定义虚拟机
[root@kvm01 qemu]# virsh define test01.xml
定义域 test01 (从 test01.xml)
启动
[root@kvm01 qemu]# virsh start test01
域 test01 已开始
KVM 文件管理
查看当前磁盘格式
[root@kvm01 qemu]# 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
-
如果虚拟机磁盘不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式
特殊属性
[root@kvm01 qemu]# virsh shutdown test01
域 test01 被关闭
关机状态下管理磁盘文件
[root@kvm01 qemu]# 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
编辑配置文件
[root@kvm01 qemu]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/hosts
//添加配置
192.168.10.201 kvm01
查看磁盘信息
[root@kvm01 qemu]# virt-df test01
文件系统 1K-blocks 已用空间 可用空间 使用百分比%
test01:/dev/sda1 1038336 107452 930884 11%
test01:/dev/centos/root 17811456 1254740 16556716 8%
虚拟机克隆
从 test01 克隆 test02
[root@kvm01 qemu]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2
正在分配 'test02.qcow2' | 20GB 00:03
成功克隆 'test02'。
查看虚拟机状态
[root@kvm01 qemu]# virsh list --all
Id 名称 状态
---------------------------
- testo1 关闭
- test02 关闭
启动虚拟机
[root@kvm01 qemu]# virsh start test02
域 test02 已开始
查看状态
[root@kvm01 qemu]# virsh list --all
Id 名称 状态
---------------------------------
9 test02 running
- testo1 关闭
这里再拍个快照
虚拟机快照
[root@kvm01 qemu]# virsh snapshot-create test01
已生成域快照 1722309693
[root@kvm01 qemu]# virsh snapshot-create test01
已生成域快照 1722309704
查看当前虚拟机快照版本信息
[root@kvm01 qemu]# virsh snapshot-current test01
列出有几个快照
[root@kvm01 qemu]# virsh snapshot-list test01
名称 生成时间 状态
---------------------------------------------
1722309693 2024-07-30 11:21:33 +0800 shutoff
1722309704 2024-07-30 11:21:44 +0800 shutoff
恢复快照
[root@kvm01 qemu]# virsh snapshot-revert test01 1722309704
查看当前快照版本信息
[root@kvm01 qemu]# virsh snapshot-current test01
删除快照
[root@kvm01 qemu]# virsh snapshot-delete test01 1722309704
已删除域快照 1722309704
查看状态
[root@kvm01 qemu]# virsh snapshot-list test01
名称 生成时间 状态
-------------------------------------------------
1722309693 2024-07-30 11:21:33 +0800 shutoff
小阿轩yx-部署 KVM 虚拟化平台