使用Packer构建镜像

打印 上一主题 下一主题

主题 582|帖子 582|积分 1746

什么是Packer

Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如假造机镜像、Docker 镜像等。
Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜像的特征和要求。然后 Packer 使用这个配置文件来执行一系列的步骤,例如安装必要的软件、配置体系设置、复制文件等,最终生成一个可用的镜像。
为什么要用 Packer

使用 Packer 构建镜像的好处是多方面的。

  • 可移植性:起首,它提供了一种可重复的、自动化的方式来创建镜像,这意味着我们可以确保每次构建的镜像都是一致的,从而减少了人为错误的风险。其次,Packer 支持多种基础设施提供商,如 AWS、VMware、Azure 等,这使得我们可以在不同的环境中轻松地部署镜像。
  • 自动化:Packer 依据单个的配置文件, 能做到流水线式 + 并发的创建镜像,与传统手工操作相比,其 "Infrastructure as Code" 的工作方式也大大减少了失误的概率。
  • 题目的追溯与定位:在 Packer 上所有变化都是基于代码的,而代码是可以追溯的,方便快速定位题目并回滚。而在传统方式中,考虑得手动操作的过程可能涉及多人,完整地追出题目并不是一件容易的事儿。
  • 快速迭代:Packer 的配置文件是可编辑的,因此我们可以轻松地修改配置文件,然后重新构建镜像,从而快速迭代。
Packer的构成及及原理

Packer包含构建器(Builder),(派生器)Provisioner,(后处理器)Post-Processor三个组件,通过JSON格式的模板文件,可以灵活的组合这三种组件并行的、自动化的创建多平台一致的镜像文件。为单个平台生成镜像的单个使命称为构建,而单个构建的结果也称为工件(Artifact),多个构建可以并行运行。

  • Builder又称构建器,可以或许为单个平台创建镜像。构建器读取一些配置并使用它来运行和生成镜像。作为构建的一部分调用构建器以创建实际生成的镜像。常见的构建器包罗VirtualBox,Alicloud ECS和Amazon EC2。构建器可以以插件的形式创建并添加到Packer中。
  • Provisioner(派生器),这一组件在Buider创建的运行的呆板中安装和配置软件。他们执利用镜像包含有用软件的主要工作。常见的派生器包罗shell脚本,Chef,Puppet等。
  • Post-Processors(后处理器),它使用构建器或另一个后处理器的结果来创建新工件的过程。例如压缩后处理器压缩工件,上传后处理器上传工件等。
落地


  • 通过qemu-kvm本地构建镜像
  • 通过gitlab堆栈管理镜像构建的参数配置模板
  • 通过gitops触发构建,跟踪构建日志以及构建结果(提交模板变更merge request,通过批评触发构建使命)
工具版本说明Packer1.9.4官方文档Packer-plugin-qemu1.0.10Packer 插件qemu-kvm7.0.0QEMU 7.0.0

模板
  1. packer {
  2.   required_plugins {
  3.     qemu = {
  4.       source  = "github.com/hashicorp/qemu"
  5.       version = ">= 1.0.10"
  6.     }
  7.   }
  8. }
  9. variable "checksum" {
  10.   type    = string
  11.   default = "xxxxxxx"
  12. }
  13. variable "ssh_password" {
  14.   type    = string
  15.   default = "xxxxx"
  16. }
  17. source "qemu" "autogenerated_1" {
  18.   accelerator          = "kvm"
  19.   boot_command         = ["<tab> inst.text ", "console=ttyS0,115200n8 ", "inst.ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks/rocky9.ks ", "nameserver=1.1.1.1 ", "<enter><wait> "]
  20.   boot_wait            = "0s"
  21.   communicator         = "ssh"
  22.   format               = "qcow2"
  23.   headless             = true
  24.   iso_checksum         = "sha256:${var.checksum}"
  25.   iso_url              = "../../../Rocky-9.2-x86_64-minimal.iso"
  26.   qemu_binary          = "/usr/libexec/qemu-kvm"
  27.   qemuargs             = [["-m", "4096"], ["-smp", "2,sockets=2,cores=1,threads=1"], ["-cpu", "host"], ["-serial", "file:serial.out"]]
  28.   shutdown_command     = "/sbin/halt -h -p"
  29.   shutdown_timeout     = "120m"
  30.   ssh_password         = "${var.ssh_password}"
  31.   ssh_timeout          = "1500s"
  32.   ssh_username         = "root"
  33.   http_content = {
  34.       "/ks/rocky9.ks"     = file("../../kickstart/rocky9.ks")
  35.     }
  36. }
  37. build {
  38.   description = "\tMinimal Rockylinux 9 Qemu Imageni\n__________________________________________"
  39.   sources = ["source.qemu.autogenerated_1"]
  40.   provisioner "shell" {
  41.     script = "./provisioner.sh"
  42.   }
  43.   
  44. #  provisioner "file" {   // 拷贝配置文件
  45. #    destination = "/etc/cloud/cloud.cfg"
  46. #    source      = "../../resource/cloud.cfg"
  47. #  }
  48. }
复制代码
配置库构造形式


  • 配置堆栈模板化了kickstart文件(这个部分往往是不经常变动的)
  • 对于不同镜像的模板文件放在不同的目次下,方便管理
  • 同一个镜像目次下三个文件

    • packer的hcl文件(packer模板主文件)
    • provisioner.sh 制备过程中脚本,镜像中需要安装的包,修改的文件等等
    • env.yaml 为了联动DevOps体系的一些配置,比如标识当前这个镜像的版本、类型、用途等等

  • resources 目次主要存放一些资源文件,如配置文件,脚本等等
  1. ├── kickstart        # kickstart 配置文件存放目录
  2. │   ├── rocky9.ks
  3. ├── packer           # 不同版本镜像模板文件
  4. │   ├── rocky9
  5. │   │   ├── rocky9.pkr.hcl
  6. │   │   ├── provisioner.sh  # 制备过程中脚本,安装包,修改内核参数等等
  7. │   │   ├── env.yaml   # 系统一些配置,如os_type,os_version
  8. │   ├── centos7
  9. │   │   ├── centos7.pkr.hcl
  10. │   │   ├── provisioner.sh
  11. │   │   ├── env.yaml   # 系统一些配置,如os_type,os_version
  12. ├── resources        # 一些资源文件,配置文件可以直接cpoy过去
复制代码
效果



好处


  • 提升构建镜像自动化程度,提升效率:以往运维同学手动到云上打镜像得到镜像ID然后配置到DevOps体系中
  • 镜像版本可以描述,版本可追溯,更透明:以往的镜像版本都是通过人工打的,过段时间没人知道当前运行的镜像内里做了哪些改动,装了哪些东西,具有什么特性

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表