All Products
Search
Document Center

Container Service for Kubernetes:Gambar kustom untuk optimalisasi penskalaan

Last Updated:Jun 19, 2026

Buat gambar OS kustom dengan Alicloud Image Builder untuk mempercepat penyediaan node di kelompok node ACK.

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. Untuk skenario yang memerlukan perangkat lunak pra-instal atau konfigurasi berkinerja tinggi, gunakan Alicloud Image Builder untuk membuat gambar OS kustom.

Kirimkan tugas pembuatan gambar ke kluster sebagai Job atau CronJob.

Membuat gambar kustom dengan ACK Job

Contoh berikut menggunakan ConfigMap bernama build-config dan Job bernama build.

Langkah 1: Konfigurasikan parameter pembuatan

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). Ketika type bernilai alicloud-ecs, instans ECS sementara dibuat untuk membangun gambar dan dilepas setelah selesai.

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

    provisioners{"type":"shell"}

    Provisioner gambar (provisioners) yang mendefinisikan operasi pada instans sementara. Ketika 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 pasangan 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 sudah ada.

    Ya

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

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

    Ya

    instance_type

    ecs.c6.xlarge

    Tipe instans ECS untuk instans pembuatan 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

    Menentukan apakah pembaruan keamanan dilewati.

    Ya

    KUBE_VERSION

    1.30.1-aliyun.1

    Versi kluster.

    Ya

    PRESET_GPU

    true

    Menentukan 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 dimount ke instans ECS saat digunakan.

    Tidak

    Penting
    • Sebelum menetapkan gambar kustom ke kelompok node, pastikan konfigurasi kelompok node (versi kluster, wilayah, container runtime, 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 sebagaimana mestinya.

  2. Deploy Alicloud Image Builder ke kluster:

    kubectl apply -f build-config.yaml

Langkah 2: Buat Job pembuatan

  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.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. Deploy Job untuk memulai pembuatan gambar.

    kubectl apply -f build.yaml

Langkah 3: (Opsional) Lihat log pembuatan

Proses pembuatan 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. Dalam daftar Jobs, temukan Job yang Anda buat. Pada kolom Actions, klik Details, lalu klik tab Logs untuk melihat log pembuatan.

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 kustom Alibaba Cloud Linux 3.

Jalankan skrip shell

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

Jalankan playbook Ansible

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

Instal klien CPFS

Pemasangan 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 kustom GPU dan gambar kustom CPU 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 biarkan 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 yang disambungkan ke kelompok node akan menginisialisasi disk data, sehingga menghapus gambar aplikasi yang telah di-cache sebelumnya. Untuk mempertahankannya, buat snapshot disk data saat membangun gambar kustom.

{
      "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 pembuatan gambar selesai, proses secara otomatis membuat snapshot dari disk data tersebut.
          "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",     # Mount 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 dengan snapshot disk data. Sistem akan memberi prompt bahwa snapshot disk data dimuat secara otomatis, dengan tipe disk diatur ke ESSD AutoPL, kapasitas 120 GiB, serta opsi untuk performa burst dan release-with-instance. Disk diinisialisasi dalam format container runtime menggunakan ext4. Jika Anda mengubah kapasitas disk data, Anda harus memperluas partisi dan sistem file secara manual setelah instans ECS dibuat.

image

Tarik dari registri privat (Docker)

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

Tarik dari registri privat (containerd)

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

Tarik dari registri privat selama pembuatan

  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.96

  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 memount ConfigMap ke dalam Pod.95

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

    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 atau . 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 Basic Information, temukan bagian Node Pool Information dan klik tautan di samping Auto Scaling Group.

  4. Klik tab Instance Configuration Sources. Temukan konfigurasi penskalaan target, klik Modify di kolom Actions, lalu klik OK.

  5. Pada halaman Modify scaling configuration, perluas Advanced Settings dan salin konten User Data. Decode data Base64 dalam kotak User Data.

  6. Decode dan modifikasi 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

    image

  7. Encode ulang dan perbarui data.

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

Buat gambar kustom Alibaba Cloud Linux 3

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

Buat gambar kustom Red Hat Enterprise Linux 9

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 berikutnya