系统模板分类
- 薄模板
- 厚模板
薄模板
使用原生的 cloudimg, 搭配 cloud-init 机制, 在创建实例启动的那一刻才进行初始化;
优点:
- 模板自身体积非常小
- 启动时初始化通常能获取最新的应用软件包
缺点:
- 如果安装包较多, 初始化速度会很慢,
- 同一模板不同时间创建的实例会有差别, 例如初始化时安装的软件包版本号不一样
厚模板
先在基础镜像内把各类软件和基础配置都做好, 打包后使用, cloud-init 只负责简易的ip地址,主机名和用户密码;
主流模式
优点:
- 因为主要初始化动作已经完成, 所有新建实例时启动会很快
- 核心软件版本已经固定到模板系统内
缺点:
- 模板体积可能较大
cloud-init
简单理解为预先置放在系统内的一个服务程序, 在启动那一刻会去指定设备(一般是虚拟光驱)上读取一些文件进行系统初始化操作。
早期没有 cloud-init 时, 我们一般是克隆服务器后,上传一个自定义脚本进行初始化;
数据来源
- 虚拟iso设备文件提供的配置
- 公有云环境通过 169.254.169.254 获取到的主机元数据
数据类型
- Metadata: 实例的id, 主机名等
- Userdata: 主要的初始化内容, 创建用户、脚本、安装软件、编辑文件等动作
- Vendor-data: 供应商数据, 一般由云平台提供
创建模板
方案1: 原生工具创建, 独立创建系统模板
- vmware 就使用 vCenter 创建模板
- pve 安装系统后, ui页面转换为模板
- pve 使用 qm 命令行工具+virt-customize 创建模板
方案2: terraform 负责创建系统模板
方案3: packer 创建系统模板, 支持2种模式
- 从 iso 安装到制作成模板
- 从另一个模板开始制作, 一般搭配 cloudimg 镜像使用
推荐组合
- 如果有特殊驱动需求, 就使用 packer iso 方式制作镜像
- packer templates 方式制作镜像
- virt-customize 定制镜像
- cloud-init 避免执行太多内容, 只包含基础的用户初始化即可