引言
大家好,欢迎来到我的 《Ansible 安全自动化:从服务器到K8S的堡垒之路》 系列教程,我是Prism!
在这个系列里,我们的目标是彻底告别繁琐的人工配置,用 Ansible 打造一套固若金汤、一键部署的服务器与K8S安全基线
作为本系列的开篇之作,我们将从什么是KVM以及KVM的原理开始开始
通过本篇文章的学习,您将了解:
1、KVM是什么
2、KVM的工作原理
3、操作过程中涉及的常见命令
链接:知识点扩展包(建议和知识点扩展包结合起来看本篇文章,可以加深理解)
预告: 下一期将介绍创建KVM虚拟机的几种方式,使用Ansible创建为重点内容
注意:如大家有更好的建议,欢迎提出,如果喜欢煮波的内容,点点关注不迷路,谢谢大家!!!
准备好了吗?发车咯!!!
一、KVM是什么
1、定义
A、KVM 的全称是 Kernel-based Virtual Machine(基于内核的虚拟机)
B、KVM 本身不是一个完整的虚拟机软件,而是 Linux 内核的一个核心模块(驱动),它负责把 Linux 操作系统变成一个“裸机”虚拟机监控程序(Type-1 Hypervisor)
2、KVM属于寄居架构,但因为深深嵌入Linux内核,因此运行效率很高
3、层次
在物理硬件之上,宿主机Linux内核通过KVM模块(利用CPU硬件虚拟化扩展)来高速执行Guest OS的指令,并协同QEMU(模拟主板、硬盘、网卡等I/O设备),共同为Guest OS构建出一个完整且高效的虚拟运行环境
A、物理硬件
CPU、RAM、NIC
B、宿主机操作内核(Linux Kernel)
负责调度KVM模块和QEMU进程,以及管理物理资源
C、KVM内核模块
扮演 “加速器”。负责 CPU 和内存的执行(最耗性能的部分),利用硬件虚拟化扩展(VT-x/AMD-V)让 Guest OS 直接在物理 CPU 上全速运行
1、“超能力”核心
KVM 模块的核心任务是启用和管理 CPU 的硬件虚拟化扩展
2、“只干大事”
KVM 只负责最核心、最困难的 CPU 和内存虚拟化。它会创建特殊的 /dev/kvm 设备,允许用户态程序(比如QEMU)来调用这个能力
3、“不干杂活”
KVM 自己不模拟任何硬件,比如网卡、硬盘、显卡、USB等
D、硬件模拟器(QEMU)(QEMU用户态程序)
扮演 “车壳子和方向盘”。负责模拟主板、硬盘、网卡、显卡等所有I/O“杂活”,并负责启动和管理虚拟机的整个“进程
E、客户操作系统(Guesy OS)
运行应用程序和服务的环境,让应用程序和服务认为自己在独立运行
二、KVM的工作流程
QEMU 启动一个虚拟机进程,当需要执行 CPU 指令时,QEMU 会通过 KVM 模块,让 Guest OS 的指令直接上物理CPU;当 Guest OS 要访问硬件(比如写网卡)时,KVM 会“暂停”Guest OS,把这个请求“踢”回给 QEMU 去模拟处理
三、KVM的管理(运维视角)
1、Libvirt
管理接口/API
1、作用
统一的管理层。它能控制KVM,Xen等多种Hypervisor.所有脚本和GUI操作都是通过Libvirt API转发给KVM/QEMU
2、常用命令
A、虚拟机生命周期管理
1、列出虚拟机
virsh list # 查看当前正在运行的虚拟机 virsh list --all # 查看所有虚拟机(包括关机的) 2、启动
# 启动一个已定义的虚拟机 virsh start <虚拟机名> 3、关机
# 正常关机 virsh shutdown <虚拟机名> # 强制关机(直接拔电源) virsh destroy <虚拟机名> 4、重启
virsh reboot <虚拟机名> 5、暂停
# 挂起虚拟机,状态保存到内存中 virsh suspend <虚拟机名> 6、恢复
# 恢复一个被挂起的虚拟机 virsh resume <虚拟机名> 7、定义(注册)
# 从一个XML文件定义一个虚拟机,但不启动 virsh define <xml配置文件> 8、取消定义(删除)
# 删除虚拟机的配置(“开除学籍”) virsh undefine <虚拟机名> # 删除配置并同时删除磁盘文件("彻底消失") virsh undefine <虚拟机名> --remove-all-storage B、虚拟机信息查看与监控
1、查看VM信息
# 查看VM的CPU、内存、状态等概要信息 virsh dominfo <虚拟机名> 2、查看VM状态
# 快速查看VM的运行状态 virsh domstate <虚拟机名> 3、查看VNC端口
virsh vncdisplay <虚拟机名> 4、查看IP地址
# 快速查看虚拟机的IP地址(需要Guest Agent支持) virsh domifaddr <虚拟机名> 5、查看虚拟网卡
# 查看VM的网卡连接到了哪个宿主机网络 virsh domiflist <虚拟机名> C、虚拟机配置修改(在线热插拔)
不用关机就能修改配置
1、编辑配置
# 在默认编辑器中打开XML配置并持久化修改(注意:通常需要重启VM生效) virsh edit <虚拟机名> 2、挂载磁盘
# 热插拔一块虚拟磁盘(比如vdb,vdc) virsh attach-disk <虚拟机名> <源路径> <目标路径> 3、热卸载磁盘
virsh detach-disk <虚拟机名> <目标设备> 4、热卸载网卡
virsh attach-interface <虚拟机名> ... 5、动态调整内存(需要VM支持)
virsh setmem <虚拟机名> <大小> 6、调整CPU
# 动态调整CPU个数(需要VM支持) D、虚拟机快照管理
1、创建快照
# 为虚拟机创建一个快照(存档) virsh snapshot-create-as <虚拟机名> <快照名> 2、列出快照
# 查看该虚拟机有哪些快照 virsh snapshot-list <虚拟机名> 3、恢复快照
# 将虚拟机恢复到指定快照状态(读档) virsh snapshot-revert <虚拟机名> <快照名> 4、删除快照
virsh snapshot-delete <虚拟机名> <快照名> E、宿主机资源管理(网络与存储)
1、列出网络
# 列出所有的虚拟网络 virsh net-list --all 2、列出存储池
# 列出所有的存储池 virsh pool-list --all 3、列出存储卷
# 列出某个存储池中的所有存储卷(虚拟磁盘) virsh vol-list <存储池名> 4、创建存储卷
# 创建一个新的qcow2虚拟磁盘 virsh vol-create-as <池> <卷名> <容量> 5、删除存储卷
# 删除一个虚拟磁盘文件 virsh vol-delete <卷名> --pool <池> F、其他高频命令
1、连接控制台
virsh console <虚拟机名> 2、设置自启动
# 设置开机自启动 virsh autostart <虚拟机名> 3、取消自启动
virsh autostart --disable <虚拟机名>