All Products
Search
Document Center

Container Service for Kubernetes:Skalakan kontainer dalam hitungan detik dengan ack-autoscaling-placeholder

Last Updated:Jun 17, 2026

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.

image

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:

  1. Placeholder berjalan dengan PriorityClass rendah (nilai -1), mencadangkan sumber daya node.

  2. Ketika workload aktual diterapkan dengan PriorityClass tinggi (nilai 1000000), penjadwal mengeluarkan placeholder dan menempatkan workload tersebut langsung pada sumber daya yang telah dibebaskan.

  3. Placeholder yang kini berstatus Pending memicu CA untuk menyediakan node baru. Setelah node siap, placeholder dijadwalkan ulang dan buffer dipulihkan.

Prioritas placeholder harus tetap berada di atas ambang batas pod yang dapat diabaikan oleh CA; jika tidak, pod Pending tidak akan memicu skala keluar. Nilai -1 dalam panduan ini berada di atas ambang tersebut.

Terapkan ack-autoscaling-placeholder

  1. Masuk ke Container Service Management Console. Di panel navigasi sebelah kiri, pilih Marketplace > Marketplace.

  2. Di tab App Catalog, cari ack-autoscaling-placeholder lalu klik ack-autoscaling-placeholder.

  3. Di halaman ack-autoscaling-placeholder, klik Deploy.

  4. Di panel pembuatan, klik tab Parameter, ganti Parameters dengan YAML berikut, lalu klik OK.

    Tetapkan resources.requests agar sesuai dengan sumber daya allocatable pada node target, bukan kapasitas total. Node mencadangkan kapasitas untuk kubelet, sistem operasi, dan kube-proxy. Periksa dengan perintah kubectl describe node <node-name> di bagian Allocatable.
    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: {}
  5. Pilih Applications > Helm dan pastikan status aplikasi adalah Deployed.

Buat PriorityClass untuk workload

  1. Buat file priorityClass.yaml dengan 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."
  2. Terapkan PriorityClass tersebut.

    kubectl apply -f priorityClass.yaml

    Output yang diharapkan:

    priorityclass.scheduling.k8s.io/high-priority created

Terapkan workload

  1. Buat file workload.yaml dengan 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.
  2. Terapkan Deployment tersebut.

    kubectl apply -f workload.yaml

    Output yang diharapkan:

    deployment.apps/placeholder-test created

Verifikasi hasil

  1. Setelah diterapkan, status pod ack-place-holder adalah Running.

    image

  2. Workload menggantikan placeholder dan berjalan di node yang sama. Placeholder berpindah ke status Pending.

    • Workload placeholder-test berstatus Running di node yang sebelumnya ditempati placeholder. image

    • Pod placeholder masuk ke status Pending karena sumber daya tidak mencukupi. image

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

    image

Langkah selanjutnya

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