制作虚拟机模板

制作虚拟机模板

系统模板分类

  1. 薄模板
  2. 厚模板

薄模板

使用原生的 cloudimg, 搭配 cloud-init 机制, 在创建实例启动的那一刻才进行初始化;

优点:

  • 模板自身体积非常小
  • 启动时初始化通常能获取最新的应用软件包

缺点:

  • 如果安装包较多, 初始化速度会很慢,
  • 同一模板不同时间创建的实例会有差别, 例如初始化时安装的软件包版本号不一样

厚模板

先在基础镜像内把各类软件和基础配置都做好, 打包后使用, cloud-init 只负责简易的ip地址,主机名和用户密码;
主流模式

优点:

  • 因为主要初始化动作已经完成, 所有新建实例时启动会很快
  • 核心软件版本已经固定到模板系统内

缺点:

  • 模板体积可能较大

cloud-init

简单理解为预先置放在系统内的一个服务程序, 在启动那一刻会去指定设备(一般是虚拟光驱)上读取一些文件进行系统初始化操作。

早期没有 cloud-init 时, 我们一般是克隆服务器后,上传一个自定义脚本进行初始化;

数据来源

  1. 虚拟iso设备文件提供的配置
  2. 公有云环境通过 169.254.169.254 获取到的主机元数据

数据类型

  • Metadata: 实例的id, 主机名等
  • Userdata: 主要的初始化内容, 创建用户、脚本、安装软件、编辑文件等动作
  • Vendor-data: 供应商数据, 一般由云平台提供

创建模板

方案1: 原生工具创建, 独立创建系统模板

  1. vmware 就使用 vCenter 创建模板
  2. pve 安装系统后, ui页面转换为模板
  3. pve 使用 qm 命令行工具+virt-customize 创建模板

方案2: terraform 负责创建系统模板

方案3: packer 创建系统模板, 支持2种模式

  1. 从 iso 安装到制作成模板
  2. 从另一个模板开始制作, 一般搭配 cloudimg 镜像使用

推荐组合

  1. 如果有特殊驱动需求, 就使用 packer iso 方式制作镜像
  2. packer templates 方式制作镜像
  3. virt-customize 定制镜像
  4. cloud-init 避免执行太多内容, 只包含基础的用户初始化即可
Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2025-07-20 00:00 UTC