全部产品
Search
文档中心

Container Service for Kubernetes:Buat gambar kustom

更新时间:Jul 06, 2025

Dalam beberapa skenario pra-instalasi atau berperforma tinggi, Anda mungkin ingin menyesuaikan gambar sistem operasi untuk meningkatkan kemudahan penskalaan elastis dalam situasi yang kompleks. Anda dapat membangun gambar sistem operasi kustom menggunakan Alicloud Image Builder dan membuat pool node berdasarkan gambar ini. Alicloud Image Builder dapat mempercepat penyediaan node serta mengoptimalkan performa penskalaan otomatis.

Prasyarat

Manfaat gambar kustom

Pool node ACK mendukung penskalaan node otomatis. Saat membuat pool node, Anda dapat memilih gambar OS seperti Alibaba Cloud Linux dan CentOS. Gambar OS ini memenuhi persyaratan sebagian besar skenario. Namun, dalam skenario yang memerlukan pra-instalasi atau performa tinggi, gambar-gambar ini mungkin tidak dapat memenuhi kebutuhan bisnis Anda. Alibaba Cloud menyediakan Alicloud Image Builder untuk membantu Anda membangun gambar OS kustom dan memfasilitasi penskalaan otomatis dalam skenario kompleks.

Untuk menggunakan Alicloud Image Builder dalam pembuatan gambar kustom, Anda dapat membuat Job atau CronJob untuk mendistribusikan tugas pembuatan gambar di klaster ACK.

Buat Job untuk membangun gambar OS kustom dengan cepat

Dalam contoh ini, ConfigMap bernama build-config dan Job bernama build digunakan untuk menunjukkan cara menggunakan Alicloud Image Builder dalam membangun gambar OS kustom dengan cepat.

Langkah 1: Atur parameter untuk gambar OS

Buat ConfigMap bernama build-config untuk menentukan parameter gambar OS.

  1. Buat file YAML bernama build-config.yaml dan tambahkan konten berikut ke file tersebut:

    Template 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
                        },   # Tentukan ukuran disk sistem. Unit: GB. Nilai default: 40. 
              "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 parameter vpc_id, virtual private cloud (VPC) akan dibuat secara otomatis selama proses pembuatan gambar. VPC akan dihapus secara otomatis setelah gambar dibuat. 
              "vswitch_id": "",  # Jika Anda tidak menentukan parameter vswitch_id, vSwitch akan dibuat secara otomatis selama proses pembuatan gambar. vSwitch akan dihapus secara otomatis setelah gambar dibuat. 
              "security_group_id": "",   # Jika Anda tidak menentukan parameter security_group_id, grup keamanan akan dibuat secara otomatis selama proses pembuatan gambar. Grup keamanan akan dihapus secara otomatis setelah gambar dibuat. 
              "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 runtime yang digunakan. 
             "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 berdasarkan kebutuhan bisnis Anda. 
             "bash /root/ack-optimized-os-all.sh"
          ]
          }]
        }

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Tabel 1. Parameter Alicloud Image Builder

    Parameter

    Contoh

    Deskripsi

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

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

    variables yang digunakan oleh Alicloud Image Builder.

    Catatan

    Jika Anda menulis informasi sensitif seperti pasangan AccessKey yang ditentukan menggunakan parameter access_key dan secret_key ke file konfigurasi, informasi tersebut mungkin bocor. Untuk memastikan keamanan data, Anda dapat menentukan pasangan AccessKey sebagai variabel. Nilai-nilai variabel didasarkan pada nilai input dari waktu proses.

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

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

    Pembuat gambar builders. Jika parameter type disetel ke aliyun-ecs, instance Elastic Compute Service (ECS) sementara akan dibuat untuk membangun gambar. Instance ECS akan dilepaskan secara otomatis setelah gambar dibuat.

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

    provisioners{"type":"shell"}

    Provisioner gambar provisioners yang digunakan untuk menentukan operasi yang harus dilakukan pada instance sementara. Jika parameter type disetel ke shell, provisioner shell digunakan. Perintah shell akan dijalankan secara otomatis setelah instance Linux terhubung. Sebagai contoh, Anda dapat menjalankan perintah yum install redis.x86_64 -y untuk menginstal Redis.

    Untuk informasi lebih lanjut tentang cara mengonfigurasi provisioner, lihat bagian Konfigurasi Provisioner dari topik ini.

    Tabel 2. Parameter Pembuatan Gambar

    Parameter

    Contoh

    Deskripsi

    Wajib/Opsional

    access_key

    yourAccessKeyID

    ID AccessKey yang digunakan untuk membuat gambar kustom. Untuk informasi lebih lanjut, lihat Dapatkan pasangan AccessKey.

    Wajib

    secret_key

    yourAccessKeySecret

    Rahasia AccessKey yang digunakan untuk membuat gambar kustom.

    Wajib

    region

    cn-beijing

    Wilayah tempat gambar kustom diterapkan.

    Wajib

    image_name

    ack-custom_image

    Nama gambar kustom. Nama tersebut harus unik secara global.

    Wajib

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

    ID gambar publik Alibaba Cloud berdasarkan gambar kustom dibuat. Gambar kustom yang dibuat berisi sistem operasi yang sama dengan gambar publik. Untuk informasi lebih lanjut, lihat bagian Gambar OS yang didukung oleh ACK dari topik "Ikhtisar gambar OS".

    Wajib

    instance_type

    ecs.c6.xlarge

    Tipe instance dari instance ECS yang dibuat dari gambar dasar yang ditentukan dalam parameter source_image. Instance ECS digunakan untuk menjalankan tugas pra-instalasi dan membangun gambar kustom. Jika Anda ingin menggunakan gambar yang dipercepat GPU, tentukan tipe instance yang dipercepat GPU.

    Wajib

    RUNTIME

    containerd

    Runtime kontainer, yang bisa Docker atau containerd.

    Wajib

    RUNTIME_VERSION

    1.6.28

    1. Saat Anda memilih Docker, RUNTIME_VERSION adalah 19.03.15 secara default.

    2. Saat Anda memilih containerd, RUNTIME_VERSION adalah 1.6.20 secara default.

    Opsional

    SKIP_SECURITY_FIX

    true

    Menentukan apakah akan melewati pembaruan keamanan.

    Wajib

    KUBE_VERSION

    1.30.1-aliyun.1

    Versi Kubernetes klaster.

    Wajib

    PRESET_GPU

    true

    Menentukan apakah akan pra-instal driver GPU untuk mempercepat startup.

    Opsional

    NVIDIA_DRIVER_VERSION

    460.91.03

    Versi driver GPU yang dipra-instal. Jika Anda tidak menentukan parameter ini, nilai default 460.91.03 digunakan.

    Opsional

    OS_ARCH

    amd64

    Arsitektur CPU. Nilai valid: amd64 dan arm64.

    Wajib

    MOUNT_RUNTIME_DATADISK

    true

    Tetapkan parameter ini ke true untuk mengaktifkan pemasangan dinamis disk data selama runtime instance ECS saat menggunakan gambar kustom dengan dependensi aplikasi yang sudah di-cache.

    Opsional

    Penting
    • Sebelum menentukan gambar kustom untuk pool node, pastikan konfigurasi pool node sama dengan pengaturan pembuatan gambar kustom. Jika tidak, node yang dibuat dari gambar kustom tidak dapat ditambahkan ke klaster. Konfigurasi pool node mencakup versi klaster, wilayah klaster, runtime kontainer, dan tipe instance yang dipercepat GPU.

    • Saat memverifikasi gambar kustom, pilih pool node reguler yang menggunakan pengaturan pembuatan yang sama dengan gambar kustom. Setelah menggunakan gambar kustom untuk membuat node dan menambahkan node ke pool node, periksa apakah aplikasi Anda dapat berjalan pada node seperti yang diharapkan.

  2. Jalankan perintah berikut untuk menerapkan Alicloud Image Builder di klaster:

    kubectl apply -f build-config.yaml

Langkah 2: Buat Job untuk membangun gambar OS kustom

  1. Gunakan template YAML berikut untuk memberikan izin kepada akun yang menggunakan pasangan AccessKey.

    Template YAML

    {
      "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. Jalankan perintah berikut untuk menghasilkan string terenkripsi untuk pasangan AccessKey:

    echo -n "yourAccessKeyID" | base64
    echo -n "yourAccessKeySecret" | base64
  3. Gunakan template YAML berikut untuk membuat Secret bernama my-secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
      namespace: default
    type: Opaque
    data:
      ALICLOUD_ACCESS_KEY: TFRI****************        // String Base64-encoded dari sublangkah sebelumnya.
      ALICLOUD_SECRET_KEY: a0zY****************
  4. Buat file YAML bernama build.yaml dan tambahkan konten berikut ke file tersebut.

    Konfigurasikan variabel untuk menjalankan Job. Instance ECS dengan tipe instance yang ditentukan yang dibuat dari gambar dasar digunakan untuk membangun gambar kustom. Tipe instance ditentukan menggunakan parameter instance_type dan gambar dasar ditentukan menggunakan parameter source_image. Instance ECS milik akun Alibaba Cloud tempat pasangan AccessKey berada. Sistem kemudian menjalankan konfigurasi provisioner dan mendorong gambar yang dibangun oleh instance ECS ke wilayah tertentu sebagai gambar kustom. Gambar kustom juga milik akun Alibaba Cloud tempat pasangan AccessKey berada.

    Template YAML

    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. Terapkan Job dan mulai membangun gambar.

    kubectl apply -f build.yaml

Langkah 3: (Opsional) Lihat log pembuatan gambar

Log dihasilkan selama proses pembuatan gambar. Log mencatat semua operasi pembuatan gambar, termasuk memeriksa parameter, membuat sumber daya sementara, pra-instalasi perangkat lunak, membuat sumber daya target, dan melepaskan sumber daya sementara. Untuk melihat log pembuatan gambar, lakukan langkah-langkah berikut:

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

  2. Di halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Workloads > Jobs.

  3. Di halaman Job, temukan Job yang Anda buat dan klik Details di kolom Actions. Klik tab Logs untuk memeriksa log pembuatan gambar.

Konfigurasi Provisioner

Provisioner adalah komponen yang digunakan untuk menginstal dan mengonfigurasi perangkat lunak dalam sistem operasi yang sedang berjalan sebelum sistem operasi dikemas menjadi gambar OS. Provisioner sering digunakan untuk menginstal perangkat lunak dalam gambar dalam skenario berikut:

  • Menginstal perangkat lunak.

  • Memperbaiki kernel.

  • Membuat pengguna.

  • Mengunduh kode aplikasi.

  • Membangun gambar Alibaba Cloud Linux 3 kustom.

Jalankan skrip shell

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

Jalankan skrip orkestrasi menggunakan Ansible

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

Instal klien CPFS

Pemasangan Cloud Paralleled File System (CPFS) memerlukan beberapa paket instalasi, beberapa di antaranya melibatkan kompilasi waktu nyata dan mungkin memerlukan waktu tambahan untuk dipasang. Penggunaan gambar kustom dapat mengurangi biaya pemasangan klien CPFS pada sejumlah besar node.

Template YAML

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

Bangun gambar berbasis ARM

Template YAML

{
      "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 instance yang menggunakan 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 SKIP_SECURITY_FIX=true",
                "export KUBE_VERSION=1.28.9-aliyun.1",
                "export OS_ARCH=arm64",
                "bash /root/ack-optimized-os-linux3-all.sh"
            ]
        }
      ]
    }

Kustomisasi gambar OS node yang dipercepat GPU

Penting

Anda tidak dapat menyebarkan gambar dengan driver GPU yang telah diinstal pada node yang dipercepat CPU.

Template YAML

{
      "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",   # Tentukan tipe instance yang dipercepat GPU tempat driver GPU akan diinstal. 
        "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 SKIP_SECURITY_FIX=true",
                "export PRESET_GPU=true",          # Set PRESET_GPU ke true jika Anda perlu pra-instal driver GPU. Jika tidak, biarkan parameter kosong atau set ke false. 
                "export NVIDIA_DRIVER_VERSION=510.47.03",         # Tentukan versi driver GPU. Jika Anda biarkan parameter ini kosong, versi 460.91.03 akan diinstal. 
                "export KUBE_VERSION=1.22.3-aliyun.1",
                "export OS_ARCH=amd64",
                "bash /root/ack-optimized-os-all.sh"
            ]
        }
      ]
    }

Tambahkan gambar aplikasi ke gambar sistem

Template YAML

{
      "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 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"        # Tambahkan gambar aplikasi ke gambar sistem. 
            ]
        }
      ]
    }

Inisialisasi disk terjadi saat Anda menambahkan instance ECS dengan disk data yang dipasang ke pool node, yang mengakibatkan penghapusan gambar aplikasi apa pun yang disimpan sebelumnya. Untuk memasang disk data saat Anda membuat instance ECS dari gambar kustom, Anda dapat menghasilkan snapshot disk data selama proses pembuatan gambar kustom untuk memastikan bahwa gambar aplikasi tetap ada.

{
      "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 membuat gambar kustom, dan snapshot disk data secara otomatis dihasilkan setelah gambar dibuat.
          "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 SKIP_SECURITY_FIX=true",
                "export KUBE_VERSION=1.30.1-aliyun.1",
                "export OS_ARCH=amd64",
                "export MOUNT_RUNTIME_DATADISK=true",     # Pasang jalur file runtime kontainer 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",        # Tambahkan gambar aplikasi ke gambar sistem.
                "mv /var/lib/containerd /var/lib/container/containerd"       # Pindahkan file gambar ke disk data.
            ]
        }
      ]
    }

Saat mengonfigurasi pool node, Anda dapat menyiapkan gambar kustom yang mencakup snapshot disk data, dan sistem akan secara otomatis mengaitkan snapshot disk data yang sesuai.

image

Tarik gambar dari repositori gambar pribadi saat runtime kontainer adalah Docker

docker login <Alamat Gambar> -u pengguna -p kata sandi
docker pull nginx

Tarik gambar dari repositori gambar pribadi saat runtime kontainer adalah containerd

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

Tarik gambar dari repositori pribadi setelah gambar kustom dibangun

  1. Jalankan perintah docker login berikut pada server Linux yang memiliki Docker terpasang untuk menghasilkan sertifikat:

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

    Setelah perintah docker login berhasil, sertifikat bernama config.json dibuat di direktori /root/.docker. 96

  2. Buat ConfigMap berdasarkan file sertifikat bernama config.json.

    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 template YAML Job untuk memasang ConfigMap ke pod. 95

    Template YAML

    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. Tambahkan konten pada gambar berikut ke ConfigMap build-config.94

    Template YAML

    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.

Tentukan jumlah maksimum unggahan dan unduhan bersamaan untuk gambar

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

  2. Di halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Nodes > Node Pools.

  3. Temukan pool node yang ingin Anda kelola dan klik namanya. Klik tab Overview. Di bagian Node Pool Information, klik hyperlink di sebelah bidang Auto Scaling Group.

  4. Di halaman yang muncul, klik tab Instance Configuration Sources. Temukan konfigurasi penskalaan yang ingin Anda kelola, klik Edit di kolom Actions, dan klik OK.

  5. Di halaman Modify Scaling Configuration, modifikasi parameter dan klik Advanced Settings untuk menampilkan pengaturan lanjutan. Catat data di kotak Instance User Data. Dekode data di kotak Instance User Data menggunakan Base64.

  6. Setelah mendekode data, tambahkan kode berikut ke akhir data yang didekode.

    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. Enkode data yang dimodifikasi dalam Base64 dan timpa data asli di kotak Instance User Data dengan data yang dimodifikasi. Klik Modify. Di kotak dialog yang muncul, klik Modify.

Bangun gambar Alibaba Cloud Linux 3 kustom

Template YAML

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

Bangun gambar Red Hat Enterprise Linux 9 (RHEL 9) kustom

Template YAML

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

Apa yang harus dilakukan selanjutnya