Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如虚拟机镜像、Docker 镜像等。
Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜像的特征和要求。然后 Packer 使用这个配置文件来执行一系列的步骤,例如安装必要的软件、配置系统设置、复制文件等,最终生成一个可用的镜像。
使用 Packer 构建镜像的好处是多方面的。
Packer包含构建器(Builder),(派生器)Provisioner,(后处理器)Post-Processor三个组件,通过JSON格式的模板文件,可以灵活的组合这三种组件并行的、自动化的创建多平台一致的镜像文件。为单个平台生成镜像的单个任务称为构建,而单个构建的结果也称为工件(Artifact),多个构建可以并行运行。
工具 | 版本 | 说明 |
---|---|---|
Packer | 1.9.4 | 官方文档 |
Packer-plugin-qemu | 1.0.10 | Packer 插件 |
qemu-kvm | 7.0.0 | QEMU 7.0.0 |
packer {
required_plugins {
qemu = {
source = "github.com/hashicorp/qemu"
version = ">= 1.0.10"
}
}
}
variable "checksum" {
type = string
default = "xxxxxxx"
}
variable "ssh_password" {
type = string
default = "xxxxx"
}
source "qemu" "autogenerated_1" {
accelerator = "kvm"
boot_command = ["<tab> inst.text ", "console=ttyS0,115200n8 ", "inst.ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks/rocky9.ks ", "nameserver=1.1.1.1 ", "<enter><wait> "]
boot_wait = "0s"
communicator = "ssh"
format = "qcow2"
headless = true
iso_checksum = "sha256:${var.checksum}"
iso_url = "../../../Rocky-9.2-x86_64-minimal.iso"
qemu_binary = "/usr/libexec/qemu-kvm"
qemuargs = [["-m", "4096"], ["-smp", "2,sockets=2,cores=1,threads=1"], ["-cpu", "host"], ["-serial", "file:serial.out"]]
shutdown_command = "/sbin/halt -h -p"
shutdown_timeout = "120m"
ssh_password = "${var.ssh_password}"
ssh_timeout = "1500s"
ssh_username = "root"
http_content = {
"/ks/rocky9.ks" = file("../../kickstart/rocky9.ks")
}
}
build {
description = "\tMinimal Rockylinux 9 Qemu Imageni\n__________________________________________"
sources = ["source.qemu.autogenerated_1"]
provisioner "shell" {
script = "./provisioner.sh"
}
# provisioner "file" { // 拷贝配置文件
# destination = "/etc/cloud/cloud.cfg"
# source = "../../resource/cloud.cfg"
# }
}
├── kickstart # kickstart 配置文件存放目录
│ ├── rocky9.ks
├── packer # 不同版本镜像模板文件
│ ├── rocky9
│ │ ├── rocky9.pkr.hcl
│ │ ├── provisioner.sh # 制备过程中脚本,安装包,修改内核参数等等
│ │ ├── env.yaml # 系统一些配置,如os_type,os_version
│ ├── centos7
│ │ ├── centos7.pkr.hcl
│ │ ├── provisioner.sh
│ │ ├── env.yaml # 系统一些配置,如os_type,os_version
├── resources # 一些资源文件,配置文件可以直接cpoy过去