About Packer
Packer (https://www.packer.io/)是Hashicorp 组织旗下的一款DevOps运维工具,可以看下整个软件交付周期所处的位置:
Packer是一款面向云生态非常便利的镜像管理利器,通过一个模板配置可以快速的创建镜像。
当前支持阿里云、AWS、Azure、Vmware、Google Cloud Platform、DigitalOcean 等多个云厂商平台。通过Packer,可以在创建镜像过程中,执行相应的脚本文件,或者安装目标软件,执行配置系统等操作,可提升系统应用交付效能。
Install Packer
Packer可以安装在多个系统平台上
通过https://www.packer.io/downloads.html 可以下载相应的可执行二进制包,配置好相应的PATH则可使用Packer Command,如下:
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:
注意事项:上面配置的sleep 30非常关键,因为在创建镜像的过程中,是构建了完整的VM实例,这中间需要通过SSH上去执行指令的过程中,可能系统尚未完成整改初始化过程,所以需要做一个30秒的时间等待。
Parallel Builds
Packer 同时支持多平台创建一个镜像,如下在AWS、DigitalOcean 创建镜像,只不过这里需要制定好各自平台的AK、API-Token:
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:
如上可以看到该过程完成了资源的创建和释放的过程,执行后到阿里云管控控制台查看ECS自定义镜像: