You need to enable JavaScript to run this app.
导航

基于 Docker 制作自定义镜像

最近更新时间2023.11.03 10:10:25

首次发布时间2023.04.13 12:02:23

容器服务支持使用基于 veLinux 的自定义镜像为节点安装操作系统,本文为您介绍如何使用docker run方式打包和预热自定义镜像。

说明

邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。

背景信息

本方式已经对自定义镜像打包过程进行产品化封装,使用docker run命令即可自动进行自定义镜像的打包和预热,命令执行过程将自动完成以下步骤:

  1. 系统根据所选规格临时新建一台 veLinux 操作系统的 ECS、一个 EIP、一个 VPC 及其子网,其中 ECS 和 EIP 将以按量计费方式进行收费。

  2. 执行自定义镜像预热,从镜像仓库拉取待打包镜像,以及 VKE 本身的容器镜像。

  3. 打包自定义镜像,并检查自定义镜像的可用性。

  4. 将已经打包并检查无误的镜像,导入 ECS 的镜像中心。

  5. 删除临时创建的所有资源,并以按量计费方式结算 ECS 和 EIP 的费用。

前提条件

  • 已经在本地或云服务器中安装 Docker,且确保可以连接到互联网。详细操作参见:官方文档

  • 已经为当前账号添加 自定义镜像预热 API 功能的白名单权限,可 提交工单 申请。

  • 已经获取可用的火山引擎账号 AK、SK,可前往 API 访问密钥 获取。

  • (可选)若使用企业版镜像仓库,确保已经准备待打包的镜像,并获取镜像地址、镜像仓库用户名和镜像仓库密码。

  • (可选)若使用企业版镜像仓库,确保制作镜像的 ECS 实例与镜像仓库网络互通,可使用公网连接或指定 VPC。

    • 若使用公有网络,要求镜像仓库开启公网访问,操作方法参见:开启公网访问。另外,公有网络将以按量计费方式进行收费。
    • 若指定 VPC,要求同时在镜像仓库的访问控制中添加此 VPC,操作方法参见:连通本账号 VPC
  • (可选)若使用子用户打包自定义镜像,确保已经具备基础设施 ECS、EIP、VPC 相关的 IAM 权限,包含以下 Action:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunInstances",
                "ecs:StopInstance",
                "ecs:DeleteInstance",
                "ecs:DescribeInstances",
                "ecs:CreateImage",
                "ecs:PreheatImage",
                "ecs:DescribeImages",
                "ecs:DescribeTasks",
                "vpc:CreateVpc",
                "vpc:DeleteVpc",
                "vpc:DescribeVpcs",
                "vpc:CreateSubnet",
                "vpc:DeleteSubnet",
                "vpc:DescribeSubnets",
                "vpc:DescribeSecurityGroups",
                "vpc:AllocateEipAddress",
                "vpc:AssociateEipAddress",
                "vpc:DescribeEipAddresses",
                "vpc:DisassociateEipAddress",
                "vpc:ReleaseEipAddress"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

使用限制

  • 目前仅支持基于容器服务基础镜像 veLinux 制作自定义镜像。

  • 自定义镜像打包过程会临时创建一台 ECS 和一个 EIP,待所有流程结束后自动删除并以按量计费方式结算费用,请确保账号余额充足,否则可能导致镜像打包失败。

操作说明

满足以上前提条件后,即可在已经安装 Docker 的本地或云服务器中,使用docker run方式进行自定义镜像的打包和预热。其中,所有参数均通过环境变量(ENV)来配置。

使用示例

  • 示例一:仅包含必选参数的简单示例
docker run --rm \
        -e VOLC_AK="<AK>" \ 
        -e VOLC_SK="<SK>" \ 
        -e TAILOR_SPEC="ecs.xxx.large" \ 
        vke-cn-beijing.cr.volces.com/vke/private-image-packer:v1.0.7

说明

示例命令末尾的\是 Shell 命令中的换行符,若客户端无法识别,需删除此符号,将命令整理成一行。

  • 示例二:包含所有参数的详细示例
docker run --rm \
        -e VOLC_AK="<AK>" \ 
        -e VOLC_SK="<SK>" \ 
        -e REGION="cn-shanghai" \
        -e ZONE="cn-shanghai-a" \
        -e TAILOR_IMAGE_NAME="my-image-name" \
        -e TAILOR_SPEC="ecs.xxx.large" \ 
        -e TAILOR_DISK_SIZE="60" \
        -e TAILOR_COMPAT="false"  \
        -e IMAGES="cr-helm2-cn-beijing.cr.volces.com/****/busyxxx:latest,cr-helm2-cn-beijing.cr.volces.com/****/3gixxx:latest" \
        -e REGISTRY_USERNAME="paas2b_prod@2100****" \
        -e REGISTRY_PASSWORD="password123" \
        -e TAILOR_PASSWORD="password"\
        -e TAILOR_VPC="vpc-13fawddpwxxxxxx6nu4g2y8bt"\
        -e TAILOR_SUBNET="subnet-mj92ij8xxxxxxsmt1arvwrtw"\
        -e TAILOR_KERNEL="5.4"\
        -e PREHEAT_DISABLED="true"\
        vke-cn-beijing.cr.volces.com/vke/private-image-packer:v1.0.7

参数说明

ENV 名称是否必选描述示例

VOLC_AK

火山引擎账号的 AK,前往 API 访问密钥 获取。

AKLTN2M1NTRjODNkYmI2NGEzNWFiYTk3ZTZhY********

VOLC_SK火山引擎账号的 SK,前往 API 访问密钥 获取。WkRVek5EWmtaalU0Wm1RMU5ETTJOamcyWlRoaU5EaGlObVJq****
REGION地域,若留空将默认配置cn-beijing。容器服务支持的地域和可用区列表参见:地域和可用区cn-beijing
ZONE可用区,若留空将默认配置{REGION}-acn-beijing-a

TAILOR_SPEC

指定需要构建镜像的机型,控制台中可选的机型均可使用,详细清单参见:ECS 实例规格

说明

ECS 实例规格并非通用,请根据实际场景选择,建议制作镜像的 ECS 与目标使用的 ECS 保持一致。例如:若期望打包用于 GPU 场景的自定义镜像,则需要使用 GPU 实例规格,否则会导致驱动缺失,不可使用。

ecs.xxx.large

TAILOR_DISK_SIZE制作自定义镜像时使用的系统盘大小,若留空将默认配置40,即 40 GiB。100

TAILOR_IMAGE_NAME

自定义镜像的名称,若留空将自动生成velinux开头的名称。

velinux-example

TAILOR_COMPAT

是否使用 veLinux CentOS 兼容版。

  • false:默认值,不使用 veLinux CentOS 兼容版。

  • true:使用 veLinux CentOS 兼容版。

false

REGISTRY_USERNAME

待拉取镜像所属私有镜像仓库使用的用户名,格式通常为火山账号@账号 ID,根据实际情况填写即可。

说明

若留空将默认以公开身份拉取镜像,此参数需要与 REGISTRY_PASSWORD共同使用。

user@2100******

REGISTRY_PASSWORD

待拉取镜像所属私有镜像仓库用户名对应的密码。

说明

若留空将默认以公开身份拉取镜像,此参数需要与 REGISTRY_USERNAME共同使用。

password@123

IMAGES

待拉取镜像的列表,若留空将不拉取用户的容器镜像。

说明

支持拉取多个镜像,以英文逗号(,)分隔。

cr-helm2-cn-beijing.cr.volces.com/****/busy*****:latest,cr-helm2-cn-beijing.cr.volces.com/*****/3gixxx:latest

TAILOR_PASSWORD创建 ECS 实例时所使用的密码。Password

TAILOR_VPC

在指定 VPC 内创建 ECS 实例,必须与 TAILOR_SUBNET 一起指定。

说明

若指定 VPC 及其子网,请确保子网的安全组在入方向规则中放开 22 端口。

vpc-13fawddpwxxxxxx6nu4g2y8bt

TAILOR_SUBNET在指定子网内创建 ECS 实例,必须与 TAILOR_VPC 一起指定。subnet-mj92ij8xxxxxxsmt1arvwrtw
TAILOR_KERNEL指定镜像所使用的内核版本,可选值:5.4、5.10,默认为 5.4。5.4
PREHEAT_DISABLED只制作自定义镜像但不对镜像做预热,可选值:true、false,默认为 true。true

private-image-packer 更新记录

版本号版本状态更新时间更新记录更新影响

v1.0.7

维护中

2023.10

优化镜像预热的逻辑,同时支持 ECS 的镜像预热 和 EBS 的快照预热两种方式,快照预热时默认保留时间为 365 天。

v1.0.6

停止维护

2023.9

  • 【不兼容】环境变量 PREHEATING_DISABLED 重命名为 。PREHEAT_DISABLED,并将默认值从 false 修改为 true

  • 在 ECS 中拉取容器镜像的方式,从 crictl 修改为 ctr。

不兼容变更,需将 PREHEATING_DISABLED 调整为 PREHEAT_DISABLED

v1.0.5

停止维护

2023.8

  • 新增环境变量 TAILOR_KERNEL,指定内核版本。

  • 新增环境变量 TAILOR_PASSWORD,指定 ECS 的密码。

  • 新增环境变量 TAILOR_VPCTAILOR_SUBNET,指定 ECS 的 VPC、子网。

  • 新增环境变量 PREHEATING_DISABLED,只制作自定义镜像但不对镜像做预热。

v1.0.4停止维护2023.6新增 TAILOR_COMPAT 环境变量,支持 veLinux CentOS 兼容版。
v1.0.3停止维护2023.4【不兼容】修复环境变量 Zone 的格式,从 a 修改为 {REGION}-a,例如:cn-beijing-a。详细地域和可用区支持情况参见:地域和可用区不兼容变更,需调整 Zone 环境变量。
v1.0.2停止维护2023.4修复广州地域执行报错的问题。
v1.0.1停止维护2023.4预热镜像时,新增可用区校验。
v1.0.0停止维护2023.3private-image-packer 首次正式发布。

后续操作

打包过程故障处理

docker run命令执行过程中报错中断自定义镜像打包,需要根据报错提示进行处理,然后重新执行命令。可能存在的错误包括:

  • docker run 命令错误:命令参数不符合语法定义、缺少可用的参数值等。

  • 自定义镜像检查不通过:操作系统与内核版本、systemd 等基础组件版本、cloud-init 状态、DNS 配置、NTP 状态、atop/proxima/unscd 等组件版本、文件系统挂载状态、网卡名匹配、系统启动参数等检查不通过。

查看自定义镜像

docker run命令执行成功后,打包好的自定义镜像将自动上传到 ECS 的镜像中心。

alt

使用自定义镜像

创建集群、创建节点池或添加已有节点时,即可选择使用已经打包并上传到镜像中心的自定义镜像。详细操作参见:创建集群添加已有节点创建节点池

alt