All Products
Search
Document Center

Container Service for Kubernetes:Implementasikan horizontal pod autoscaling

Last Updated:Jun 17, 2026

Konfigurasikan HPA untuk secara otomatis menyesuaikan jumlah replika Pod berdasarkan penggunaan CPU, memori, atau metrik lainnya.

HPA cocok untuk layanan dengan permintaan fluktuatif, kebutuhan penskalaan yang sering, atau banyak workload — umum di bidang e-commerce, pendidikan daring, dan layanan keuangan.

Cara kerja HPA

HPA beroperasi sebagai loop kendali: setiap 15 detik, pengontrol mengirim kueri ke Metrics API dan membandingkan penggunaan aktual terhadap target yang ditetapkan. Metrics API mengambil data dari kubelet setiap 60 detik, sehingga HPA secara efektif mengevaluasi metrik dalam siklus 60 detik.

Rumus penskalaan inti:

desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue))

Sebagai contoh, jika pemanfaatan CPU saat ini adalah 80% dan targetnya 50%, HPA menghitung ceil(currentReplicas * 80/50) dan menyesuaikan skala Penyebaran tersebut. Pita toleransi sebesar 10% mencegah thrashing — HPA tidak melakukan penskalaan ketika rasio berada dalam rentang 0,9 hingga 1,1.

Behavior Detail
Scale-out Segera. HPA menambah jumlah replika segera setelah metrik melebihi target (ditambah toleransi).
Scale-in Waktu tunggu default 5 menit untuk menghindari skala turun prematur selama penurunan sementara.
Multiple metrics HPA melakukan penskalaan ketika *salah satu* metrik yang ditentukan melebihi ambang batasnya.
Resource requests required HPA menghitung pemanfaatan sebagai currentUsage / requests. Tanpa resource requests, HPA tidak dapat menghitung pemanfaatan.

Lihat Detail algoritma.

Prasyarat

Buat aplikasi yang mendukung HPA di Konsol ACK

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster target lalu klik namanya atau klik Details di kolom Actions.

  3. Di panel navigasi sebelah kiri, pilih Workloads > Deployments.

  4. Di halaman Deployments, klik Create from Image.

  5. Di halaman Create, konfigurasikan bagian-bagian berikut:

    • Basic Information: Tetapkan nama aplikasi dan jumlah replika.

    • Container: Pilih image dan tentukan sumber daya CPU serta memori. > Important: Tetapkan resource requests, atau HPA tidak akan berlaku.

    • Advanced:

      • Di bagian Access Control, klik Create di samping Services untuk mengonfigurasi Service.

      • Di bagian Scaling, atur HPA ke Enable dan konfigurasikan parameter penskalaan: | Parameter | Description | |-----------|-------------| | Metrics | Pilih CPU Usage atau Memory Usage. Harus sesuai dengan jenis resource di Required Resources. Jika keduanya ditentukan, HPA melakukan penskalaan ketika salah satu melebihi ambang batasnya. | | Condition | Ambang batas penggunaan resource yang memicu penskalaan. | | Max. Replicas | Jumlah replika maksimum. Harus lebih besar dari nilai minimum. | | Min. Replicas | Jumlah replika minimum. Bilangan bulat, minimal 1. |

Lihat Buat aplikasi tanpa status dari image.

Buat aplikasi yang mendukung HPA dengan kubectl

Bagian ini menggunakan Penyebaran NGINX untuk menunjukkan konfigurasi HPA dengan kubectl. Buat hanya satu HPA per workload.

Langkah 1: Buat Penyebaran

Buat file bernama nginx.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # Ganti dengan image_name:tag aktual Anda.
        ports:
        - containerPort: 80
        resources:
          requests:       # Diperlukan agar HPA dapat menghitung pemanfaatan.
            cpu: 500m
Penting

Tentukan resources.requests untuk kontainer Anda. HPA menghitung pemanfaatan sebagai currentUsage / requests — tanpa requests, HPA tidak dapat menentukan pemanfaatan dan tidak akan melakukan penskalaan.

Terapkan Penyebaran tersebut:

kubectl apply -f nginx.yml

Langkah 2: Buat HPA

Buat file bernama hpa.yml. HPA menggunakan scaleTargetRef untuk menargetkan Penyebaran nginx dan melakukan penskalaan ketika pemanfaatan CPU rata-rata melebihi 50%.

Untuk Kubernetes 1.24 dan versi yang lebih baru (disarankan — menggunakan autoscaling/v2):

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx                # Nama Penyebaran target.
  minReplicas: 1               # Jumlah replika minimum. Bilangan bulat >= 1.
  maxReplicas: 10              # Jumlah replika maksimum. Harus lebih besar dari minReplicas.
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50 # Target pemanfaatan CPU rata-rata (persentase dari requests).

Untuk versi Kubernetes sebelum 1.24 (legacy)

Gunakan autoscaling/v2beta2 sebagai gantinya:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
autoscaling/v2beta2 sudah tidak digunakan lagi (deprecated) di Kubernetes 1.23 dan dihapus di versi 1.26. Lakukan upgrade ke autoscaling/v2 jika memungkinkan.

Terapkan HPA:

kubectl apply -f hpa.yml

(Opsional) Gunakan beberapa metrik

Untuk melakukan penskalaan berdasarkan CPU dan memori sekaligus, tentukan kedua jenis resource tersebut di bawah bidang metrics dalam satu HPA — jangan buat HPA terpisah untuk setiap metrik. HPA melakukan penskalaan ketika *salah satu* metrik melebihi ambang batasnya.

metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 50
- type: Resource
  resource:
    name: memory
    target:
      type: Utilization
      averageUtilization: 50

Verifikasi status HPA

Setelah menerapkan HPA, pengumpulan metrik awal memerlukan beberapa saat. Selama periode ini, kubectl describe hpa mungkin menampilkan peringatan seperti berikut:

Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

Peringatan-peringatan ini menunjukkan bahwa HPA masih dalam proses inisialisasi dan metrik belum tersedia.

Periksa status HPA:

kubectl get hpa

Periksa event penskalaan:

kubectl describe hpa nginx-hpa

Saat HPA beroperasi dengan benar, bagian Events menampilkan output yang mirip dengan:

Type    Reason             Age   From                       Message
----    ------             ----  ----                       -------
Normal  SuccessfulRescale  5m6s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

Pembersihan

Untuk menghapus resource yang dibuat dalam tutorial ini:

kubectl delete hpa nginx-hpa
kubectl delete deployment nginx

Langkah selanjutnya