全部产品
Search
文档中心

Container Service for Kubernetes:Buat custom image

更新时间:Dec 21, 2025

Dalam beberapa skenario pra-instalasi atau berkinerja tinggi, Anda dapat menyesuaikan citra sistem operasi (OS) untuk menyederhanakan skalabilitas elastis dalam situasi kompleks. Gunakan Alicloud Image Builder untuk membangun custom OS image dan membuat kelompok node berdasarkan citra tersebut. Alicloud Image Builder mempercepat provisioning node serta mengoptimalkan kinerja penyesuaian otomatis node.

Prasyarat

Mengapa Anda memerlukan custom image yang dioptimalkan untuk elastisitas

Kelompok node ACK mendukung penyesuaian otomatis node. Citra OS yang disediakan untuk kelompok node, seperti Alibaba Cloud Linux dan CentOS, memenuhi persyaratan sebagian besar skenario. Namun, dalam beberapa skenario pra-instalasi atau berkinerja tinggi, citra dasar mungkin tidak memenuhi kebutuhan bisnis Anda. Alibaba Cloud menyediakan Alicloud Image Builder untuk membantu Anda membangun custom OS image dan menyederhanakan skalabilitas elastis dalam skenario kompleks.

Saat menggunakan Alicloud Image Builder untuk membuat custom image, Anda dapat mengirimkan tugas pembuatan citra ke kluster sebagai Job atau CronJob.

Gunakan ACK Job untuk membangun custom OS image secara cepat

Topik ini menggunakan ConfigMap bernama build-config dan workload Job bernama build sebagai contoh untuk menunjukkan cara menggunakan Alicloud Image Builder guna membangun custom OS image secara cepat.

1. Konfigurasikan parameter untuk membangun citra OS

Anda dapat membuat ConfigMap bernama build-config untuk mengonfigurasi parameter pembuatan citra OS.

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

    Klik untuk melihat detail 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 citra 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, VPC akan dibuat selama proses dan dilepas secara otomatis setelah proses selesai.
              "vswitch_id": "",  # Jika Anda tidak menentukan vswitch_id, vSwitch akan dibuat selama proses dan dilepas secara otomatis setelah proses selesai.
              "security_group_id": "",   # Jika Anda tidak menentukan security_group_id, grup keamanan akan dibuat selama proses dan dilepas secara otomatis setelah proses selesai.
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-all.sh",    # Ini hanya berlaku untuk citra Alibaba Cloud Linux 2.
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",    # Tentukan runtime kontainer.
             "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.
             "bash /root/ack-optimized-os-all.sh"
          ]
          }]
        }

    Tabel berikut menjelaskan parameter dalam konten YAML di atas.

    Tabel 1. Parameter file konfigurasi Alicloud Image Builder

    Parameter

    Contoh

    Deskripsi

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

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

    Variabel (variables) yang digunakan oleh Alicloud Image Builder.

    Catatan

    Jika Anda menuliskan informasi sensitif, seperti pasangan AccessKey (termasuk access_key dan secret_key), ke dalam file konfigurasi, informasi tersebut dapat bocor. Untuk mencegah kebocoran tidak disengaja, tetapkan sebagai variabel yang nilainya berasal dari runtime.

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

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

    Pembuat citra (builders). Jika Anda menetapkan type ke alicloud-ecs, instans ECS sementara akan dibuat untuk membangun citra. Setelah pembuatan selesai, instans ECS tersebut akan dihapus secara otomatis.

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

    provisioners{"type":"shell"}

    Provisioner citra (provisioners), yang menentukan operasi yang akan dilakukan di dalam instans sementara. Jika Anda menetapkan type ke shell, provisioner shell akan digunakan. Artinya, perintah shell akan dijalankan secara otomatis setelah terhubung ke instans Linux. Misalnya, jalankan perintah shell yum install redis.x86_64 -y untuk menginstal Redis.

    Untuk informasi selengkapnya tentang konfigurasi provisioner, lihat Konfigurasi provisioner.

    Tabel 2. Parameter pembuatan citra

    Parameter

    Contoh

    Deskripsi

    Wajib

    access_key

    yourAccessKeyID

    ID AccessKey Anda. Untuk informasi selengkapnya, lihat Dapatkan pasangan AccessKey.

    Wajib

    secret_key

    yourAccessKeySecret

    Rahasia AccessKey Anda.

    Wajib

    region

    cn-beijing

    Wilayah dari custom image tujuan.

    Wajib

    image_name

    ack-custom_image

    Nama custom image tujuan. Nama harus unik dalam wilayah tersebut.

    Wajib

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

    ID citra publik Alibaba Cloud yang memiliki sistem operasi yang sama. Untuk informasi selengkapnya, lihat Citra OS yang didukung oleh Container Service for Kubernetes.

    Wajib

    instance_type

    ecs.c6.xlarge

    Instans yang dibuat dari source_image menjalankan tugas pra-instalasi tertentu lalu menghasilkan custom image. Jika Anda memerlukan citra GPU, tentukan tipe instans GPU-accelerated di sini.

    Wajib

    RUNTIME

    containerd

    Runtime kontainer, yang bisa berupa Docker atau containerd.

    Wajib

    RUNTIME_VERSION

    1.6.28

    • Jika runtime kontainer adalah Docker, nilai default RUNTIME_VERSION adalah 19.03.15.

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

    Wajib

    SKIP_SECURITY_FIX

    true

    Lewati pembaruan keamanan.

    Wajib

    KUBE_VERSION

    1.30.1-aliyun.1

    Nomor versi kluster.

    Wajib

    PRESET_GPU

    true

    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, versi default 460.91.03 akan digunakan.

    Opsional

    OS_ARCH

    amd64

    Arsitektur CPU, yang bisa berupa amd64 atau arm64.

    Wajib

    MOUNT_RUNTIME_DATADISK

    true

    Jika custom image Anda memiliki cache gambar aplikasi dan Anda perlu menyambungkan data disk ke instans ECS selama runtime, atur parameter ini ke true.

    Opsional

    Penting
    • Sebelum mengonfigurasi custom image untuk kelompok node, pastikan konfigurasi kelompok node—seperti versi kluster, wilayah kluster, runtime kontainer, dan tipe instans kompatibel versi GPU—sesuai dengan konfigurasi pembuatan custom image. Jika tidak, node tidak dapat ditambahkan ke kluster.

    • Selama fase verifikasi custom image, gunakan kelompok node reguler yang sesuai dengan parameter yang dipilih untuk verifikasi. Setelah node berhasil ditambahkan ke kelompok node, verifikasi bahwa layanan Anda berjalan sesuai harapan.

  2. Jalankan perintah berikut untuk men-deploy Alicloud Image Builder ke kluster.

    kubectl apply -f build-config.yaml

2. Buat Job untuk membangun custom OS image

  1. Gunakan konten YAML berikut untuk memberikan izin yang diperlukan kepada pasangan AccessKey.

    Klik untuk melihat detail 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 ID AccessKey dan rahasia AccessKey.

    echo -n "yourAccessKeyID" | base64
    echo -n "yourAccessKeySecret" | base64
  3. Gunakan konten 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 yang di-encode Base64 dari langkah sebelumnya.
      ALICLOUD_SECRET_KEY: a0zY****************
  4. Buat file bernama build.yaml dengan konten YAML berikut.

    Konfigurasikan variabel untuk menjalankan Job. Selama proses, instans ECS dengan instance_type yang ditentukan dibuat dari source_image di akun yang memiliki pasangan AccessKey. Lalu, konfigurasi provisioner dijalankan. Setelah proses selesai, instans ECS tersebut digunakan untuk menghasilkan citra, yang kemudian didorong sebagai custom image ke wilayah yang ditentukan di bawah akun yang sama.

    Klik untuk melihat detail 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. Deploy Job ke kluster untuk mulai membangun citra OS.

    kubectl apply -f build.yaml

3. (Opsional) Lihat log pembuatan custom image

Log operasi dihasilkan selama proses pembuatan citra. Log tersebut mencatat langkah-langkah yang dilakukan selama pembuatan, termasuk validasi parameter, pembuatan resource sementara, pra-instalasi perangkat lunak, pembuatan resource target, dan pelepasan resource sementara. Anda dapat melakukan langkah-langkah berikut untuk melihat log pembuatan citra.

  1. Pada halaman Jobs, temukan Job yang Anda buat pada langkah sebelumnya. Di kolom Actions, klik Details. Pada halaman detail, klik tab Logs untuk melihat log pembuatan citra.

Konfigurasi provisioner

Provisioner adalah komponen yang digunakan untuk menginstal dan mengonfigurasi perangkat lunak pada mesin yang sedang berjalan sebelum mesin tersebut diubah menjadi citra OS statis. Skenario utama yang memerlukan instalasi perangkat lunak ke dalam citra meliputi:

  • Menginstal paket perangkat lunak.

  • Memperbarui kernel.

  • Membuat pengguna.

  • Mengunduh kode aplikasi.

  • Membuat custom image Alibaba Cloud Linux 3.

Jalankan skrip shell

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

Gunakan Ansible untuk menjalankan skrip orkestrasi

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

Instal klien CPFS

Cloud Paralleled File System (CPFS) memerlukan banyak paket untuk diinstal. Beberapa paket tersebut melibatkan kompilasi di tempat, sehingga proses instalasi memakan waktu lama. Saat jumlah node klien besar, Anda dapat menggunakan custom image untuk mengurangi biaya instalasi batch klien CPFS.

Klik untuk melihat 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"
        ]
      }
    ]
  }

Menyesuaikan citra arsitektur Arm

Klik untuk melihat 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",   # Konfigurasikan tipe instans 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"
            ]
        }
      ]
    }

Menyesuaikan citra sistem node GPU untuk mempercepat startup

Penting

Custom image GPU dan custom image CPU tidak dapat saling dipertukarkan.

Klik untuk melihat 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, Anda harus menentukan 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 SKIP_SECURITY_FIX=true",
                "export PRESET_GPU=true",          # Untuk mempra-instal driver GPU, atur PRESET_GPU ke true. Jika Anda tidak perlu 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, versi 460.91.03 akan diinstal secara default.
                "export KUBE_VERSION=1.22.3-aliyun.1",
                "export OS_ARCH=amd64",
                "bash /root/ack-optimized-os-all.sh"
            ]
        }
      ]
    }

Cache gambar aplikasi dalam citra sistem

Klik untuk melihat 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 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 citra sistem.
            ]
        }
      ]
    }

Saat instans ECS dengan data disk yang terpasang ditambahkan ke kelompok node, disk tersebut diinisialisasi dan semua gambar aplikasi yang telah di-cache sebelumnya akan dihapus. Untuk memasang data disk saat Anda membuat instans ECS dari custom image, Anda dapat menghasilkan snapshot data disk selama proses pembuatan custom image guna memastikan gambar aplikasi tidak dihapus.

{
      "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 data disk saat membuat custom image. Snapshot data disk akan dihasilkan secara otomatis setelah citra 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 path file runtime kontainer ke data disk.
                "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 citra sistem.
                "mv /var/lib/containerd /var/lib/container/containerd"       # Pindahkan file gambar ke data disk.
            ]
        }
      ]
    }

Saat mengonfigurasi kelompok node, Anda dapat menentukan custom image yang mencakup snapshot data disk. Sistem akan secara otomatis mengaitkan snapshot data disk yang sesuai.

image

Ambil citra dari repositori pribadi saat runtime adalah Docker

docker login <Registry Address> -u user -p password
docker pull nginx

Ambil citra dari repositori pribadi saat runtime adalah containerd

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

Ambil citra dari repositori pribadi selama pembuatan custom image

  1. Pada mesin Linux dengan Docker terinstal, jalankan perintah docker login berikut untuk menghasilkan sertifikat.

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

    Setelah Anda berhasil menjalankan perintah docker login, file sertifikat bernama config.json dihasilkan di direktori /root/.docker.96

  2. Buat ConfigMap dari file 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 pod.95

    Klik untuk melihat detail 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. Modifikasi build-config dengan menambahkan konten yang ditunjukkan pada gambar.94

    Klik untuk melihat 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 konkurensi unggah dan unduh citra

  1. Klik nama kelompok node target. Pada tab Basic Information, di bagian Node Pool Information, klik tautan di samping Auto Scaling Group.

  2. Klik tab Instance Configuration Sources. Temukan konfigurasi penskalaan yang ingin Anda ubah, klik Modify di kolom Actions, lalu klik OK.

  3. Pada halaman Modify Scaling Configuration, perluas Advanced Settings dan salin konten bidang Instance User Data. Decode data Base64 di bidang Instance User Data.

  4. Decode dan modifikasi data pengguna.

    Decode Base64 data pengguna instans yang ada. Setelah data didecode, tambahkan kode berikut di akhir skrip asli.

    Kode berikut menginstal tool jq, memodifikasi file konfigurasi Docker untuk meningkatkan jumlah unduhan dan unggahan konkuren, lalu merestart layanan 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

  5. Encode ulang dan perbarui data pengguna.

    Encode Base64 skrip lengkap yang telah dimodifikasi. Ganti data asli di bidang Instance User Data dengan konten encoded yang baru dihasilkan, lalu klik Confirm Modification untuk menyimpan perubahan.

Buat custom image Alibaba Cloud Linux 3

Klik untuk melihat 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",  # Citra 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"
      ]
      }]
    }

Buat custom image Red Hat Enterprise Linux 9

Klik untuk melihat 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",       # Citra 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_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