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
Kluster ACK telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.
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.
Buat file bernama build-config.yaml dengan konten YAML berikut.
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.CatatanJika Anda menuliskan informasi sensitif, seperti pasangan AccessKey (termasuk
access_keydansecret_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 shellyum install redis.x86_64 -yuntuk menginstal Redis.Untuk informasi selengkapnya tentang konfigurasi provisioner, lihat Konfigurasi provisioner.
Tabel 2. Parameter pembuatan citra
Parameter
Contoh
Deskripsi
Wajib
access_keyyourAccessKeyID
ID AccessKey Anda. Untuk informasi selengkapnya, lihat Dapatkan pasangan AccessKey.
Wajib
secret_keyyourAccessKeySecret
Rahasia AccessKey Anda.
Wajib
regioncn-beijing
Wilayah dari custom image tujuan.
Wajib
image_nameack-custom_image
Nama custom image tujuan. Nama harus unik dalam wilayah tersebut.
Wajib
source_imagealiyun_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_typeecs.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
RUNTIMEcontainerd
Runtime kontainer, yang bisa berupa Docker atau containerd.
Wajib
RUNTIME_VERSION1.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_FIXtrue
Lewati pembaruan keamanan.
Wajib
KUBE_VERSION1.30.1-aliyun.1
Nomor versi kluster.
Wajib
PRESET_GPUtrue
Pra-instal driver GPU untuk mempercepat startup.
Opsional
NVIDIA_DRIVER_VERSION460.91.03
Versi driver GPU yang dipra-instal. Jika Anda tidak menentukan parameter ini, versi default 460.91.03 akan digunakan.
Opsional
OS_ARCHamd64
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
PentingSebelum 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.
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
Gunakan konten YAML berikut untuk memberikan izin yang diperlukan kepada pasangan AccessKey.
Jalankan perintah berikut untuk menghasilkan string terenkripsi untuk ID AccessKey dan rahasia AccessKey.
echo -n "yourAccessKeyID" | base64 echo -n "yourAccessKeySecret" | base64Gunakan 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****************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.
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.
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.
Menyesuaikan citra arsitektur Arm
Menyesuaikan citra sistem node GPU untuk mempercepat startup
Custom image GPU dan custom image CPU tidak dapat saling dipertukarkan.
Cache gambar aplikasi dalam 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.

Ambil citra dari repositori pribadi saat runtime adalah Docker
docker login <Registry Address> -u user -p password
docker pull nginxAmbil citra dari repositori pribadi saat runtime adalah containerd
ctr -n k8s.io i pull --user=username:password nginxAmbil citra dari repositori pribadi selama pembuatan custom image
Pada mesin Linux dengan Docker terinstal, jalankan perintah
docker loginberikut untuk menghasilkan sertifikat.docker login --username=zhongwei.***@aliyun-test.com --password xxxxxxxxxx registry.cn-beijing.aliyuncs.comSetelah Anda berhasil menjalankan perintah
docker login, file sertifikat bernama config.json dihasilkan di direktori/root/.docker.
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)" } }Modifikasi YAML Job untuk memasang ConfigMap ke pod.

Modifikasi build-config dengan menambahkan konten yang ditunjukkan pada gambar.

Jalankan Job.
Atur konkurensi unggah dan unduh citra
Klik nama kelompok node target. Pada tab Basic Information, di bagian Node Pool Information, klik tautan di samping Auto Scaling Group.
Klik tab Instance Configuration Sources. Temukan konfigurasi penskalaan yang ingin Anda ubah, klik Modify di kolom Actions, lalu klik OK.
Pada halaman Modify Scaling Configuration, perluas Advanced Settings dan salin konten bidang Instance User Data. Decode data Base64 di bidang Instance User Data.
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
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
Buat custom image Red Hat Enterprise Linux 9
Langkah selanjutnya
Anda dapat membuat kelompok node berdasarkan custom image tersebut. Untuk informasi selengkapnya, lihat Buat custom image dari instans ECS yang ada dan gunakan citra tersebut untuk membuat node.
Untuk mempelajari cara melakukan scale out node berdasarkan custom image, lihat Aktifkan penyesuaian otomatis node.