简单介绍一下本身nginx
Packer 是一个轻量命令行工具, 能在几乎全部主流的操做系统上运行。shell
在给定一份配置文件的状况下, Packer 能为多种系统架构建立云主机镜像。同时 Packer 自身也可以作到多镜像并发建立, 大大节省了镜像建立过程当中的时间成本。json
为何要用 Packerbash
为何呢?架构
固然是由于使用预制的镜像有很是多的好处, 最简单来讲,就是能最大程度地保证不一样机器上服务的一致性(以经验来看这一点很是重要)。可是在实际使用中, 镜像因其建立/管理的工做单调且复杂, 不少状况下镜像尚未被彻底普及。并发
现有的镜像自动化建立工具, 要么是很差用或不方便, 要么就是学习曲线过高。这些特色致使运维团队投入过多的精力在镜像的使用中, 进而致使工做效率以及敏捷性被阻碍。这就是为何虽然镜像的工做方式具备很是多的优点,可是却依旧没有被大规模的普及。app
Packer 依据单个的配置文件, 能作到流水线式 + 并发的建立镜像,与传统手工操做相比,其 "Infrastructure as Code" 的工做方式也大大减小了失误的几率。运维
至少在 Packer 官方认为:ssh
Packer brings pre-baked images into the modern age,
unlocking untapped potential and opening new opportunities.
Infrastructure as Code 的工做方式ide
在这个理念被提出以前, 手工+脚本的方式很是广泛, 手工容易出错, 而脚本自己也要投入不少人力来进行维护。与此同时,一些主流的云服务厂商也在积极寻找更多的可能性。2019年4月, 在咱们发布了 terraform-provider-jdcloud插件之后, 目前一些团队在使用 Terraform 的京东云插件, 有的会在 Github 上留下 issues, 有的是经过留言,表示但愿能增长更多功能。用户的这些表现都从侧面验证了 "Infrastructure as Code" 工做方式的可靠性和敏捷性。
到了 Packer, 这些特性依旧被保留下来。相较于传统方式,IaC 被认为是: "Modern and Automated" , 一样是一份简单的 json 配置文件,IaC 鼓励开发者开始使用镜像, 同时使用 Packer 自动化、流水线化地管理镜像, 从而减小镜像自己管理带来的负担。
介绍一些平常的使用场景
详细一些, Packer 还包含有这些优点
安装 Packer
安装 Packer 咱们推荐去 Packer官网 下载一个二进制包,解压后直接就可使用。另外对于 Mac OS X 用户, 也可使用 HomeBrew 直接进行安装。
$ brew install packer
准备配置文件
在开始以前,你须要准备一份配置文件jdcloud.json
,在配置文件里给出相应的参数。
配置文件的模板以下:
1{ 2 "builders": [ 3 { 4 5 # 服务商与身份信息 6 "type": "jdcloud", 7 "access_key": "<Your access_key>", 8 "secret_key": "<Your secret_key>", 9 10 # 云主机规格信息 11 "image_id": "<Base Image Id>", 12 "region_id": "cn-north-1", 13 "az": "cn-north-1c", 14 "instance_name": "packer_demo", 15 "instance_type": "g.n2.medium", 16 "ssh_password": "DevOps2018", 17 "image_name": "packer_image_demo", 18 "subnet_id": "subnet-jo6e38sdli", 19 20 # 登陆设置(不用改) 21 "communicator": "ssh", 22 "ssh_username": "root" 23 } 24 ], 25 26 "provisioners": [ 27 { 28 "type": "shell", 29 "inline": [ 30 31 # 云主机运行的脚本信息 32 "sleep 30", 33 "sudo apt update", 34 "sudo apt install nginx -y" 35 ] 36 } 37 ] 38}
云主机/地域/可用区/机型与规格
基础镜像: 能够是京东云官方提供的 Centos/Ubuntu,也能够是你的私人镜像,将它的ID填写在这里便可。
子网信息: 能够为空,若是为空的话,咱们会为你建立一个临时的子网。
登陆密码: 在这里咱们选择使用密码来登陆,在这儿还有另外一个示例,会告诉用户如何使用秘钥的方式来建立云主机镜像。
使用配置文件开始建立镜像
1bash 2~ $ packer build jdcloud.json 3 4==> jdcloud: Validating parameters... 5 jdcloud: validating your subnet:subnet-xxx 6 jdcloud: subnet found: Packer 测试子网 7 jdcloud: validating your base image:img-1iubdz7gzu 8 jdcloud: image found:Ubuntu 16.04 64位 9 jdcloud: Password detected, we are going to login with this password :) 10 11==> jdcloud: Creating instances 12 jdcloud: Creating public-ip 13 jdcloud: Associating public-ip with instance 14 jdcloud: Hi, we have created the instance, its name=packer_demo , its id=i-xxxx, and its eip=116.196.xx.xx :) 15 16==> jdcloud: Using ssh communicator to connect: 116.196.xx.xx 17==> jdcloud: Waiting for SSH to become available... 18==> jdcloud: Connected to SSH! 19==> jdcloud: Provisioning with shell script 20==> jdcloud: Stopping this instance 21 jdcloud: Instance has been stopped :) 22==> jdcloud: Creating images 23Build 'jdcloud' finished. 24 25 26==> Builds finished. The artifacts of successful builds are: 27--> jdcloud: A VMImage was created: img-riggr2xxx
在上面的建立过程当中, 咱们能够看到, 镜像的建立过程大致能够分红四个阶段:
img-riggr2xxx
。建立出来的新镜像,用户能够拿来手动建立云主机,也能够经过 terraform 自动建立云主机。
更进一步地,若是考虑到服务的多地域性,用户可能会但愿为每一个地域都建立出各自的专属镜像。这个时候,只须要在配置文件后面追加出其他地域的配置信息,Packer 就能在一次并发内完成全部镜像的建立,很大程度的提高了镜像建立的效率。
Packer 以其 "Infrastructure as Code" 的工做方式,在帮助用户下降失误故障风险的同时,提升了持续交付效率和业务可用性,解决了传统镜像建立方式在跨云平台环境下的诸多弊端。
看了这篇文章,您是否对Packer有一个全面的了解呢?若是您想了解更多关于京东云翼的相关讯息,请点击“这里”,进入京东云官网了解相关产品噢~
欢迎点击“京东云”了解更多精彩内容