Panaskan kapasitas node terlebih dahulu dengan pod placeholder berprioritas rendah untuk menghilangkan penundaan penyediaan saat skala keluar.
ack-autoscaling-placeholder mempertahankan kapasitas yang telah dipanaskan di kluster. Pod placeholder berprioritas rendah mencadangkan sumber daya node. Ketika workload nyata tiba, pod tersebut menggantikan placeholder dan langsung berjalan di node yang telah disediakan. Placeholder yang kini berstatus Pending memicu CA untuk menyediakan node baru, sehingga buffer terisi ulang.
Prasyarat
-
Node autoscaling diaktifkan untuk kluster ACK dengan pool node elastis yang telah dikonfigurasi.
-
label node ditetapkan pada pool node elastis melalui Node Labels. Panduan ini menggunakan
demo=yes.
Cara kerja
Ketiga langkah ini bekerja bersama melalui mekanisme preemption prioritas Kubernetes:
-
Placeholder berjalan dengan PriorityClass rendah (nilai
-1), mencadangkan sumber daya node. -
Ketika workload aktual diterapkan dengan PriorityClass tinggi (nilai
1000000), penjadwal mengeluarkan placeholder dan menempatkan workload tersebut langsung pada sumber daya yang telah dibebaskan. -
Placeholder yang kini berstatus Pending memicu CA untuk menyediakan node baru. Setelah node siap, placeholder dijadwalkan ulang dan buffer dipulihkan.
-1 dalam panduan ini berada di atas ambang tersebut.Terapkan ack-autoscaling-placeholder
-
Masuk ke Container Service Management Console. Di panel navigasi sebelah kiri, pilih Marketplace > Marketplace.
-
Di tab App Catalog, cari
ack-autoscaling-placeholderlalu klik ack-autoscaling-placeholder. -
Di halaman ack-autoscaling-placeholder, klik Deploy.
-
Di panel pembuatan, klik tab Parameter, ganti Parameters dengan YAML berikut, lalu klik OK.
Tetapkanresources.requestsagar sesuai dengan sumber daya allocatable pada node target, bukan kapasitas total. Node mencadangkan kapasitas untuk kubelet, sistem operasi, dan kube-proxy. Periksa dengan perintahkubectl describe node <node-name>di bagianAllocatable.nameOverride: "" fullnameOverride: "" priorityClassDefault: enabled: true name: default-priority-class # Kelas prioritas rendah untuk pod placeholder. value: -1 # Harus berada di atas ambang batas pod yang dapat diabaikan oleh CA dan di bawah prioritas workload nyata. deployments: - name: ack-place-holder replicaCount: 1 containers: - name: placeholder image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause:3.1 pullPolicy: IfNotPresent resources: requests: cpu: 4 # Sesuaikan permintaan ini agar cocok dengan sumber daya allocatable node, memory: 8Gi # bukan kapasitas mentah node (kurangi overhead kubelet, OS, dan kube-proxy). imagePullSecrets: {} annotations: {} nodeSelector: # Harus sesuai dengan label pada pool node elastis. demo: "yes" tolerations: [] affinity: {} labels: {} -
Pilih Applications > Helm dan pastikan status aplikasi adalah Deployed.
Buat PriorityClass untuk workload
-
Buat file
priorityClass.yamldengan konten berikut.apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 # Harus lebih tinggi daripada nilai PriorityClass placeholder (-1). globalDefault: false description: "Kelas prioritas tinggi untuk workload produksi." -
Terapkan PriorityClass tersebut.
kubectl apply -f priorityClass.yamlOutput yang diharapkan:
priorityclass.scheduling.k8s.io/high-priority created
Terapkan workload
-
Buat file
workload.yamldengan konten berikut.apiVersion: apps/v1 kind: Deployment metadata: name: placeholder-test labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: # Harus sesuai dengan label pada pool node elastis. demo: "yes" priorityClassName: high-priority # Merujuk ke PriorityClass yang dibuat pada Langkah 2. containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 resources: requests: cpu: 3 # Harus kurang dari atau sama dengan permintaan CPU placeholder (4) memory: 5Gi # agar workload nyata muat dalam ruang yang telah dicadangkan. -
Terapkan Deployment tersebut.
kubectl apply -f workload.yamlOutput yang diharapkan:
deployment.apps/placeholder-test created
Verifikasi hasil
-
Setelah diterapkan, status pod
ack-place-holderadalah Running.
-
Workload menggantikan placeholder dan berjalan di node yang sama. Placeholder berpindah ke status Pending.
-
Workload
placeholder-testberstatus Running di node yang sebelumnya ditempati placeholder.
-
Pod placeholder masuk ke status Pending karena sumber daya tidak mencukupi.

-
-
CA mendeteksi placeholder yang berstatus Pending dan menyediakan node baru. Setelah node siap, placeholder dijadwalkan ulang dan buffer dipulihkan.

Langkah selanjutnya
Untuk over-provisioning multi-zona, lihat Raih Skala Elastis Cepat secara Simultan di Beberapa Zona.