制作 KVM 虚拟机模板镜像实战指南
前言
在日常运维工作中,经常需要批量创建相同配置的虚拟机。如果每次都手动安装系统、配置环境,效率低下且容易出错。虚拟机模板镜像就是为了解决这个问题而生的——将配置好的虚拟机保存为模板,后续可以快速克隆出大量相同配置的虚拟机。
本文将以 Rocky Linux 9 为例,详细介绍如何使用 CLup IaaS 平台 制作 KVM 虚拟机模板镜像。
适用场景:
- 批量部署相同配置的业务服务器
- 标准化开发/测试环境
- 快速扩容和故障恢复
一、虚拟机技术简介
1.1 常见的虚拟化类型
在深入 KVM 之前,先了解一下常见的虚拟化技术类型:
| 类型 | 代表技术 | 隔离级别 | 性能 | 典型场景 |
|---|---|---|---|---|
| 全虚拟化 | KVM、VMware ESXi、Hyper-V | 硬件级隔离 | 接近原生 | 服务器虚拟化、云计算 |
| 半虚拟化 | Xen PV | 操作系统级 | 较好 | 早期云计算(已少见) |
| 容器虚拟化 | Docker、LXC | 内核级 | 接近原生 | 应用隔离、微服务 |
| 操作系统级虚拟化 | OpenVZ、FreeBSD Jails | 内核级 | 接近原生 | VPS 主机 |
1.2 KVM 与其他方案对比
KVM vs VMware ESXi
| 对比项 | KVM | VMware ESXi |
|---|---|---|
| 开源程度 | 完全开源 | 闭源商业软件 |
| 成本 | 免费 | 付费(有免费版但功能受限) |
| 管理 | libvirt、多种管理工具 | vCenter(需额外授权) |
| 生态 | Linux 原生集成 | 完善的企业生态 |
| 适用场景 | 开源环境、自建云平台 | 企业级虚拟化(已购买授权) |
KVM vs 容器(Docker/LXC)
| 对比项 | KVM 虚拟机 | 容器 |
|---|---|---|
| 隔离性 | 完全隔离(独立内核) | 进程级隔离(共享内核) |
| 安全性 | 高 | 相对较低 |
| 性能损耗 | 2%-5% | <2% |
| 系统要求 | 可运行不同操作系统 | 必须相同内核 |
| 适用场景 | 完整服务器、多租户 | 应用部署、微服务 |
什么时候选择 KVM?
- 需要运行完整的操作系统
- 需要运行不同类型的 Linux 发行版
- 对隔离性和安全性要求高
- 需要运行 Windows 虚拟机
- 多租户环境
什么时候选择容器?
- 应用部署和服务编排
- 资源利用率优先
- 快速启停和扩展
- 微服务架构
提示:CLup 平台同时支持 KVM 虚拟机和 LXC 容器,可以根据实际需求灵活选择。
1.3 KVM 的优势
KVM(Kernel-based Virtual Machine)是 Linux 内核的原生虚拟化解决方案,具有以下优势:
- 性能优异:接近物理机的性能,经过 virtio 驱动优化后损耗极小
- 生态成熟:Linux 原生支持,配合 libvirt 管理非常方便
- 完全开源:无许可成本,无厂商锁定
- 功能丰富:支持热迁移、快照、动态资源调整
- 社区活跃:Red Hat、Canonical 等大厂大力支持
二、准备工作
2.1 环境检查
在开始之前,确保宿主机支持 KVM 虚拟化:
# 检查 CPU 是否支持虚拟化 lscpu | grep Virtualization # 应该输出类似:Virtualization: VT-x (Intel) 或 AMD-V (AMD) # 检查 KVM 模块是否加载 lsmod | grep kvm # 应该看到 kvm_intel 或 kvm_amd
2.2 工具准备
- Rocky Linux 9 ISO 镜像:从官网下载最新版本(https://rockylinux.org/download?arch=x86_64)
- CLup IaaS 平台:已部署的 KVM/LXC 管理平台(本文基于 CLup 6.0.6)
2.3 CLup 平台简介
官网地址:CLup6.x产品手册:CLup简介
CLup 是一套自研的 KVM/LXC IaaS 与数据库 PaaS 管理平台,提供了可视化的虚拟机管理界面,支持:
- 虚拟机生命周期管理(创建、启动、停止、删除)
- 镜像和模板管理
- 存储池和网络配置
- 虚拟机监控和资源统计
- 多种数据库管理(集群管理、监控告警、备份恢复等)
相比纯命令行操作,CLup 大大降低了 KVM 的使用门槛。
2.4 宿主机环境准备
需要一台安装了clup-agent的机器作为宿主机。宿主机上需要创建好存储池的目录和安装必要的依赖。我当前的机器安装的是Ubuntu2404的操作系统。
安装依赖
# KVM 虚拟机管理 apt install -y libvirt qemu-kvm qemu-img virt-manager virt-viewer virt-install libguestfs # LXC 容器 apt install -y lxc lxc-templates
检查一下,执行命令不报错即可
virsh list lxc-ls
磁盘准备,最好是将虚拟机放到单独的一块盘中,如果要用zfs存储池(不过社区版不支持),则还需要一块盘
# 我这里的磁盘是挂载过来的100GB,将其格式化为xfs # 如果报错,需要安装xfsprogs mkfs.xfs /dev/sdx mkdir /vms # 这里默认的isoimg存储池是/isoimg,修改了一下,直接放到/vms里面,对应的需要再界面上也修改一下 mkdir /vms/isoimg # 查看磁盘的UUID,将其配置到/etc/fstab中,让机器启动就挂载上 blkid |grep sdx # 复制sdx的UUID,然后编辑/etc/fstab,增加一行 UUID=xxxx /vms xfs defaults 0 0 # reload一下然后挂载 systemctl daemon-reload && mount -a # 检查一下 df -h
注意:这里的sdx是占位符,要替换成自己实际的磁盘符。
2.5 配置宿主机和IP地址范围
可以将安装了clup-agent的机器设置KVM虚拟机宿主机和LXC宿主机。


还需要将网络改为桥接模式,不过这里有时候好像没有成功。

如果没有成功的话,就手动配置一下吧(注意: 此操作可会导致网络中断,应该在能直连服务器或有管理端能直接登录服务器的情况下操作)
# 创建一个网桥 nmcli con add type bridge con-name br0 ifname br0 # 查看物理网卡,如果网卡名称不是简称,可以使用nmtui修改一下 nmcli conn show # 将物理网卡加入到网桥中,注意替换实际的网卡名 nmcli conn modify ens3 master br0 # 根据自己的环境实际情况,选择固定网桥的mac地址,我这里的DHCP服务器是有一定的匹配规则的 nmcli conn modify br0 ethernet.cloned-mac-address 52:54:00:xx:xx:xx
重启网络,等待一会检查网络是否正常
nmcli networking off && nmcli networking on
设置IP范围


前面我们将isoimg存储池放到了/vms下面了,所以这里也需要修改一下:


三、虚拟机磁盘格式对比
KVM 虚拟机磁盘常用的两种格式是 raw 和 qcow2,它们各有特点:
3.1 格式对比
| 特性 | raw | qcow2 |
|---|---|---|
| 性能 | 最快,接近物理磁盘 | 稍慢,但 virtio 优化后差异很小 |
| 空间占用 | 立即分配全部空间 | 精简配置,按需分配 |
| 快照支持 | 不支持(依赖文件系统) | 原生支持快照 |
| 压缩/加密 | 不支持 | 支持 |
| 兼容性 | 通用性好 | QEMU 特有 |
3.2 推荐场景
- raw 格式:对性能要求极高的场景(建议在没有特殊极限 I/O 性能要求的情况下,首选 qcow2 格式)
- qcow2 格式:推荐使用,功能丰富且节省空间
3.3 创建命令示例
# 创建 raw 格式磁盘(立即分配 20G) qemu-img create -f raw /var/lib/libvirt/images/rocky9.raw 20G # 创建 qcow2 格式磁盘(精简配置,最大 20G) qemu-img create -f qcow2 /var/lib/libvirt/images/rocky9.qcow2 20G
在 CLup 中创建虚拟机时,平台会自动处理磁盘创建,默认使用 qcow2 格式。
四、使用 CLup 创建虚拟机并安装系统
4.1 上传 ISO 镜像
- 登录 CLup 管理平台
- 进入 IaaS 平台 → ISO镜像管理 → 上传
- 点击 上传,选择本地的 Rocky Linux 9 ISO 文件
- 等待上传完成
4.2 配置模板
默认的模板好像不会无法分配宿主机,只能新建一个模板,选择宿主机了。复制下ISO默认模板的xml配置,然后点击“增加”。

4.3 创建虚拟机
- 进入 IaaS 平台 → 主机管理
- 点击 创建KVM虚拟机,选择“从iso光盘镜像文件安装”,然后填写基本信息:
| 配置项 | 推荐值 | 说明 |
|--------|--------|------|
| 虚拟机名称 | Rocky97-Base | 用于标识模板用途 |
| CPU | 4 核 | 根据实际需求调整 |
| 内存 | 4 GB | 最小 2GB |
| 磁盘 | 20-50 GB | qcow2 格式 | - 选择 Rocky Linux 9 ISO 作为启动介质
- 点击 创建,等待虚拟机启动
4.4 控制台安装系统
CLup 自带有WebVNC,可以直接登录到主机。
- 在主机管理列表中,点击 登录 进入安装界面
- 按照 Rocky Linux 9 安装向导完成安装:
- 选择语言(建议英文)
- 安装目的地:选择虚拟磁盘
- 网络配置:可暂不配置,后续优化时统一处理
- root 密码:设置强密码并记录
- 创建普通用户(可选)
3. 安装完成后点击 重启
安装建议:
选择安装位置时,可以选择自定义

4. 然后这样可以自定分区,只配置一个/boot分区即可,根据自身需要可选配置swap分区
4.5 安装完成验证
重启后,再次通过 VNC 登录系统,确认:
# 检查系统版本 cat /etc/redhat-release # Rocky Linux release 9.x (xxx) # 检查内核版本 uname -r
五、系统基础优化
模板镜像需要在克隆后直接可用,因此需要进行一系列基础优化,这样以后可以快速创建,而不需要在创建后再去配置。
5.1 主机名配置
设置默认主机名:
# 设置临时主机名 hostnamectl set-hostname Rocky9-Base # 编辑 hosts 文件 vi /etc/hosts # 添加: 127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain
5.2 时区和时间同步
# 设置时区为上海 timedatectl set-timezone Asia/Shanghai # 安装并启用 chrony dnf install -y chrony systemctl enable --now chronyd # 验证时间同步 chronyc sources -v
5.3 SELinux 配置
SELinux 是 Linux 的安全增强机制,可以先设置为disabled,否则后续会踩很多坑,真实的生产环境根据需要再配置:
# 查看当前状态 getenforce # 永久修改配置 vi /etc/selinux/config # 修改: SELINUX=disabled
5.4 防火墙基础设置
# 检查防火墙状态 systemctl status firewalld # 这里我们先直接关闭,后续有需要再配置 systemctl disable --now firewalld
5.5 SSH 优化
# 备份配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 编辑 SSH 配置 vi /etc/ssh/sshd_config # 推荐修改: PermitRootLogin yes # 允许 root 登录(生产环境建议 no) PasswordAuthentication yes # 允许密码登录(建议配置密钥后改为 no) PubkeyAuthentication yes # 启用密钥登录 UseDNS no # 加快登录速度 # 重启 SSH 服务 systemctl restart sshd
5.6 禁用不必要的服务
# 查看所有服务 systemctl list-unit-files --type=service # 禁用不需要的服务(示例) systemctl disable --now postfix # 如果不需要邮件服务
5.7 清理系统
为减小模板体积,清理不必要的文件:
# 清理缓存 dnf clean all # 清理日志 journalctl --vacuum-time=1d # 清理命令历史 > /root/.bash_history history -c # 清理临时文件 rm -rf /tmp/* rm -rf /var/tmp/*
六、使用 CLup 制作和管理模板
6.1 在 CLup 中保存为模板
- 确认虚拟机已关机,记住主机ID
- 在“模板管理”中点击”把虚拟机拷贝成模板“,输入主机ID和模板名称即可
6.2 使用模板创建新虚拟机
- 进入 主机管理
- 点击创建KVM虚拟机-> 从已有的普通模板中创建
- 选择
Rocky9-Base模板 - 配置新虚拟机参数(CPU、内存、网络等)
- 点击 创建,等待克隆完成
6.3 验证模板
默认创建成功后启动克隆出的虚拟机,点击登录查看虚拟机是否启动成功。
如果以上检查都通过,说明模板制作成功。
七、常见问题
CLup 操作常见错误
问题:虚拟机网络没有自动分配
解决:
- 检查clup-dhcpd服务
- 执行./clup-dhcpd start -f,前台运行,查看报错,如果是权限问题,需要在root下执行
setcap 'cap_net_bind_service=+ep' /home/clup/clup-server/bin/clup-dhcpd并重启服务(好像没法直接stop,需要kill -9 pid)
问题:VNC 控制台无法连接
解决:
- 检查虚拟机是否处于运行状态
- 检查宿主机防火墙是否放行 VNC 端口(5900+)
- 尝试刷新页面或重新打开控制台
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)