news 2026/4/26 3:17:41

云计算 三种云平台虚拟机镜像定制化生成方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云计算 三种云平台虚拟机镜像定制化生成方案

私有云平台上常见的虚拟机镜像厂商提供免费的,常规之外的业务镜像需要提供官方ISO镜像由云厂商定制化完成。那具体云平台使用的镜像和ISO标准镜像有什么不同呢,为什么需要要重新定制化虚拟机镜像呢?云平台镜像并不是使用原版标准iso镜像来生成虚拟机,为了适应云平台的管理、监控、动态配置网络、注入ssh公钥、创建用户和设置密码、执行自定义脚本、动态扩容等功能性要求,需要执行镜像虚拟化操作。cloud-init就是用于云环境中虚拟机初始化工具,他的核心作用是在虚拟机首次启动时,自动完成系统配置。

三种常用方式实现通用虚拟机镜像定制操作

原文来源于自己公众号:路途-在路上。三平台同步更新(公众号,知乎,CSDN)

第一种方案 官方下载

使用官方cloud image,快速获取标准化镜像,下载官方云镜像

#Ubuntu:https://cloud-images.ubuntu.com/ wget https://cloud-images.ubuntu.com/jammy/latest/jammy-server-cloudimg-amd64.img #CentOS / Rocky Linux: https://download.rockylinux.org/pub/rocky/9/images/x86_64/ wget https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2

按照需求转换格式,一般常用qcow2格式,压缩空间大小。

qemu-img convert -f qcow2 -O raw input.qcow2 output.raw

使用virt-customize按需修改定制配置

virt-customize -a rocky9.qcow2 \ --install qemu-guest-agent \ --run-command 'systemctl enable qemu-guest-agent' \ --ssh-inject user:file:/path/to/id_rsa.pub

第二种方案 从ISO手动安装

创建一个空磁盘的镜像文件

qemu-img create -f qcow2 myvm.qcow2 20G

启动临时虚拟机,安装系统

virt-install \ --name temp-vm \ --memory 2048 \ --vcpus 2 \ --disk path=myvm.qcow2,format=qcow2,bus=virtio \ --cdrom /path/to/CentOS-Stream-9-latest-x86_64-dvd1.iso \ --network network=default,model=virtio \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole

通过vnc完成系统安装,包括分区,只创建根分区即可,默认用户名,安装软件包(cloud-init,qemu-guest-agent,dracut)。

系统安装完成以后清理配置

# 进入 VM 后执行 sudo yum install -y cloud-init qemu-guest-agent sudo systemctl enable cloud-init qemu-guest-agent # 配置 cloud-init(通常默认已配好) sudo sed -i 's/disable_root: true/disable_root: false/' /etc/cloud/cloud.cfg # 按需调整 # 清理临时信息 sudo rm -rf /var/log/* /tmp/* sudo rm -f /etc/ssh/ssh_host_* sudo cloud-init clean --logs

关闭并封装镜像

virsh shutdown temp-vm # 删除临时 VM 定义 virsh undefine temp-vm

压缩镜像为qcow2格式

qemu-img convert -c -O qcow2 myvm.qcow2 myvm-final.qcow2

第三种方案 使用 Packer 自动化构建

Packer是HashiCorp开源的镜像构建工具,支持KVM(通过QEMU Builder),可实现完全自动化、版本化、CI/CD集成。

安装packer工具

# Ubuntu/Debian curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https as://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install packer # CentOS/Rocky sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install packer

配置json模板,或者hcl,修改对应参数

{ "builders": [{ "type": "qemu", "iso_url": "https://releases.ubuntu.com/22.04/ubuntu-22.04.4-live-server-amd64.iso", "iso_checksum": "sha256:...", "output_directory": "output-ubuntu-2204", "disk_size": "20480", "format": "qcow2", "headless": true, "http_directory": "http", "ssh_username": "ubuntu", "ssh_password": "ubuntu", "shutdown_command": "echo 'ubuntu'|sudo -S shutdown -P now", "vm_name": "ubuntu-2204-kvm", "net_device": "virtio-net", "disk_interface": "virtio" }], "provisioners": [{ "type": "shell", "inline": [ "sudo apt update", "sudo apt install -y cloud-init qemu-guest-agent", "sudo systemctl enable qemu-guest-agent", "sudo cloud-init clean --logs", "sudo rm -f /etc/ssh/ssh_host_*" ] }] }

hcl模板示例

source "qemu" "ubuntu-2204" { iso_url = "https://releases.ubuntu.com/22.04/ubuntu-22.04.4-live-server-amd64.iso" iso_checksum = "sha256:7d9e8a7c5f3b2d1e0a4c6b8f9d2e1a3c5f7b9e8a7c5f3b2d1e0a4c6b8f9d2e1a3" output_directory = "output-ubuntu-2204" disk_size = "20480" # 20GB format = "qcow2" headless = true # 无图形界面 http_directory = "http" ssh_username = "ubuntu" ssh_password = "ubuntu" shutdown_command = "echo 'ubuntu' | sudo -S shutdown -P now" vm_name = "ubuntu-2204-kvm" net_device = "virtio-net" disk_interface = "virtio" } build { name = "ubuntu-2204" sources = ["source.qemu.ubuntu-2204"] provisioner "shell" { inline = [ "sudo apt update", "sudo apt install -y cloud-init qemu-guest-agent", "sudo systemctl enable qemu-guest-agent", "sudo cloud-init clean --logs", "sudo rm -f /etc/ssh/ssh_host_*" ] } }

执行构建命令

packer build template.json #json格式 packer build ubuntu.pkr.hcl #hcl格式

启动一台虚拟机测试镜像是否能正常被libvirt导入

virt-install --import --name test-vm --disk path=image.qcow2 --memory 1024

文章来源于自己的微信公众号:路途-在路上,欢迎访问并关注

https://mp.weixin.qq.com/s/PlHWHDp1sBDboc5nL2SXTw

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 3:33:39

DGL-KE知识图谱嵌入工具:5分钟快速上手高性能图学习方案

知识图谱作为人工智能领域的重要技术,正在改变我们处理复杂语义关系的方式。DGL-KE作为基于深度图库(DGL)开发的高性能知识图谱嵌入工具包,为开发者提供了从入门到精通的全套解决方案。 【免费下载链接】dgl-ke High performance,…

作者头像 李华
网站建设 2026/4/23 3:52:35

线性代数可视化:从抽象公式到直观认知的认知革命

线性代数可视化:从抽象公式到直观认知的认知革命 【免费下载链接】The-Art-of-Linear-Algebra Graphic notes on Gilbert Strangs "Linear Algebra for Everyone" 项目地址: https://gitcode.com/gh_mirrors/th/The-Art-of-Linear-Algebra 你是否曾…

作者头像 李华
网站建设 2026/4/25 20:47:38

为什么顶级公司都在用Clang插件?揭秘代码审查自动化的底层逻辑

第一章:为什么顶级公司都在用Clang插件?揭秘代码审查自动化的底层逻辑 在现代C/C开发中,代码质量与安全已成为大型科技公司的核心关注点。Clang作为LLVM项目的重要组成部分,不仅提供了高效的编译能力,更因其模块化架构…

作者头像 李华
网站建设 2026/4/18 5:44:38

FastAPI中如何限制并发请求数?3个关键技巧保障服务稳定性

第一章:FastAPI中并发控制的核心意义在现代Web应用开发中,高并发场景已成为常态。FastAPI基于Python的异步特性(async/await),天生具备处理大量并发请求的能力。合理利用并发控制机制,不仅能提升系统响应速…

作者头像 李华
网站建设 2026/4/23 5:38:01

Boring Notch终极指南:重新定义MacBook刘海屏的实用价值

MacBook刘海屏用户经常面临一个尴尬的现实:那个占据屏幕顶部的黑色区域到底有什么用?传统解决方案要么简单隐藏它,要么添加一些基础信息显示。但Boring Notch的出现彻底改变了这一局面,将刘海区域从一个视觉障碍转变为一个功能强大…

作者头像 李华
网站建设 2026/4/25 15:27:15

终极音频革命:Vital光谱波表合成器完整指南

终极音频革命:Vital光谱波表合成器完整指南 【免费下载链接】vital Spectral warping wavetable synth 项目地址: https://gitcode.com/gh_mirrors/vi/vital 在数字音频制作的世界里,Vital以其革命性的光谱变形波表合成技术,为音乐创作…

作者头像 李华