All Products
Search
Document Center

Container Service for Kubernetes:Gambar kustom untuk optimalisasi penskalaan

Last Updated:Aug 21, 2026

Untuk skenario yang memerlukan perangkat lunak pra-instal atau konfigurasi berkinerja tinggi, buat gambar OS kustom guna menyederhanakan auto scaling. Gunakan Alicloud Image Builder untuk membuat gambar tersebut dan mengonfigurasi kelompok node, sehingga mempercepat penyediaan node serta meningkatkan kinerja penskalaan.

Prasyarat

Mengapa menggunakan gambar kustom untuk penskalaan

Kelompok node ACK mendukung auto scaling dengan gambar OS bawaan, seperti Alibaba Cloud Linux dan CentOS, yang mencakup sebagian besar kasus penggunaan. Namun, untuk skenario yang memerlukan perangkat lunak pra-instal atau konfigurasi berkinerja tinggi, gambar dasar bawaan mungkin tidak memenuhi kebutuhan bisnis. Dalam hal ini, gunakan Alicloud Image Builder untuk membuat gambar OS kustom dan menyederhanakan auto scaling dalam skenario kompleks.

Saat menggunakan Alicloud Image Builder untuk membuat gambar kustom, kirimkan tugas pembuatan gambar ke kluster sebagai Job atau CronJob.

Buat gambar kustom dengan Job ACK

Contoh berikut menunjukkan cara menggunakan Alicloud Image Builder untuk membuat gambar OS kustom, menggunakan ConfigMap bernama build-config dan Job bernama build.

Langkah 1: Konfigurasikan parameter build

Buat ConfigMap bernama build-config untuk mengonfigurasi parameter pembuatan gambar.

  1. Buat file bernama build-config.yaml dengan konten YAML berikut.

    Lihat detail

    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
                        },   # Menentukan ukuran disk sistem untuk gambar dalam GB. Nilai default adalah 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": "",  # Jika Anda tidak menentukan vpc_id, proses akan membuat virtual private cloud (VPC) sementara dan secara otomatis menghapusnya setelah selesai.
              "vswitch_id": "",  # Jika Anda tidak menentukan vswitch_id, proses akan membuat vSwitch sementara dan secara otomatis menghapusnya setelah selesai.
              "security_group_id": "",   # Jika Anda tidak menentukan security_group_id, proses akan membuat security group sementara dan secara otomatis menghapusnya setelah selesai.
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-all.sh",    # Hanya berlaku untuk gambar Alibaba Cloud Linux 2.
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",    # Tentukan container runtime.
             "export RUNTIME_VERSION=1.6.28",
             "export SKIP_SECURITY_FIX=true",
             "export KUBE_VERSION=1.30.1-aliyun.1",
             "export OS_ARCH=amd64",    # Tentukan amd64 atau arm64 sesuai kebutuhan Anda.
             "bash /root/ack-optimized-os-all.sh"
          ]
          }]
        }

    Tabel berikut mencantumkan parameter YAML tersebut.

    Tabel 1. Parameter dalam file konfigurasi Alicloud Image Builder

    Parameter

    Contoh

    Deskripsi

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

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

    variables untuk Alicloud Image Builder.

    Catatan

    Menyematkan informasi sensitif seperti access_key dan secret_key secara langsung dalam file konfigurasi menimbulkan risiko keamanan. Definisikan sebagai variabel yang menerima nilai saat runtime.

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

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

    Image builder (builders). Saat type bernilai alicloud-ecs, instans ECS sementara dibuat untuk membangun gambar dan dilepas setelahnya.

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

    provisioners{"type":"shell"}

    Provisioner gambar (provisioners) yang mendefinisikan operasi pada instans sementara. Saat type bernilai shell, skrip shell dijalankan secara otomatis pada instans tersebut. Misalnya, yum install redis.x86_64 -y menginstal Redis.

    Lihat Konfigurasi provisioner.

    Tabel 2. Parameter pembuatan gambar

    Parameter

    Contoh

    Deskripsi

    Wajib

    access_key

    yourAccessKeyID

    ID AccessKey. Lihat Mendapatkan pasangan AccessKey.

    Ya

    secret_key

    yourAccessKeySecret

    Rahasia pasangan AccessKey.

    Ya

    region

    cn-beijing

    Wilayah gambar kustom.

    Ya

    image_name

    ack-custom_image

    Nama gambar kustom. Harus unik di antara gambar yang ada.

    Ya

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

    ID gambar publik Alibaba Cloud dengan OS yang sesuai. Lihat Citra OS yang didukung oleh ACK.

    Ya

    instance_type

    ecs.c6.xlarge

    Tipe instans ECS untuk instans build sementara. Tentukan tipe GPU-accelerated untuk gambar GPU.

    Ya

    RUNTIME

    containerd

    Container runtime. Nilai yang valid: docker dan containerd.

    Ya

    RUNTIME_VERSION

    1.6.28

    • Jika container runtime adalah docker, nilai default RUNTIME_VERSION adalah 19.03.15.

    • Jika container runtime adalah containerd, nilai default RUNTIME_VERSION adalah 1.6.20.

    Ya

    SKIP_SECURITY_FIX

    true

    Apakah pembaruan keamanan akan dilewati.

    Ya

    KUBE_VERSION

    1.30.1-aliyun.1

    Versi kluster.

    Ya

    PRESET_GPU

    true

    Apakah driver GPU dipra-instal untuk mempercepat startup.

    Tidak

    NVIDIA_DRIVER_VERSION

    460.91.03

    Versi driver GPU yang akan dipra-instal. Nilai default: 460.91.03.

    Tidak

    OS_ARCH

    amd64

    Arsitektur CPU. Nilai yang valid: amd64 dan arm64.

    Ya

    MOUNT_RUNTIME_DATADISK

    true

    Atur ke true jika gambar kustom memiliki cache gambar aplikasi dan disk data perlu dipasang ke instans ECS saat digunakan.

    Tidak

    Penting
    • Sebelum menetapkan gambar kustom ke kelompok node, pastikan konfigurasi kelompok node (versi kluster, wilayah, container runtime, dan tipe instans GPU) sesuai dengan pengaturan pembuatan gambar. Jika tidak, node tidak dapat bergabung ke kluster.

    • Untuk validasi, tambahkan gambar ke kelompok node biasa dengan parameter yang sesuai dan verifikasi beban kerja Anda berjalan seperti yang diharapkan.

  2. Terapkan Alicloud Image Builder ke kluster:

    kubectl apply -f build-config.yaml

Langkah 2: Buat Job build

  1. Berikan izin yang diperlukan kepada pasangan AccessKey dengan kebijakan berikut.

    Lihat detail

    {
      "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. Hasilkan string Base64-encoded untuk pasangan AccessKey Anda:

    echo -n "yourAccessKeyID" | base64
    echo -n "yourAccessKeySecret" | base64
  3. Buat Secret bernama my-secret dengan YAML berikut.

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
      namespace: default
    type: Opaque
    data:
      ALICLOUD_ACCESS_KEY: TFRI**************** # String Base64-encoded dari langkah sebelumnya.
      ALICLOUD_SECRET_KEY: a0zY****************
  4. Buat file bernama build.yaml dengan konten YAML berikut.

    Job ini membuat instans ECS sementara dari source_image, menjalankan skrip provisioners, lalu membuat gambar kustom dan mendorongnya ke wilayah yang ditentukan.

    Lihat detail

    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.5"
              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. Terapkan Job untuk memulai pembuatan gambar.

    kubectl apply -f build.yaml

Langkah 3: (Opsional) Lihat log build

Proses build menghasilkan log yang mencatat langkah-langkah seperti validasi parameter, pembuatan resource sementara, pra-instalasi perangkat lunak, dan pembersihan.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Jobs.

  3. Di daftar Jobs, temukan Job yang Anda buat. Di kolom Actions, klik Details, lalu klik tab Logs untuk melihat log build.

Konfigurasi provisioner

Provisioner menginstal dan mengonfigurasi perangkat lunak pada mesin yang sedang berjalan sebelum mengambil snapshot-nya sebagai gambar OS. Kasus penggunaan umum:

  • Menginstal paket perangkat lunak.

  • Memperbarui kernel.

  • Membuat pengguna.

  • Mengunduh kode aplikasi.

  • Membuat gambar Alibaba Cloud Linux 3 kustom.

Jalankan skrip shell

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

Jalankan playbook Ansible

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

Instal klien CPFS

Instalasi klien CPFS memerlukan banyak paket dan kompilasi on-the-fly, yang bisa lambat. Gambar kustom mengurangi biaya instalasi saat diskalakan.

Lihat detail

    {
      "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"
        ]
      }
    ]
  }

Buat gambar kustom untuk arsitektur Arm

Lihat detail

{
      "variables": {
        "region": "{{env `ALICLOUD_REGION`}}",
        "image_name": "ack-custom_image",
        "source_image": "aliyun_3_arm64_20G_alibase_20240528.vhd",
        "instance_type": "ecs.r8y.xlarge",   # Tentukan tipe instans untuk arsitektur 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"
            ]
        }
      ]
    }

Buat gambar OS node GPU

Penting

Gambar GPU kustom dan gambar CPU kustom tidak dapat digunakan bersamaan.

Lihat detail

{
      "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",   # Untuk mempra-instal driver GPU, atur parameter ini ke tipe instans GPU-accelerated.
        "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",          # Untuk mempra-instal driver GPU, atur PRESET_GPU ke true. Jika Anda tidak ingin mempra-instal driver GPU, biarkan parameter ini kosong atau atur ke false.
                "export NVIDIA_DRIVER_VERSION=510.47.03",         # Tentukan versi driver GPU. Jika Anda membiarkan parameter ini kosong, builder akan menginstal versi 460.91.03 secara default.
                "export KUBE_VERSION=1.22.3-aliyun.1",
                "export OS_ARCH=amd64",
                "bash /root/ack-optimized-os-all.sh"
            ]
        }
      ]
    }

Cache gambar aplikasi

Lihat detail

{
      "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"        # Masukkan gambar aplikasi ke dalam gambar OS.
            ]
        }
      ]
    }

Menambahkan instans ECS dengan disk data terpasang ke kelompok node akan menginisialisasi disk data, sehingga menghapus gambar aplikasi yang telah di-cache sebelumnya. Jika Anda perlu memasang disk data saat menggunakan gambar kustom, buat snapshot disk data saat membangun gambar agar gambar aplikasi yang telah di-cache tetap tersimpan.

{
      "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"
                    },     # Konfigurasikan disk data saat Anda membangun gambar kustom. Setelah gambar selesai dibuat, proses secara otomatis membuat snapshot dari disk data.
          "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",     # Pasang path file container runtime ke disk data.
                "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",        # Masukkan gambar aplikasi ke dalam gambar OS.
                "mv /var/lib/containerd /var/lib/container/containerd"       # Pindahkan file gambar ke disk data.
            ]
        }
      ]
    }

Saat mengonfigurasi kelompok node, pilih gambar kustom yang berisi snapshot disk data. Sistem akan memberi prompt bahwa gambar kustom yang dipilih berisi snapshot disk data dan disk data yang sesuai dimuat secara otomatis. Jenis disk adalah ESSD AutoPL, kapasitasnya 120 GiB, dan opsi Enable Burst Performance serta Release with Instance dipilih. Pengaturan inisialisasi adalah Format and use as container runtime, dan sistem file-nya adalah ext4. Jika Anda mengubah kapasitas disk data, Anda harus memperluas partisi dan sistem file secara manual setelah instans ECS dibuat.

Ambil dari registri privat (Docker)

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

Ambil dari registri privat (containerd)

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

Ambil dari registri privat selama build

  1. Pada mesin Linux dengan Docker terinstal, jalankan docker login untuk menghasilkan kredensial.

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

    docker login yang berhasil membuat config.json di direktori /root/.docker.

    [root@iZ2zehfg3i9c94b65hpriqZ ~]# docker login --username=docker-username --password xxx registry.cn-beijing.aliyuncs.com
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    Login Succeeded
    [root@iZ2zehfg3i9c94b65hpriqZ ~]#
    [root@iZ2zehfg3i9c94b65hpriqZ ~]#
    [root@iZ2zehfg3i9c94b65hpriqZ ~]#
    [root@iZ2zehfg3i9c94b65hpriqZ ~]# cat /root/.docker/config.json
    {
            "auths": {
                    "registry.cn-beijing.aliyuncs.com": {
                            "auth": "emhvbmdxxx=="
                    }
            },
            "HttpHeaders": {
                    "User-Agent": "Docker-Client/19.03.15 (linux)"
            }
    }
    [root@iZ2zehfg3i9c94b65hpriqZ ~]#
  2. Buat ConfigMap dari config.json yang dihasilkan.

    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. Modifikasi YAML Job untuk memasang ConfigMap ke dalam Pod.

    Lihat detail

    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.5"
              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. Modifikasi file build-config sebagai berikut.

    Lihat detail

    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. Jalankan Job.

Atur unggahan dan unduhan gambar konkuren

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Nodes > Node Pools.

  3. Klik nama kelompok node target. Pada tab Overview, temukan bagian Node Pool Information dan klik tautan di samping Auto Scaling Group.

  4. Klik tab Scaling Configurations . Temukan konfigurasi penskalaan target, klik Edit di kolom Actions, lalu klik OK.

  5. Di halaman Modify Scaling Configuration, luaskan Advanced Settings dan salin konten Instance User Data. Dekode Base64 data dalam konten Instance User Data. Dekode Base64 data di kotak Instance User Data.

  6. Decode dan modifikasi instance user data.

    Decode instance user data dalam Base64 dan tambahkan kode berikut ke skrip.

    Kode ini menginstal jq, memperbarui konfigurasi daemon Docker untuk meningkatkan unduhan dan unggahan konkuren, lalu merestart 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
  7. Encode ulang dan perbarui data.

    Encode skrip yang telah dimodifikasi ke dalam Base64. Ganti konten dalam kotak Instance User Data dengan output hasil encode, lalu klik OK.

Buat gambar Alibaba Cloud Linux 3 kustom

Lihat detail

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",  # Gambar dasar untuk 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",
          "touch /var/.skip-yum"   # Lewati pembaruan yum karena pembaruan telah diterapkan selama pembuatan gambar kustom.
       ]
       }]
    }

Buat gambar Alibaba Cloud Linux 4 kustom

Lihat detail

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    {
      "variables": {
        "image_name": "ack-optimized_image-1.36-{{timestamp}}",
        "source_image":"aliyun_4_x64_20G_container_optimized_alibase_20260430.vhd",  # Gambar dasar untuk Alibaba Cloud Linux 4.
        "instance_type": "ecs.c8i.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-linux4-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export RUNTIME_VERSION=2.1.8",
         "export SKIP_SECURITY_FIX=true",
         "export KUBE_VERSION=1.36.1-aliyun.1",
         "export OS_ARCH=amd64",
         "bash /root/ack-optimized-os-linux4-all.sh",
         "touch /var/.skip-yum",   # Lewati pembaruan yum karena pembaruan telah diterapkan selama pembuatan gambar kustom.
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/ack-node-problem-detector:v0.8.17-80c46b7-aliyun",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/busybox:1.33",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/csi-node-driver-registrar:v2.17.0-aliyun",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/csi-plugin:v1.36.1",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/csi-plugin:v1.36.1-init",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/k8s-dns-node-cache:v1.22.28.1",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/kube-rbac-proxy:v0.11.0-703dc7e4-aliyun",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/loongcollector:v3.3.3.0-f44ebb3-aliyun",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/node-exporter:v0.17.0-slim",
         "ctr -n k8s.io i pull registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/terway:v1.17.2"
         
      ]
      }]
    }

Buat gambar Red Hat Enterprise Linux 9 kustom

Lihat detail

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Gambar dasar untuk 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=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Langkah selanjutnya