packer-工具使用
Packer是hashicorp公司开源的虚拟机镜像构建工具,与之类似的工具还有OpenStack diskimage-builder、AWS EC2 Image Builder,但后者只支持自家的云平台,Packer更强调平台无关性与统一的镜像构建流程,更关注系统级与基础环境的可复现构建,强调不可变的基础设施(Immutable Infrastructure)。Packer最典型的用途是制作VM镜像,如AMI-Amazon Machine Image、QCOW2、VMDK等,同时也支持Docker镜像构建,能够覆盖主流公有云、私有云以及混合云环境下的镜像构建需求,这种预制镜像Golden Image可以缩短扩容时间Auto-scaling毫秒级启动,并确保测试环境与生产环境的操作系统底座完全一致,消除"Works on my machine"的问题。
0.Packer安装
export HASHICORP_URL=https://apt.releases.hashicorp.com
wget -O- ${HASHICORP_URL}/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] ${HASHICORP_URL} $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install packer
1.基础命令
Packer和Terraform一样使用申明式语言编写(题外话:相较于命令式语言,其描述目标状态,可读性更强,易实现幂等性,易于维护、版本控制,但抽象高,调试困难,对复杂流程不友好,强依赖执行引擎能力)
peter@peter-Legion-Y9000P-IAH7H:~$ packer --help
Usage: packer [--version] [--help] <command> [<args>]
Available commands are:
build build image(s) from template // 执行构建任务
console creates a console for testing variable interpolation // 调试使用
fix fixes templates from old versions of packer
fmt Rewrites HCL2 config files to canonical format // 文件格式化
hcl2_upgrade transform a JSON template into an HCL2 configuration // 将json结构的配置,转换为hcl语言
init Install missing plugins or upgrade plugins // 插件的安装和升级
inspect see components of a template
plugins Interact with Packer plugins and catalog
validate check that a template is valid // 验证语法正确性
version Prints the Packer version
2.简单案例
Packer通过读取并应用HCL模板文件中定义的配置来完成构建,而HCL模板以简洁的方式刻画生成构建产物所需的过程。Packer build命令接受一个参数,当参数为文件夹时,其下所有以.pkr.hcl和.pkr.json后缀的文件都将被使用HCL2格式解析。当参数是单独文件时,若文件后缀为.pkr.hcl或者.pkr.json都使用HCL2 schema解析器解析,对于不符合上述命名规则的情况,为了兼容历史配置,Packer将采用旧版仅支持JSON的配置解析方式。
Read more...






