
关键词:HashiCorp、Packer
HashiCorp 是一家国外基础软件提供商,主要开发支持多云部署的开源工具,旗下有6 款主流软件,Terraform、Consul、Vagrant、Nomad、Vault、Packer
Packer顾名思义是打包东西的,主要是打包创建镜像(先基于模板创建一台机器,模板在.json格式的配置文件中指定,然后以这个机器为基础自动化创建自定义镜像)
Packer官网: https://developer.hashicorp.com/packer/downloads Packer官网文档: https://developer.hashicorp.com/packer/plugins/builders/tencentcloud
以Windows下的packer程序为例:
1、下载packer压缩包并解压,直接用解压出来的可执行文件指定配置文件来打包镜像即可

2、packer.exe build config.json

.json示例(源windows镜像我已集成cygin ssh ,ssh端口是36000,所以选了"communicator":"ssh",尾部的provisioners是powershell,之所以能执行是因为windows本身支持powershell,由于packer不支持userdata,于是通过provisioners执行powershell脚本来充当userdata的功能)
{
"variables": {
"secret_id": "你的secret_id",
"secret_key": "你的secret_key"
},
"builders": [
{
"type": "tencentcloud-cvm",
"secret_id": "你的secret_id",
"secret_key": "你的secret_key",
"region": "ap-shanghai",
"zone": "ap-shanghai-4",
"instance_type": "S5.MEDIUM4",
"source_image_id": "img-g26ukn4h",
"disk_size": 40,
"vpc_id": "vpc-dvnmxoki",
"subnet_id": "subnet-5gtwidoz",
"communicator": "ssh",
"ssh_port": 36000,
"ssh_username": "Administrator",
"ssh_password": "你的管理员密码",
"ssh_timeout": "10m",
"image_name": "PackerTest-shawyang-CC",
"disk_type": "CLOUD_PREMIUM",
"security_group_id": "sg-0hpj3t5w",
"packer_debug": true,
"associate_public_ip_address": true,
"run_tags": {
"good": "luck"
}
}],
"provisioners": [{
"type": "powershell",
"inline": ["mkdir C:\\shawyang_test -force;wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/packer.ps1 -Outfile c:\\shawyang_test\\packer.ps1;powershell -file c:\\shawyang_test\\packer.ps1 2>&1 >$null"]
}]
}执行packer build操作的客户端机器能否ssh远程上用来创建镜像的模板机器(会自动创建)很重要,如果不能就会报ssh超时的问题
比如模板里没有附加公网IP,并且创建的机器指定到别的VPC了,导致执行packer build操作的客户端机器跟目标机器内外网不通,从而ssh超时,继而导致打包镜像失败
1.腾讯云不支持userdata(阿里云支持)
2.不支持WinRM(OS内部已经启用WinRM,无济于事),主要是腾讯云packer没兼容WinRM
3.如果用Packer创建Windows镜像,communicator不能选winrm①如果用windows公共镜像创建自定义镜像,communicator必须是none且json尾部不能有provisioners模块,并且虽然communicator不是winrm,用户名和密码仍然得选winrm_username和winrm_password

.json示例
{
"variables": {
"secret_id": "你的secret_id",
"secret_key": "你的secret_key"
},
"builders": [
{
"type": "tencentcloud-cvm",
"secret_id": "你的secret_id",
"secret_key": "你的secret_key",
"region": "ap-shanghai",
"zone": "ap-shanghai-4",
"instance_type": "S5.MEDIUM4",
"source_image_id": "img-mmy6qctz",
"disk_size": 40,
"vpc_id": "vpc-dvnmxoki",
"subnet_id": "subnet-5gtwidoz",
"communicator": "none",
"winrm_username": "Administrator",
"winrm_password": "你的管理员密码",
"image_name": "PackerTest-shawyang-AA",
"disk_type": "CLOUD_PREMIUM",
"security_group_id": "sg-0hpj3t5w",
"packer_debug": true,
"associate_public_ip_address": true,
"run_tags": {
"good": "luck"
}
}
]
}
②如果用已经集成好ssh服务(比如通过cygwin配置了ssh服务)的windows自定义镜像进一步创建新的自定义镜像,communicator可以是none(是none的时候,json尾部不能有provisioners模块),也可以选ssh,此时ssh相关其他主要配置项要齐全且尾部provisioners模块可以执行powershell脚本来充当userdata的功能

.json示例(源windows镜像我已集成cygin ssh ,ssh端口是36000,所以选了"communicator":"ssh",尾部的provisioners是powershell,之所以能执行是因为windows本身支持powershell,由于腾讯云packer不支持userdata,于是通过provisioners执行powershell脚本来充当userdata的功能)
{
"variables": {
"secret_id": "你的secret_id",
"secret_key": "你的secret_key"
},
"builders": [
{
"type": "tencentcloud-cvm",
"secret_id": "你的secret_id",
"secret_key": "你的secret_key",
"region": "ap-shanghai",
"zone": "ap-shanghai-4",
"instance_type": "S5.MEDIUM4",
"source_image_id": "img-g26ukn4h",
"disk_size": 40,
"vpc_id": "vpc-dvnmxoki",
"subnet_id": "subnet-5gtwidoz",
"communicator": "ssh",
"ssh_port": 36000,
"ssh_username": "Administrator",
"ssh_password": "你的管理员密码",
"ssh_timeout": "10m",
"image_name": "PackerTest-shawyang-CC",
"disk_type": "CLOUD_PREMIUM",
"security_group_id": "sg-0hpj3t5w",
"packer_debug": true,
"associate_public_ip_address": true,
"run_tags": {
"good": "luck"
}
}],
"provisioners": [{
"type": "powershell",
"inline": ["mkdir C:\\shawyang_test -force;wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/packer.ps1 -Outfile c:\\shawyang_test\\packer.ps1;powershell -file c:\\shawyang_test\\packer.ps1 2>&1 >$null"]
}]
}三、建议
阿里云官网有"使用Packer创建自定义镜像"的文档(虽有,但并不详细),腾讯云没有Packer文档
阿里云Packer文档:
https://help.aliyun.com/document_detail/60822.htm
Packer官网文档:
https://github.com/hashicorp/packer-plugin-alicloud/tree/main/builder/examples/basic
目前最有指导性的还是我自己试错后整理的这篇文档
Packer里面腾讯云打包镜像那部分的内容貌似无人维护,且部分主要功能不支持(userdata、winrm),建议腾讯云官网挂文档给出linux、windows用Packer打包镜像的例子,或者发声明下掉Packer,或者安排人完善

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。