首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Packer 创建镜像

使用 Packer 创建镜像

原创
作者头像
Windows技术交流
修改2024-12-04 14:21:32
修改2024-12-04 14:21:32
1.2K00
代码可运行
举报
文章被收录于专栏:Windows技术交流Windows技术交流
运行总次数:0
代码可运行

一、Packer简介

关键词: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的功能)

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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制作镜像的注意事项,如果选了"communicator":"ssh"

执行packer build操作的客户端机器能否ssh远程上用来创建镜像的模板机器(会自动创建)很重要,如果不能就会报ssh超时的问题

比如模板里没有附加公网IP,并且创建的机器指定到别的VPC了,导致执行packer build操作的客户端机器跟目标机器内外网不通,从而ssh超时,继而导致打包镜像失败

二、腾讯云Windows版Packer注意事项

代码语言:javascript
代码运行次数:0
运行
复制
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示例

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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的功能)

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Packer简介
    • 用packer制作镜像的注意事项,如果选了"communicator":"ssh"
  • 二、腾讯云Windows版Packer注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档