すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:スケーリング最適化用のカスタムイメージ

最終更新日:Jun 19, 2026

Alicloud Image Builder でカスタム OS イメージを構築し、Container Service for Kubernetes (ACK) ノードプールのノードプロビジョニングを高速化します。

前提条件

カスタムイメージを使用したスケーリング

ACK のノードプールは、Alibaba Cloud Linux や CentOS などの組み込み OS イメージによる自動スケーリングをサポートしており、ほとんどのユースケースをカバーします。事前インストール済みソフトウェアや高性能な構成が必要なシナリオでは、Alicloud Image Builder を使用してカスタム OS イメージを構築します。

イメージのビルドタスクを Job または CronJob としてクラスターに送信します。

ACK Job を使用したカスタムイメージの構築

次の例では、build-config という名前の ConfigMap と image-builder という名前の Job を使用します。

手順1:ビルドパラメーターの設定

build-config という名前の ConfigMap を作成して、イメージビルドパラメーターを設定します。

  1. build-config.yaml という名前のファイルを作成し、次の YAML コンテンツを記述します。

    詳細の表示

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
    
        {
          "variables": {
            "image_name": "ack-optimized_image-1.30-{{timestamp}}",
            "source_image": <source_image>,
            "instance_type": <instance_type>,
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "system_disk_mapping": {    
                        "disk_size": 120
                        },   # イメージのシステムディスクサイズを GB 単位で指定します。デフォルトは 40 GB です。
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              "vpc_id": "",  # vpc_id を指定しない場合、一時的な仮想プライベートクラウド (VPC) が作成され、完了後に自動的に削除されます。
              "vswitch_id": "",  # vswitch_id を指定しない場合、一時的な vSwitch が作成され、完了後に自動的に削除されます。
              "security_group_id": "",   # security_group_id を指定しない場合、一時的なセキュリティグループが作成され、完了後に自動的に削除されます。
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-all.sh",    # Alibaba Cloud Linux 2 イメージにのみ適用されます。
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",    # コンテナランタイムを指定します。
             "export RUNTIME_VERSION=1.6.28",
             "export SKIP_SECURITY_FIX=true",
             "export KUBE_VERSION=1.30.1-aliyun.1",
             "export OS_ARCH=amd64",    # 要件に応じて amd64 または arm64 を指定します。
             "bash /root/ack-optimized-os-all.sh"
          ]
          }]
        }

    以下の表に、YAML パラメーターを示します。

    表 1. Alicloud Image Builder 設定ファイルのパラメーター

    パラメーター

    説明

    variables{"<variable1>":"<value>"}

    variables{"access_key":"{{env ALICLOUD_ACCESS_KEY}}"}

    Alicloud Image Builder の variables です。

    説明

    設定ファイルに access_keysecret_key などの機密情報をハードコーディングすると、セキュリティリスクが生じます。実行時に値を受け取る変数として定義してください。

    builders{"type":"<value>"}

    builders{"type":"alicloud-ecs"}

    イメージビルダー (builders) です。typealicloud-ecs の場合、一時的な ECS インスタンスが作成されてイメージがビルドされ、その後解放されます。

    provisioners{"type":"<value>"}

    provisioners{"type":"shell"}

    一時的なインスタンスでの操作を定義するイメージプロビジョナー (provisioners) です。typeshell の場合、シェルスクリプトがインスタンス上で自動的に実行されます。たとえば、yum install redis.x86_64 -y を実行すると、Redis がインストールされます。

    プロビジョナーの設定」をご参照ください。

    表 2. イメージビルドパラメーター

    パラメーター

    説明

    必須

    access_key

    yourAccessKeyID

    AccessKey ID です。詳細については、「アクセスキーペアの取得」をご参照ください。

    はい

    secret_key

    yourAccessKeySecret

    AccessKey Secret です。

    はい

    region

    cn-beijing

    カスタムイメージのリージョンです。

    はい

    image_name

    ack-custom_image

    カスタムイメージの名前です。既存のイメージの中で一意である必要があります。

    はい

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

    OS が一致する Alibaba Cloud パブリックイメージ ID です。詳細については、「ACK でサポートされている OS イメージ」をご参照ください。

    はい

    instance_type

    ecs.c6.xlarge

    一時的なビルドインスタンスの ECS インスタンスタイプです。GPU イメージの場合は、GPU 高速化タイプを指定してください。

    はい

    RUNTIME

    containerd

    コンテナランタイムです。有効な値: docker および containerd

    はい

    RUNTIME_VERSION

    1.6.28

    • コンテナランタイムが docker の場合、デフォルトの RUNTIME_VERSION は 19.03.15 です。

    • コンテナランタイムが containerd の場合、デフォルトの RUNTIME_VERSION は 1.6.20 です。

    はい

    SKIP_SECURITY_FIX

    true

    セキュリティ更新をスキップするかどうかを指定します。

    はい

    KUBE_VERSION

    1.30.1-aliyun.1

    クラスターのバージョンです。

    はい

    PRESET_GPU

    true

    起動を高速化するために GPU ドライバーをプリインストールするかどうかを指定します。

    いいえ

    NVIDIA_DRIVER_VERSION

    460.91.03

    プリインストールする GPU ドライバーのバージョンです。デフォルト値:460.91.03。

    いいえ

    OS_ARCH

    amd64

    CPU アーキテクチャです。有効な値: amd64 および arm64

    はい

    MOUNT_RUNTIME_DATADISK

    true

    カスタムイメージにアプリケーションイメージがキャッシュされており、使用中にデータディスクを ECS インスタンスにマウントする必要がある場合は、true に設定してください。

    いいえ

    重要
    • カスタムイメージをノードプールに割り当てる前に、ノードプールの設定 (クラスターバージョン、リージョン、コンテナランタイム、GPU インスタンスタイプ) がイメージビルド設定と一致していることを確認してください。一致していない場合、ノードはクラスターに参加できません。

    • 検証するには、一致するパラメーターを持つ通常のノードプールにイメージを追加し、ワークロードが期待どおりに実行されることを確認してください。

  2. 作成した build-config.yaml ファイルを適用して、ConfigMap をクラスターにデプロイします。

    kubectl apply -f build-config.yaml

手順2:ビルド Job の作成

  1. 次のポリシーを使用して、必要な権限をアクセスキーペアに付与してください。

    詳細の表示

    {
      "Version": "1",
      "Statement": [
        {
          "Action": [
            "ecs:DeleteInstance",
            "ecs:StartInstance",
            "ecs:StopInstance",
            "ecs:DescribeInstances"
          ],
          "Resource": "*",
          "Effect": "Allow"
        },
        {
          "Action": [
            "ecs:CreateInstance",
            "ecs:DescribeImages",
            "ecs:CreateImage",
            "ecs:ModifyImageSharePermission",
            "ecs:CreateKeyPair",
            "ecs:DeleteKeyPairs",
            "ecs:DetachKeyPair",
            "ecs:AttachKeyPair",
            "ecs:CreateSecurityGroup",
            "ecs:DeleteSecurityGroup",
            "ecs:AuthorizeSecurityGroupEgress",
            "ecs:AuthorizeSecurityGroup",
            "ecs:CreateSnapshot",
            "ecs:AttachDisk",
            "ecs:DetachDisk",
            "ecs:DescribeDisks",
            "ecs:CreateDisk",
            "ecs:DeleteDisk",
            "ecs:CreateNetworkInterface",
            "ecs:DescribeNetworkInterfaces",
            "ecs:AttachNetworkInterface",
            "ecs:DetachNetworkInterface",
            "ecs:DeleteNetworkInterface",
            "ecs:DescribeInstanceAttribute"
          ],
          "Resource": "*",
          "Effect": "Allow"
        },
        {
          "Action": [
            "vpc:DescribeVpcs",
            "vpc:DescribeVSwitches",
            "vpc:AllocateEipAddress",
            "vpc:AssociateEipAddress",
            "vpc:UnassociateEipAddress",
            "vpc:DescribeEipAddresses",
            "vpc:ReleaseEipAddress",
            "vpc:CreateVpc",
            "vpc:DeleteVpc",
            "vpc:DescribeVpcs",
            "vpc:CreateVSwitch",
            "vpc:DeleteVSwitch",
            "vpc:DescribeVSwitches",
            "vpc:CreateRouteTable",
            "vpc:DeleteRouteTable",
            "vpc:DescribeRouteTables",
            "vpc:CreateNatGateway",
            "vpc:DeleteNatGateway",
            "vpc:DescribeNatGateways",
            "vpc:CreateSnatEntry",
            "vpc:DeleteSnatEntry",
            "vpc:DescribeSnatTableEntries"
          ],
          "Resource": "*",
          "Effect": "Allow"
        }
      ]
    }
  2. アクセスキーペアの Base64 エンコード文字列を生成してください。

    echo -n "yourAccessKeyID" | base64
    echo -n "yourAccessKeySecret" | base64
  3. 次の YAML を使用して、my-secret という名前の Secret を作成してください。

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
      namespace: default
    type: Opaque
    data:
      ALICLOUD_ACCESS_KEY: TFRI**************** # 前の手順で生成した Base64 エンコード文字列
      ALICLOUD_SECRET_KEY: a0zY****************
  4. build.yaml という名前のファイルに、次の YAML コンテンツを記述します。

    この Job は、source_image から一時的な ECS インスタンスを作成し、provisioners スクリプトを実行してから、カスタムイメージを作成して指定されたリージョンにプッシュします。

    詳細の表示

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: image-builder
      namespace: default
    spec:
      template:
        metadata:
          name: image-builder
        spec:
          containers:
            - name: image-builder
              image: "registry-cn-hangzhou.ack.aliyuncs.com/acs/image-builder:v3.3"
              imagePullPolicy: Always
              env:
                - name: ALICLOUD_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: my-secret
                      key: ALICLOUD_ACCESS_KEY
                - name: ALICLOUD_SECRET_KEY
                  valueFrom:
                    secretKeyRef:
                      name: my-secret
                      key: ALICLOUD_SECRET_KEY
                - name: ALICLOUD_REGION
                  value: cn-hangzhou
              command: ["packer"] 
              args: ["build", "/config/ack.json"]
              volumeMounts:
                - name: config
                  mountPath: /config
          volumes:
            - name: config
              configMap:
                name: build-config
                items:
                  - key: ack.json
                    path: ack.json
          restartPolicy: Never
  5. Job をデプロイして、イメージのビルドを開始してください。

    kubectl apply -f build.yaml

手順3: (オプション) ビルドログの表示

ビルドプロセスでは、パラメーターの検証、一時的なリソースの作成、ソフトウェアの事前インストール、クリーンアップなどの手順が記録されたログが生成されます。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [ジョブ] を選択します。

  3. Jobs のリストで、作成した Job を見つけます。アクション 列で 詳細 をクリックし、ログ タブをクリックしてビルドログを表示します。

プロビジョナーの設定

プロビジョナーは、実行中のマシンを OS イメージとしてキャプチャする前に、そのマシンにソフトウェアをインストールし、設定します。典型的なユースケースは次のとおりです:

  • ソフトウェアパッケージのインストール。

  • カーネルへのパッチ適用。

  • ユーザーの作成。

  • アプリケーションコードのダウンロード。

  • カスタム Alibaba Cloud Linux 3 イメージの構築。

シェルスクリプトの実行

  "provisioners": [{
      "type": "shell",
      "script": "script.sh"
  }]

Ansible プレイブックの実行

  "provisioners": [
    {
    "type": "ansible",
    "playbook_file": "./playbook.yml"
    }
  ]

CPFS クライアントのインストール

CPFS クライアントのインストールには多くのパッケージとオンザフライコンパイルが必要であり、時間がかかる場合があります。カスタムイメージを使用すると、大規模なインストールコストを削減できます。

詳細の表示

    {
      "variables": {
        "region": "{{env `ALICLOUD_REGION`}}",
        "image_name": "ack-custom_image",
        "source_image": "centos_7_04_64_20G_alibase_201701015.vhd",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "instance_type": "ecs.c6.xlarge",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
    "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
   "provisioners": [{
        "type": "shell",
        "inline": [
            "cd $HOME",
            "wget https://cpfs-client.oss-cn-beijing.aliyuncs.com/kernel/kernel-devel-`uname -r`.rpm",
            "rpm -ivh --replacefiles kernel-devel-`uname -r`.rpm"
        ]
      }
    ]
  }

Arm アーキテクチャ用のカスタムイメージの構築

詳細の表示

{
      "variables": {
        "region": "{{env `ALICLOUD_REGION`}}",
        "image_name": "ack-custom_image",
        "source_image": "aliyun_3_arm64_20G_alibase_20240528.vhd",
        "instance_type": "ecs.r8y.xlarge",   # Arm アーキテクチャのインスタンスタイプを指定します。
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
    "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "instance_type": "{{user `instance_type`}}",
          "ssh_username": "root",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
   "provisioners": [
        {
            "type": "file",
            "source": "scripts/ack-optimized-os-linux3-all.sh",
            "destination": "/root/"
        },
        {
            "type": "shell",
            "inline": [
                "export RUNTIME=containerd",
                "export RUNTIME_VERSION=2.1.6",
                "export SKIP_SECURITY_FIX=true",
                "export KUBE_VERSION=1.28.9-aliyun.1",
                "export OS_ARCH=arm64",
                "bash /root/ack-optimized-os-linux3-all.sh"
            ]
        }
      ]
    }

GPU ノード OS イメージの構築

重要

カスタム GPU イメージとカスタム CPU イメージは併用できません。

詳細の表示

{
      "variables": {
        "region": "{{env `ALICLOUD_REGION`}}",
        "image_name": "ack-custom_image",
        "source_image": "aliyun_2_1903_x64_20G_alibase_20221102.vhd",
        "instance_type": "ecs.gn6i-c4g1.xlarge",   # GPU ドライバーをプリインストールするには、このパラメーターを GPU 高速化インスタンスタイプに設定します。
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
    "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "instance_type": "{{user `instance_type`}}",
          "ssh_username": "root",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
   "provisioners": [
        {
            "type": "file",
            "source": "scripts/ack-optimized-os-all.sh",
            "destination": "/root/"
        },
        {
            "type": "shell",
            "inline": [
                "export RUNTIME=containerd",
                "export RUNTIME_VERSION=1.6.36",
                "export SKIP_SECURITY_FIX=true",
                "export PRESET_GPU=true",          # GPU ドライバーをプリインストールするには、PRESET_GPU を true に設定します。GPU ドライバーをプリインストールしたくない場合は、このパラメーターを空のままにするか、false に設定します。
                "export NVIDIA_DRIVER_VERSION=510.47.03",         # GPU ドライバーのバージョンを指定します。このパラメーターを空のままにすると、ビルダーはデフォルトでバージョン 460.91.03 をインストールします。
                "export KUBE_VERSION=1.22.3-aliyun.1",
                "export OS_ARCH=amd64",
                "bash /root/ack-optimized-os-all.sh"
            ]
        }
      ]
    }

アプリケーションイメージのキャッシュ

詳細の表示

{
      "variables": {
        "image_name": "ack-custom_image",
        "source_image": "aliyun_3_x64_20G_alibase_20240528.vhd",
        "instance_type": "ecs.c6.xlarge",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "region": "{{env `ALICLOUD_REGION`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
    "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "instance_type": "{{user `instance_type`}}",
          "ssh_username": "root",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
   "provisioners": [
        {
            "type": "file",
            "source": "scripts/ack-optimized-os-linux3-all.sh",
            "destination": "/root/"
        },
        {
            "type": "shell",
            "inline": [
                "export RUNTIME=containerd",
                "export RUNTIME_VERSION=2.1.6",
                "export SKIP_SECURITY_FIX=true",
                "export KUBE_VERSION=1.30.1-aliyun.1",
                "export OS_ARCH=amd64",
                "bash /root/ack-optimized-os-linux3-all.sh",
                "ctr -n k8s.io i pull registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/pause:3.9"        # アプリケーションイメージを OS イメージに組み込みます。
            ]
        }
      ]
    }

データディスクがアタッチされた ECS インスタンスをノードプールに追加すると、データディスクが初期化され、事前にキャッシュされたアプリケーションイメージが削除されます。これらを保持するには、カスタムイメージのビルド時にデータディスクスナップショットを作成します。

{
      "variables": {
        "image_name": "ack-custom_image",
        "source_image": "aliyun_3_x64_20G_alibase_20240528.vhd",
        "instance_type": "ecs.c6.xlarge",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "region": "{{env `ALICLOUD_REGION`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
    "builders": [
        {
          "type": "alicloud-ecs",
          "system_disk_mapping": {    
                    "disk_size": 120,
                    "disk_category": "cloud_essd"
                    },
          "image_disk_mappings": {
                    "disk_size": 40,
                    "disk_category": "cloud_auto"
                    },     # カスタムイメージを構築する際にデータディスクを設定します。イメージの構築後、プロセスは自動的にデータディスクのスナップショットを作成します。
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "instance_type": "{{user `instance_type`}}",
          "ssh_username": "root",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
   "provisioners": [
        {
            "type": "file",
            "source": "scripts/ack-optimized-os-linux3-all.sh",
            "destination": "/root/"
        },
        {
            "type": "shell",
            "inline": [
                "export RUNTIME=containerd",
                "export RUNTIME_VERSION=2.1.6",
                "export SKIP_SECURITY_FIX=true",
                "export KUBE_VERSION=1.30.1-aliyun.1",
                "export OS_ARCH=amd64",
                "export MOUNT_RUNTIME_DATADISK=true",     # コンテナランタイムのファイルパスをデータディスクにマウントします。
                "bash /root/ack-optimized-os-linux3-all.sh",
                "ctr -n k8s.io i pull registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/pause:3.9",        # アプリケーションイメージを OS イメージに組み込みます。
                "mv /var/lib/containerd /var/lib/container/containerd"       # イメージファイルをデータディスクに移動します。
            ]
        }
      ]
    }

ノードプールを設定する際、データディスクスナップショット付きのカスタムイメージを選択します。システムは、データディスクスナップショットが自動的にロードされることを通知します。ディスクタイプは ESSD AutoPL、容量は 120 GiB に設定され、バーストパフォーマンスとインスタンスに連動して解放のオプションがあります。ディスクは ext4 を使用してコンテナランタイム形式で初期化されます。データディスクの容量を変更した場合、ECS インスタンスの作成後にパーティションとファイルシステムを手動で拡張する必要があります。

image

プライベートレジストリからのプル (Docker)

docker login <image_address> -u user -p password
docker pull nginx

プライベートレジストリからのプル (containerd)

ctr -n k8s.io i pull --user=username:password nginx

ビルド中のプライベートレジストリからのプル

  1. Docker がインストールされた Linux マシンで、 docker login を実行して認証情報を生成します。

    docker login --username=zhongwei.***@aliyun-test.com --password xxxxxxxxxx registry.cn-beijing.aliyuncs.com

    docker login が成功すると、 /root/.docker ディレクトリに config.json が作成されます。96

  2. 生成された config.json から ConfigMap を作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: docker-config
    data:
      config.json: |-
    
        {
            "auths": {
                    "registry.cn-beijing.aliyuncs.com": {
                            "auth": "xxxxxxxxxxxxxx"
                    }
            },
            "HttpHeaders": {
                    "User-Agent": "Docker-Client/19.03.15 (linux)"
            }
    
        }
  3. Job YAML を変更して、ConfigMap を Pod にマウントします。95

    詳細の表示

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: image-builder
      namespace: default
    spec:
      template:
        metadata:
          name: image-builder
        spec:
          containers:
            - name: image-builder
              image: "registry.cn-hangzhou.aliyuncs.com/acs/image-builder:v2.9"
              imagePullPolicy: Always
              env:
                - name: ALICLOUD_ACCESS_KEY
                  value: yourAccessKeyID
                - name: ALICLOUD_SECRET_KEY
                  value: yourAccessKeySecret
                - name: ALICLOUD_REGION
                  value: cn-heyuan
              command: ["packer"]
              args:  ["build","/config/ack.json"]
              volumeMounts:
                - name: config
                  mountPath: /config
                - name: docker
                  mountPath: /dockerconfig
          volumes:
            - name: config
              configMap:
                name: build-config
                items:
                  - key: ack.json
                    path: ack.json
            - name: docker
              configMap:
                name: docker-config
                items:
                  - key: config.json
                    path: config.json
          restartPolicy: Never
  4. build-config ファイルを次のように変更します。94

    詳細の表示

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
    
        {
          "variables": {
            "image_name": "ack-optimized_image-1.20-{{timestamp}}",
            "source_image": "aliyun_2_1903_x64_20G_alibase_20221102.vhd",
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-all.sh",
           "destination": "/root/"
            },
            {
           "type": "file",
           "source": "dockerconfig/config.json",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export OS_ARCH=amd64",
             "export RUNTIME=docker",
             "export SKIP_SECURITY_FIX=true",
             "export KUBE_VERSION=1.22.15-aliyun.1",
             "bash /root/ack-optimized-os-all.sh",
             "mkdir -p /root/.docker",
             "cp /root/config.json /root/.docker",
             "docker pull registry.cn-beijing.aliyuncs.com/ringtail/kruise-game:0.1"
    
          ]
          }]
        }
  5. Job を実行します。

イメージの同時アップロードとダウンロードの設定

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ノード] > [ノードプール] を選択します。

  3. 対象のノードプールの名前をクリックします。基本情報 タブで、ノードプール情報 セクションを見つけ、Auto Scaling (ESS) スケーリンググループ の横にあるリンクをクリックします。

  4. [インスタンス設定ソース] タブをクリックします。対象のスケーリング設定を見つけ、操作 列の 変更 をクリックし、次に OK をクリックします。

  5. [スケーリング設定の変更] ページで、詳細設定 を展開し、ユーザーデータ の内容をコピーします。ユーザーデータ ボックスのデータを Base64 でデコードします。

  6. ユーザーデータをデコードして変更します。

    インスタンスのユーザーデータを Base64 でデコードし、スクリプトに次のコードを追加します。

    このコードは jq をインストールし、Docker デーモンの設定を更新して同時ダウンロードとアップロードを増やし、Docker を再起動します。
    yum install -y jq
    echo "$(jq '. += {"max-concurrent-downloads": 20,"max-concurrent-uploads": 20}' /etc/docker/daemon.json)" > /etc/docker/daemon.json
    service docker restart

    image

  7. データを再エンコードして更新します。

    変更したスクリプトを Base64 でエンコードします。ユーザーデータ ボックスの内容をエンコードされた出力に置き換え、変更を確認 をクリックします。

カスタム Alibaba Cloud Linux 3 イメージの構築

詳細の表示

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.22-{{timestamp}}",
        "source_image":"aliyun_3_x64_20G_alibase_20230110.vhd",  # Alibaba Cloud Linux 3 のベースイメージ。
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",  
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-linux3-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.22.3-aliyun.1",
         "bash /root/ack-optimized-os-linux3-all.sh"
      ]
      }]
    }

カスタム Red Hat Enterprise Linux 9 イメージの構築

詳細の表示

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Red Hat Enterprise Linux 9 のベースイメージ。
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME={{user 'runtime'}}",
         "export SKIP_SECURITY_FIX={{user 'skip_security_fix'}}",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

次のステップ