Packer brings pre-baked images into the modern age,
unlocking untapped potential and opening new opportunities.
持续交付 - Packer&Chef&Puppet:Packer 因其自身体积轻量的特点, 使其被直接放到流水线里并成为流水线的一环也变成了一种可能的选择: 在 Chef/Puppet 的配置产生变动的时候触发流水线, 下一环 Packer 负责为新配置生成镜像, 这些镜像可以立刻投入测试, 测试通过后即可部署到生产环境。
混合云的使用:Packer 的一份配置可以为多个云服务商生成镜像, 假设你使用 VMWare 作为开发环境, AWS 作为生产环境, 那么 Packer 能够并发生成两份镜像用于两家云服务商, 从而最大程度地减少两个镜像之间的区别。
对于临时产物的处理上:Packer 能为你创建一些临时资源,比如在没有指定子网的情况下,Packer 能够帮你创建一个临时子网,用于安放云主机。并且在出现错误的时候终止任务,同时自动清理中间产物。而传统方式则需要自己先创建一个临时子网,并且出现错误时还需要手动清理。 在问题的追溯与定位上:在 Packer 上所有变化都是基于代码的,而代码是可以追溯的,方便快速定位问题并回滚。而在传统方式中,考虑到手动操作的过程可能涉及多人,完整地追出问题并不是一件容易的事儿。 在便捷性与效率上:由于 Packer 上的操作基于代码,变更的时候操作会非常快;而手动操作的效率则取决于个人的手速了。 在操作的可重复性上:Packer 依据配置文件,随时快速重新操作;而在全手动的情况下, 想要完整的复现一次所有操作并不容易。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}
服务商与身份信息 : 服务提供商-jdcloud, 其次你需要提供你的AccessKey/SecretKey 向我们说明你的身份。
云主机规格信息 :
这里包含:
运行命令: 在这里作为示例,我们选择安装一个 nginx。
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
阶段-1 参数验证阶段:在这个阶段里我们将要去验证参数的有效性,包括是否指定子网,需不需要创建临时子网,给出的运行镜像是否存在,是否指定使用密码登录或指定密钥登录。 阶段-2 创建云主机阶段:在这个阶段我们按照给出的云主机规格创建出一台云主机,并创建出一个公网IP, 用于稍后登录这台云主机执行命令。 阶段-3 执行命令阶段:命令的输出都会打印在这里。 阶段-4 创建镜像阶段:Packer 会将这台云主机创建出一个镜像,并保存到镜像仓库里, 在上面我们可以看到对应的镜像ID为: img-riggr2xxx
。
Packer 以其 "Infrastructure as Code" 的工作方式,在帮助用户降低失误故障风险的同时,提高了持续交付效率和业务可用性,解决了传统镜像创建方式在跨云平台环境下的诸多弊端。
看了这篇文章,您是否对Packer有一个全面的了解呢?如果您想了解更多关于京东云翼的相关讯息,请点击“这里”,进入京东云官网了解相关产品噢~