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
Klaster ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat Klaster ACK yang Dikelola.
Klien kubectl terhubung ke klaster ACK. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Klaster dan Gunakan kubectl untuk Terhubung ke Klaster.
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.
Buat file YAML bernama build-config.yaml dan tambahkan konten berikut ke file tersebut:
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}}"}
variablesyang digunakan oleh Alicloud Image Builder.CatatanJika Anda menulis informasi sensitif seperti pasangan AccessKey yang ditentukan menggunakan parameter
access_keydansecret_keyke 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
provisionersyang 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 perintahyum install redis.x86_64 -yuntuk 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_keyyourAccessKeyID
ID AccessKey yang digunakan untuk membuat gambar kustom. Untuk informasi lebih lanjut, lihat Dapatkan pasangan AccessKey.
Wajib
secret_keyyourAccessKeySecret
Rahasia AccessKey yang digunakan untuk membuat gambar kustom.
Wajib
regioncn-beijing
Wilayah tempat gambar kustom diterapkan.
Wajib
image_nameack-custom_image
Nama gambar kustom. Nama tersebut harus unik secara global.
Wajib
source_imagealiyun_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_typeecs.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
RUNTIMEcontainerd
Runtime kontainer, yang bisa Docker atau containerd.
Wajib
RUNTIME_VERSION1.6.28
Saat Anda memilih Docker, RUNTIME_VERSION adalah 19.03.15 secara default.
Saat Anda memilih containerd, RUNTIME_VERSION adalah 1.6.20 secara default.
Opsional
SKIP_SECURITY_FIXtrue
Menentukan apakah akan melewati pembaruan keamanan.
Wajib
KUBE_VERSION1.30.1-aliyun.1
Versi Kubernetes klaster.
Wajib
PRESET_GPUtrue
Menentukan apakah akan 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, nilai default 460.91.03 digunakan.
Opsional
OS_ARCHamd64
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
PentingSebelum 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.
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
Gunakan template YAML berikut untuk memberikan izin kepada akun yang menggunakan pasangan AccessKey.
Jalankan perintah berikut untuk menghasilkan string terenkripsi untuk pasangan AccessKey:
echo -n "yourAccessKeyID" | base64 echo -n "yourAccessKeySecret" | base64Gunakan 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****************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.
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:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
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.
Bangun gambar berbasis ARM
Kustomisasi gambar OS node yang dipercepat GPU
Anda tidak dapat menyebarkan gambar dengan driver GPU yang telah diinstal pada node yang dipercepat CPU.
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.

Tarik gambar dari repositori gambar pribadi saat runtime kontainer adalah Docker
docker login <Alamat Gambar> -u pengguna -p kata sandi
docker pull nginxTarik gambar dari repositori gambar pribadi saat runtime kontainer adalah containerd
ctr -n k8s.io i pull --user=username:password nginxTarik gambar dari repositori pribadi setelah gambar kustom dibangun
Jalankan perintah
docker loginberikut pada server Linux yang memiliki Docker terpasang untuk menghasilkan sertifikat:docker login --username=zhongwei.***@aliyun-test.com --password xxxxxxxxxx registry.cn-beijing.aliyuncs.comSetelah perintah
docker loginberhasil, sertifikat bernama config.json dibuat di direktori/root/.docker.
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)" } }Modifikasi template YAML Job untuk memasang ConfigMap ke pod.

Tambahkan konten pada gambar berikut ke ConfigMap build-config.

Jalankan Job.
Tentukan jumlah maksimum unggahan dan unduhan bersamaan untuk gambar
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
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.
Di halaman yang muncul, klik tab Instance Configuration Sources. Temukan konfigurasi penskalaan yang ingin Anda kelola, klik Edit di kolom Actions, dan klik OK.
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.
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
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
Bangun gambar Red Hat Enterprise Linux 9 (RHEL 9) kustom
Apa yang harus dilakukan selanjutnya
Anda dapat menggunakan gambar kustom untuk membuat pool node. Untuk informasi lebih lanjut, lihat Buat dan Kelola Pool Node.
Untuk informasi lebih lanjut tentang cara menskalakan node berdasarkan gambar kustom, lihat Aktifkan Penskalaan Node Otomatis.