Untuk skenario yang memerlukan perangkat lunak pra-instal atau konfigurasi berkinerja tinggi, buat gambar OS kustom guna menyederhanakan auto scaling. Gunakan Alicloud Image Builder untuk membuat gambar tersebut dan mengonfigurasi kelompok node, sehingga mempercepat penyediaan node serta meningkatkan kinerja penskalaan.
Prasyarat
Kluster ACK yang dikelola telah dibuat.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi lebih lanjut, lihat Menghubungkan ke kluster ACK menggunakan kubectl.
Mengapa menggunakan gambar kustom untuk penskalaan
Kelompok node ACK mendukung auto scaling dengan gambar OS bawaan, seperti Alibaba Cloud Linux dan CentOS, yang mencakup sebagian besar kasus penggunaan. Namun, untuk skenario yang memerlukan perangkat lunak pra-instal atau konfigurasi berkinerja tinggi, gambar dasar bawaan mungkin tidak memenuhi kebutuhan bisnis. Dalam hal ini, gunakan Alicloud Image Builder untuk membuat gambar OS kustom dan menyederhanakan auto scaling dalam skenario kompleks.
Saat menggunakan Alicloud Image Builder untuk membuat gambar kustom, kirimkan tugas pembuatan gambar ke kluster sebagai Job atau CronJob.
Buat gambar kustom dengan Job ACK
Contoh berikut menunjukkan cara menggunakan Alicloud Image Builder untuk membuat gambar OS kustom, menggunakan ConfigMap bernama build-config dan Job bernama build.
Langkah 1: Konfigurasikan parameter build
Buat ConfigMap bernama build-config untuk mengonfigurasi parameter pembuatan gambar.
Buat file bernama build-config.yaml dengan konten YAML berikut.
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}}"}
variablesuntuk Alicloud Image Builder.CatatanMenyematkan informasi sensitif seperti
access_keydansecret_keysecara langsung dalam file konfigurasi menimbulkan risiko keamanan. Definisikan sebagai variabel yang menerima nilai saat runtime.builders{"type":"<value>"}builders{"type":"alicloud-ecs"}
Image builder (
builders). Saat type bernilai alicloud-ecs, instans ECS sementara dibuat untuk membangun gambar dan dilepas setelahnya.provisioners{"type":"<value>"}provisioners{"type":"shell"}
Provisioner gambar (
provisioners) yang mendefinisikan operasi pada instans sementara. Saat type bernilai shell, skrip shell dijalankan secara otomatis pada instans tersebut. Misalnya,yum install redis.x86_64 -ymenginstal Redis.Lihat Konfigurasi provisioner.
Tabel 2. Parameter pembuatan gambar
Parameter
Contoh
Deskripsi
Wajib
access_keyyourAccessKeyID
ID AccessKey. Lihat Mendapatkan pasangan AccessKey.
Ya
secret_keyyourAccessKeySecret
Rahasia pasangan AccessKey.
Ya
regioncn-beijing
Wilayah gambar kustom.
Ya
image_nameack-custom_image
Nama gambar kustom. Harus unik di antara gambar yang ada.
Ya
source_imagealiyun_2_1903_x64_20G_alibase_20200904.vhd
ID gambar publik Alibaba Cloud dengan OS yang sesuai. Lihat Citra OS yang didukung oleh ACK.
Ya
instance_typeecs.c6.xlarge
Tipe instans ECS untuk instans build sementara. Tentukan tipe GPU-accelerated untuk gambar GPU.
Ya
RUNTIMEcontainerd
Container runtime. Nilai yang valid:
dockerdancontainerd.Ya
RUNTIME_VERSION1.6.28
Jika container runtime adalah docker, nilai default
RUNTIME_VERSIONadalah 19.03.15.Jika container runtime adalah containerd, nilai default
RUNTIME_VERSIONadalah 1.6.20.
Ya
SKIP_SECURITY_FIXtrue
Apakah pembaruan keamanan akan dilewati.
Ya
KUBE_VERSION1.30.1-aliyun.1
Versi kluster.
Ya
PRESET_GPUtrue
Apakah driver GPU dipra-instal untuk mempercepat startup.
Tidak
NVIDIA_DRIVER_VERSION460.91.03
Versi driver GPU yang akan dipra-instal. Nilai default: 460.91.03.
Tidak
OS_ARCHamd64
Arsitektur CPU. Nilai yang valid:
amd64danarm64.Ya
MOUNT_RUNTIME_DATADISK
true
Atur ke true jika gambar kustom memiliki cache gambar aplikasi dan disk data perlu dipasang ke instans ECS saat digunakan.
Tidak
PentingSebelum menetapkan gambar kustom ke kelompok node, pastikan konfigurasi kelompok node (versi kluster, wilayah, container runtime, dan tipe instans GPU) sesuai dengan pengaturan pembuatan gambar. Jika tidak, node tidak dapat bergabung ke kluster.
Untuk validasi, tambahkan gambar ke kelompok node biasa dengan parameter yang sesuai dan verifikasi beban kerja Anda berjalan seperti yang diharapkan.
Terapkan Alicloud Image Builder ke kluster:
kubectl apply -f build-config.yaml
Langkah 2: Buat Job build
Berikan izin yang diperlukan kepada pasangan AccessKey dengan kebijakan berikut.
Hasilkan string Base64-encoded untuk pasangan AccessKey Anda:
echo -n "yourAccessKeyID" | base64 echo -n "yourAccessKeySecret" | base64Buat 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****************Buat file bernama build.yaml dengan konten YAML berikut.
Job ini membuat instans ECS sementara dari
source_image, menjalankan skripprovisioners, lalu membuat gambar kustom dan mendorongnya ke wilayah yang ditentukan.Terapkan Job untuk memulai pembuatan gambar.
kubectl apply -f build.yaml
Langkah 3: (Opsional) Lihat log build
Proses build menghasilkan log yang mencatat langkah-langkah seperti validasi parameter, pembuatan resource sementara, pra-instalasi perangkat lunak, dan pembersihan.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Di daftar Jobs, temukan Job yang Anda buat. Di kolom Actions, klik Details, lalu klik tab Logs untuk melihat log build.
Konfigurasi provisioner
Provisioner menginstal dan mengonfigurasi perangkat lunak pada mesin yang sedang berjalan sebelum mengambil snapshot-nya sebagai gambar OS. Kasus penggunaan umum:
Menginstal paket perangkat lunak.
Memperbarui kernel.
Membuat pengguna.
Mengunduh kode aplikasi.
Membuat gambar Alibaba Cloud Linux 3 kustom.
Jalankan skrip shell
"provisioners": [{
"type": "shell",
"script": "script.sh"
}]Jalankan playbook Ansible
"provisioners": [
{
"type": "ansible",
"playbook_file": "./playbook.yml"
}
]Instal klien CPFS
Instalasi klien CPFS memerlukan banyak paket dan kompilasi on-the-fly, yang bisa lambat. Gambar kustom mengurangi biaya instalasi saat diskalakan.
Buat gambar kustom untuk arsitektur Arm
Buat gambar OS node GPU
Gambar GPU kustom dan gambar CPU kustom tidak dapat digunakan bersamaan.
Cache gambar aplikasi
Menambahkan instans ECS dengan disk data terpasang ke kelompok node akan menginisialisasi disk data, sehingga menghapus gambar aplikasi yang telah di-cache sebelumnya. Jika Anda perlu memasang disk data saat menggunakan gambar kustom, buat snapshot disk data saat membangun gambar agar gambar aplikasi yang telah di-cache tetap tersimpan.
{
"variables": {
"image_name": "ack-custom_image",
"source_image": "aliyun_3_x64_20G_alibase_20240528.vhd",
"instance_type": "ecs.c6.xlarge",
"access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
"region": "{{env `ALICLOUD_REGION`}}",
"secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
},
"builders": [
{
"type": "alicloud-ecs",
"system_disk_mapping": {
"disk_size": 120,
"disk_category": "cloud_essd"
},
"image_disk_mappings": {
"disk_size": 40,
"disk_category": "cloud_auto"
}, # Konfigurasikan disk data saat Anda membangun gambar kustom. Setelah gambar selesai dibuat, proses secara otomatis membuat snapshot dari disk data.
"access_key": "{{user `access_key`}}",
"secret_key": "{{user `secret_key`}}",
"region": "{{user `region`}}",
"image_name": "{{user `image_name`}}",
"source_image": "{{user `source_image`}}",
"instance_type": "{{user `instance_type`}}",
"ssh_username": "root",
"skip_image_validation": "true",
"io_optimized": "true"
}
],
"provisioners": [
{
"type": "file",
"source": "scripts/ack-optimized-os-linux3-all.sh",
"destination": "/root/"
},
{
"type": "shell",
"inline": [
"export RUNTIME=containerd",
"export RUNTIME_VERSION=2.1.6",
"export SKIP_SECURITY_FIX=true",
"export KUBE_VERSION=1.30.1-aliyun.1",
"export OS_ARCH=amd64",
"export MOUNT_RUNTIME_DATADISK=true", # Pasang path file container runtime ke disk data.
"bash /root/ack-optimized-os-linux3-all.sh",
"ctr -n k8s.io i pull registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/pause:3.9", # Masukkan gambar aplikasi ke dalam gambar OS.
"mv /var/lib/containerd /var/lib/container/containerd" # Pindahkan file gambar ke disk data.
]
}
]
}Saat mengonfigurasi kelompok node, pilih gambar kustom yang berisi snapshot disk data. Sistem akan memberi prompt bahwa gambar kustom yang dipilih berisi snapshot disk data dan disk data yang sesuai dimuat secara otomatis. Jenis disk adalah ESSD AutoPL, kapasitasnya 120 GiB, dan opsi Enable Burst Performance serta Release with Instance dipilih. Pengaturan inisialisasi adalah Format and use as container runtime, dan sistem file-nya adalah ext4. Jika Anda mengubah kapasitas disk data, Anda harus memperluas partisi dan sistem file secara manual setelah instans ECS dibuat.
Ambil dari registri privat (Docker)
docker login <image_address> -u user -p password
docker pull nginxAmbil dari registri privat (containerd)
ctr -n k8s.io i pull --user=username:password nginxAmbil dari registri privat selama build
Pada mesin Linux dengan Docker terinstal, jalankan
docker loginuntuk menghasilkan kredensial.docker login --username=zhongwei.***@aliyun-test.com --password xxxxxxxxxx registry.cn-beijing.aliyuncs.comdocker loginyang berhasil membuat config.json di direktori/root/.docker.[root@iZ2zehfg3i9c94b65hpriqZ ~]# docker login --username=docker-username --password xxx registry.cn-beijing.aliyuncs.com WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@iZ2zehfg3i9c94b65hpriqZ ~]# [root@iZ2zehfg3i9c94b65hpriqZ ~]# [root@iZ2zehfg3i9c94b65hpriqZ ~]# [root@iZ2zehfg3i9c94b65hpriqZ ~]# cat /root/.docker/config.json { "auths": { "registry.cn-beijing.aliyuncs.com": { "auth": "emhvbmdxxx==" } }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.15 (linux)" } } [root@iZ2zehfg3i9c94b65hpriqZ ~]#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)" } }Modifikasi YAML Job untuk memasang ConfigMap ke dalam Pod.
Modifikasi file build-config sebagai berikut.
Jalankan Job.
Atur unggahan dan unduhan gambar konkuren
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Klik nama kelompok node target. Pada tab Overview, temukan bagian Node Pool Information dan klik tautan di samping Auto Scaling Group.
Klik tab Scaling Configurations . Temukan konfigurasi penskalaan target, klik Edit di kolom Actions, lalu klik OK.
Di halaman Modify Scaling Configuration, luaskan Advanced Settings dan salin konten Instance User Data. Dekode Base64 data dalam konten Instance User Data. Dekode Base64 data di kotak Instance User Data.
Decode dan modifikasi instance user data.
Decode instance user data dalam Base64 dan tambahkan kode berikut ke skrip.
Kode ini menginstal
jq, memperbarui konfigurasi daemon Docker untuk meningkatkan unduhan dan unggahan konkuren, lalu merestart Docker.yum install -y jq echo "$(jq '. += {"max-concurrent-downloads": 20,"max-concurrent-uploads": 20}' /etc/docker/daemon.json)" > /etc/docker/daemon.json service docker restartEncode ulang dan perbarui data.
Encode skrip yang telah dimodifikasi ke dalam Base64. Ganti konten dalam kotak Instance User Data dengan output hasil encode, lalu klik OK.