使用Packer构建镜像

news2025/1/10 16:20:51

什么是Packer

Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如虚拟机镜像、Docker 镜像等。

Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜像的特征和要求。然后 Packer 使用这个配置文件来执行一系列的步骤,例如安装必要的软件、配置系统设置、复制文件等,最终生成一个可用的镜像。

为什么要用 Packer

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

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

Packer的组成及及原理

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

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

落地

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

file

模板

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"
#  }

}

配置库组织形式

  1. 配置仓库模板化了kickstart文件(这个部分往往是不经常变动的)
  2. 对于不同镜像的模板文件放在不同的目录下,方便管理
  3. 同一个镜像目录下三个文件
    1. packer的hcl文件(packer模板主文件)
    2. provisioner.sh 制备过程中脚本,镜像中需要安装的包,修改的文件等等
    3. env.yaml 为了联动DevOps系统的一些配置,比如标识当前这个镜像的版本、类型、用途等等
  4. resources 目录主要存放一些资源文件,如配置文件,脚本等等

├── 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过去

效果

file file

好处

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

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思迈特软件与海量数据库、红莲花安全浏览器完成兼容互认证

近期&#xff0c;思迈特软件信创认证喜讯传来&#xff0c;思迈特商业智能与数据分析软件[简称&#xff1a;Smartbi Insight] V11在数据库、浏览器产品兼容互认取得新突破&#xff0c;Smartbi Insight V11分别同海量数据库G100管理系统[简称&#xff1a;Vastbase G100] V2.2、红…

Java中的线性搜索

一.介绍 在本文中&#xff0c;我们将讨论或描述 Java 线性搜索。这是最简单的搜索方法。在此方法中&#xff0c;在列表中按顺序搜索要搜索的元素。此方法可应用于已排序或未排序的列表。 二.线性搜索&#xff08;顺序搜索&#xff09; 列表/数组的顺序搜索从列表/数组的开头…

Coco-LIC基于ubuntu的vscode进行断点调试

1、下vscode和插件 参考这个也行 https://zhuanlan.zhihu.com/p/704522656 2、编译debug版本并修改json 要在 Visual Studio Code (VSCode) 中进行断点调试 ROS 任务&#xff0c;你需要进行以下几个步骤&#xff1a; ### 1. 安装所需插件 - **C/C 插件**: 提供对 C 代码的调试…

day13-测试自动化之Selenium的元素定位

一、如何进行元素定位 1.1.元素定位作用 让程序操作指定元素&#xff0c;就必须先找到此元素 1.2.html页面组成格式 1.3.元素定位的概念 元素定位就是通过元素的信息或元素层级结构来定位元素的。 二、浏览器开发者工具 2.1.作用 快速定位元素&#xff0c;查看元素信息 2.2.谷…

《Advanced RAG》-06-探索RAG技术 Query Rewriting

摘要 详细阐述了多种查询重写技术&#xff0c;这些技术用于在检索增强生成&#xff08;RAG&#xff09;中优化查询和文档之间的语义匹配。 首先&#xff0c;介绍了假设文档嵌入&#xff08;HyDE&#xff09;方法&#xff0c;它通过生成假设文档并将其与原始查询结合&#xff0c…

卡码网KamaCoder 104. 建造最大岛屿

题目来源&#xff1a;104. 建造最大岛屿 C题解&#xff1a;先用深度优化算法计算每个孤岛的面积&#xff0c;然后给每个孤岛编号&#xff08;如果孤岛是U型的&#xff0c;防止面积加重复了&#xff09;&#xff0c;再去遍历每个海水区域&#xff0c;计算最大面积。 #include &…

jenkins+gitlab实现微服务的差异化部署

前景&#xff1a; Jenkins 和 GitLab 结合实现微服务的差异化部署具有多方面的意义和优势&#xff0c;主要包括以下几点&#xff1a; 自动化和持续集成&#xff1a;通过 Jenkins 可以实现从代码提交到部署的全自动化流程。这种自动化确保了每次代码变更都能够快速、可靠地构建…

【Python】数据类型之集合

集合是一个无序、可变、不允许元素重复的容器。 1、定义 v1{11,22,33} 1&#xff09;&#xff09;无序&#xff1a;集合无法通过索引取值。 2&#xff09;&#xff09;可变&#xff1a;可以添加和删除集合中的元素。 3&#xff09;&#xff09;集合不允许元素重复。 例如…

GD32 MCU碰到IIC总线卡死怎么办?

大家在使用MCU IIC通信时&#xff0c;若碰到设备复位或者总线干扰等情况&#xff0c;可能会导致IIC总线卡死&#xff0c;表现上总线上SDA或者SCL其中一根线为低电平&#xff0c;IIC总线一直处于busy状态。此时若代码上一直等待总线空闲&#xff0c;则可能导致软件死机&#xff…

PCL Chaikin曲线逼近型细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Chaikin 逼近型细分算法是一种生成平滑曲线的方法,常用于计算机图形学和曲线建模。它基于 Paul Chaikin 于 1974 年提出的算法,通过迭代地插入新的控制点并移动原始控制点来细分曲线,从而逐渐逼近光滑曲线。具体…

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间&#xff1a;NeurIPS 2022 论文链接&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位&#xff1a;DeepMind Motivation&#xff1a;仅使用少量注释示例可以快速适应新任务…

谈基于大语言模型的图数据库路径检索

随着微软已经开源了GraphRAG项目的代码&#xff0c;基于图数据库的RAG 热度迅速升温。关注基于大语言模型与图模型数据库相结合的技术的人多了起来。 本文提出了一种类似人工搜索的“顺藤摸瓜”方法&#xff0c;实现图数据库的智能搜索方法。 本地私有数据存储和查询 本地私有…

大数据面试SQL(一):合并日期重叠的活动

文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期&#xff0c;每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM)

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM) 在前边我们聊了数据结构的设计和剪贴板的数据操作&#xff0c;那么这些操作都还是比较倾向于数据相关的操作&#xff0c;那么我们现在就来聊聊基本的图形绘制以及图形状态管理。 在线编辑: https://windrunnermax.github.io/…

树与二叉树、图的基本概念

一、树与二叉树的基本概念和性质 1、树的的性质&#xff1a; 1&#xff09;树中的结点数 n 等于所有结点的度数之和加 1 【说明】结点的度是指该结点的孩子数量&#xff0c;每个结点与其每个孩子都由唯一的边相连&#xff0c;因此树中所有结点的度数之和等于树中的边数之和。…

模型 MBTI(性格模型)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。探索真我&#xff0c;和谐人际。 1 MBTI性格模型的应用 1.1 跨国公司团队协作改进 ABC公司是一家全球性的科技公司&#xff0c;其研发团队由来自世界各地的工程师和设计师组成。尽管团队成员个个才华…

创意指南丨AR数学沉浸式空间体验

AR学习种类那么多&#xff0c;哪款最吸引你&#xff1f; 星河造梦坊和Unity联手打造的沉浸式空间AR无疑是其中的佼佼者。 这款应用不仅利用AR技术将抽象的数学概念变得生动有趣&#xff0c;还通过互动体验让学习者仿佛置身于一个充满奇幻色彩的数学世界中。 无论是学生还是教…

鸿蒙应用服务开发【自定义通知角标】

自定义通知角标 介绍 本示例主要展示了设定应用的桌面图标角标的功能&#xff0c;使用ohos.notificationManager接口&#xff0c;进行桌面角标的设置&#xff0c;通知的发送&#xff0c;获取等。 效果预览 使用说明 在主界面&#xff0c;可以看到当前应用的所有消息通知&am…

ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION

问题 有个monorepo项目&#xff0c;在最外层一次性打包 3 个项目的脚本已经成功实现&#xff0c;如下&#xff1a; "build:test": "cross-env NODE_ENVtest vite build --mode test && esno ./build/script/postBuild.ts", "build:prod"…

一款基于RBAC模型的开源快速开发平台,支持权限粒度达到列级别,前后端分离,可免费用于商业

前言 在企业级应用开发中&#xff0c;权限管理和系统配置是两个核心问题。传统的开发模式往往面临权限控制不够灵活、系统配置难以管理等挑战。为了解-决这些问题&#xff0c;需要一款能够提供细致权限控制和灵活系统配置的软件。 现有的一些软件虽然提供了基本的权限管理功能…