开发者社区> 子优> 正文

云生态下的镜像管理利器Packer

简介: ## About Packer Packer (https://www.packer.io/)是Hashicorp 组织旗下的一款DevOps运维工具,可以看下整个软件交付周期所处的位置: ![image.
+关注继续查看

About Packer

Packer (https://www.packer.io/)是Hashicorp 组织旗下的一款DevOps运维工具,可以看下整个软件交付周期所处的位置:
image.png

Packer是一款面向云生态非常便利的镜像管理利器,通过一个模板配置可以快速的创建镜像。
当前支持阿里云、AWS、Azure、Vmware、Google Cloud Platform、DigitalOcean 等多个云厂商平台。通过Packer,可以在创建镜像过程中,执行相应的脚本文件,或者安装目标软件,执行配置系统等操作,可提升系统应用交付效能。

Install Packer

Packer可以安装在多个系统平台上
image.png
通过https://www.packer.io/downloads.html 可以下载相应的可执行二进制包,配置好相应的PATH则可使用Packer Command,如下:
image.png

Build an Image on alicould

只需要通过创建一个Packer的模板配置文件(json格式),指定好镜像所在的region,类型,实例规格,IO类型,则可完成一个系统镜像的创建,下面看一下基于Alicloud的一个模板配置:

{
  "variables": {
    "access_key": "${your_access_key}",
    "secret_key": "${your_secret_key}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"${your_access_key}",
    "secret_key":"${your_secret_key}",
    "region":"cn-beijing",
    "image_name":"packer_test_image",
    "source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n4.small",
    "internet_charge_type":"PayByTraffic",
    "io_optimized":"true"
  }]
}

其中镜像类型对应的多平台说明文档可参考:
https://www.packer.io/docs/builders/index.html

Provision

Packer 可以支持Provision实现在创建镜像过程中,执行相应的脚本文件,或者安装目标软件,执行配置系统等,比如下可以预先安装redis:
image.png

注意事项:上面配置的sleep 30非常关键,因为在创建镜像的过程中,是构建了完整的VM实例,这中间需要通过SSH上去执行指令的过程中,可能系统尚未完成整改初始化过程,所以需要做一个30秒的时间等待。

Parallel Builds

Packer 同时支持多平台创建一个镜像,如下在AWS、DigitalOcean 创建镜像,只不过这里需要制定好各自平台的AK、API-Token:
image.png

Execute build image

当我们创建好一个镜像的时候,比如这里通过创建一个基于阿里云的镜像模板:

{
  "variables": {
    "access_key": "{your_access_key}",
    "secret_key": "${your_secret_key}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"{your_access_key}",
    "secret_key":"${your_secret_key}",
    "region":"cn-beijing",
    "image_name":"packer_test_image",
    "source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n4.small",
    "internet_charge_type":"PayByTraffic",
    "io_optimized":"true"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": [
      "sleep 30",
      "echo 'hello world' > /tmp/a.txt"
    ]
  }]
}

我们需要验证写的模板语法上是否有错误,则通过validate进行判断:

$ packer validate alicloud.json 

当如上vadidate验证json语法等问题okay后,则通过packer build 直接构建镜像:

$ packer build alicloud.json

如果为build的过程的STDOUT:
image.png

如上可以看到该过程完成了资源的创建和释放的过程,执行后到阿里云管控控制台查看ECS自定义镜像:
image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
通过Kubernetes安全高效管理边缘节点,ACK@Edge年度重磅发布
拓展Kubernetes边界,ACK@Edge新增边缘节点安全互联与精细化管控。业内首发,ACK@Edge支持高质量加密网络与精细化管理。
2499 0
阿里云ACK产品安全组配置管理
这篇文章会以ACK产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。
1031 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
10161 0
基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
对于维护过多个package的同学来说,都会遇到一个选择题,这些package是放在一个仓库里维护还是放在多个仓库里单独维护,本文通过一个示例讲述了如何基于Lerna管理多个package,并和其它工具整合,打造高效、完美的工作流,最终形成一个最佳实践.
1204 0
制作ACK集群自定义节点镜像的正确姿势
随着云原生时代的到来,用户应用、业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群。 ACK支持用户使用自定义镜像创建Kubernetes集群,但用户在制作打包自定义镜像时,往往会遇到以下痛点:(1)人工操作步骤,效率低(2)镜像变更历史记录缺失,不便于故障定位(3)无法对自定义镜像进行校验并判断是否符合ACK集群节点要求 基于以上痛点,我们开源了ack-image-builder项目帮助用户快速制作符合ACK集群节点要求的自定义镜像。
3786 0
+关注
子优
Alicloud ApsaraStack 工程优化专家组成员
4
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载