– 制作过程会消耗一定计费资源,主要涉及ECS服务器、EVS云硬盘、弹性IP及 带宽和IMS镜像。正常场景制作成功或者失败后会自动释放。但制作完成
– ECS执行机:一台ECS x86服务器作为Linux执行机,建议选择CentOS7操作系 统并绑定EIP支持访问公网,便于后续安装Packer工具。
– 认证凭据:制作镜像需要获取具有相关权限用户或者租户的AK/SK认证凭 据,请提前获取,详情请参考IAM 如何获取访问密钥AK/SK。
– 安全组:由于Packer通过创建临时ECS服务器并使用秘钥对SSH登录,需要提 前确保安全组放开TCP:22端口通道。详情请参考安全组配置示例。
制作镜像
步骤1 登录ECS执行机,下载cce-image-builder并解压。
wget https://cce-north-4.obs.cn-north-4.myhuaweicloud.com/cce-image-builder/cce-image-builder.tgz tar zvxf cce-image-builder.tgz
cd cce-image-builder/
说明
cce-image-builder主要包含
● turbo-node.pkr.hcl 镜像制作使用的Packer配置模板
● scripts/* 模板预置的CCE镜像制作。建议不要修改,避免影响最终镜像可用性。
● user-scripts/* 模板预置的自定义包脚本目录。以example.sh为例,制作自定义镜像时将自动 上传至临时服务器并执行。
● user-packages/* 模板预置的自定义包目录。制作自定义镜像时,以example.package为例,
制作自定义镜像时将自动上传至临时服务器/tmp/example.package。
步骤2 安装HashiCorp Packer,建议参考官方指导执行。
说明
Packer版本要求:packer >= 1.7.2
以CentOS 7执行机为例,执行如下命令自动安装packer(以官方指导为准):
# 配置Packer的yum源后安装Packer sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install packer
# 配置alias用于避免OS中同名packer二进制影响,并检查packer版本 rpm -q packer
alias packer=$(rpm -ql packer) packer -v
步骤3 获取cce-image-builder/turbo-node.pkr.hcl所需的参数,并通过环境变量配置。
说明
turbo-node.pkr.hcl文件是packer的配置模板,定义了完整的镜像构建过程。更详细说明请参考 Packer官网文档
● variables/variable
变量定义。turbo-node.pkr.hcl中主要定义了构建所需填写的参数,支持用户按需修改或填 写,参数定义参见 表1。
● packer
packer模块定义。其中required_plugins定义了Packer的插件依赖,包括插件来源与插件版 本范围,packer init时会自动下载插件并初始化,无需用户手动填写。
packer {
required_plugins { huaweicloud = { version = ">= 0.4.0"
source = "github.com/huaweicloud/huaweicloud"
} }}
● source
source定义。通过引用了上述定义的变量,自动配置了插件创建ECS所需的参数,无需用户
sources = ["source.huaweicloud-ecs.builder"]
provisioner "file" {
source = "<source file path>"
destination = "<destination file path>"
}
provisioner "shell" { scripts = [
"<source script file: step1.sh>", "<source script file: step2.sh>"
] }
provisioner "shell" { inline = ["echo foo"]
}}
export REGION_NAME=xxx export IAM_ACCESS_KEY=xxx export IAM_SECRET_KEY=xxx export ECS_VPC_ID=xxx export ECS_NETWORK_ID=xxx export ECS_SECGRP_ID=xxx export CCE_SOURCE_IMAGE_ID=xxx
表2-6 variables 配置参数说明
参数 参数说明 备注
REGION_NAME 所属项目区域。 请在我的凭证下查看所属区域。
IAM_ACCESS_K
EY 用户认证凭据Access Key。 建议临时申请,制作完成后删除。
IAM_SECRET_K
EY 用户认证凭据Secret Key。 建议临时申请,制作完成后删除。
ECS_VPC_ID 虚拟私有云ID。 临时ECS服务器使用,需要与执行 机一致。
MAGE_ID CCE服务的最新节点镜像
ID。 /
备注:其他参数通常无需配置,默认即可。如需修改,可以参考turbo-node.pkr.hcl中 variable定义中的description描述通过环境变量配置。
以ECS规格变量ecs_az为例,未指定时选择随机可用区,如需指定可以按照如下格式通 过环境变量配置。其他参数类似。
# export PKR_VAR_<variable name>=<variable value>
export PKR_VAR_ecs_az=xxx
步骤4 参考步骤1中样例说明,定制修改cce-image-builder下user-scripts,user-packages目 录,并修改或添加turbo-node.pkr.hcl对应的file和shell模块配置实现。
步骤5 定制修改结束后,执行make image并等待镜像制作完成,通常需要耗时3~5min。
说明
构建封装脚本packer.sh中,
● 隐私和安全考虑,默认关闭了packer自动访问hashicorp.com检查版本的功能。
export CHECKPOINT_DISABLE=false
● 构建过程可见性与可追溯考虑,默认开启了debugging详细日志,并指定了本地packer构建 日志packer_{timestamp}.log以在构建时打包至镜像/var/log/目录。如涉及敏感信息,移除 相关逻辑即可。
export PACKER_LOG=1
export PACKER_BUILD_TIMESTAMP=$(date +%Y%m%d%H%M%S) export PACKER_LOG_PATH="packer_$PACKER_BUILD_TIMESTAMP.log"
更多packer配置详细参见官网说明。
执行结束日志:
如果出现packer插件报错的情况,请参见常见问题处理。
步骤6 清理执行机上构建文件,主要涉及turbo-node.pkr.hcl中认证凭据清理。
● 建议直接释放执行机,如认证凭据为临时申请建议直接删除;
● 如需自动构建,建议自行在配置文件中添加post-processor实现相关功能。
步骤7 镜像制作完成后,进入IMS镜像服务控制台,找制作好的镜像(默认名称为image-by- packer-xxxxxx,xxxxxx为制作时间),进入镜像详情页,删除如下3个标签(cce-created-at、cce-created-by、cce-created-from)。
另外还可以修改镜像名称。
CCE节点创建或者节点池创建时,在私有镜像中选择此镜像创建即可。
----结束