Horizontal Pod Autoscaler (HPA) di Kubernetes

1. Pengertian Horizontal Pod Autoscaler (HPA)

Horizontal Pod Autoscaler (HPA) adalah fitur Kubernetes yang secara otomatis menyesuaikan jumlah Pod dalam sebuah Deployment, ReplicaSet, atau StatefulSet berdasarkan metrik beban kerja.

HPA membantu dalam meningkatkan atau mengurangi skala aplikasi secara otomatis, sehingga dapat:

  • Menghemat sumber daya saat beban rendah.
  • Mencegah downtime saat terjadi lonjakan trafik.

2. Cara Kerja HPA

HPA bekerja dengan cara:

  1. Mengumpulkan metrik dari Pod, seperti CPU usage, memori, atau metrik kustom.
  2. Menghitung jumlah Pod yang optimal berdasarkan aturan yang telah ditentukan.
  3. Menambah atau mengurangi jumlah Pod dalam Deployment/ReplicaSet agar tetap dalam batas yang optimal.

HPA berjalan sebagai controller di dalam Kubernetes, yang secara berkala melakukan polling terhadap metrik untuk menentukan apakah perlu melakukan scaling.

3. Syarat Menggunakan HPA

Sebelum menggunakan HPA, pastikan:

  • Metrics Server sudah terpasang untuk membaca data CPU dan memori.
  • Deployment atau StatefulSet memiliki resource requests dan limits untuk CPU/memori.
  • Cluster memiliki cukup kapasitas untuk menambah Pod jika diperlukan.

4. Instalasi Metrics Server

HPA memerlukan Metrics Server untuk mengumpulkan data CPU dan memori dari Pod.

  1. Cek apakah Metrics Server sudah berjalan
    kubectl get deployment metrics-server -n kube-system

Jika belum ada, instal dengan:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

  1. Verifikasi Metrics Server
    kubectl top pod

Jika berhasil, akan menampilkan penggunaan CPU dan memori dari setiap Pod.

5. Contoh Implementasi HPA

  • Deployment Aplikasi dengan Resource Limits

Sebelum menggunakan HPA, buat Deployment dengan request dan limit CPU:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: nginx
        resources:
          requests:
            cpu: "100m"
          limits:
            cpu: "500m"

Penjelasan:

  1. requests.cpu: "100m" → Meminta minimal 100 millicores CPU.
  2. limits.cpu: "500m" → Batas maksimal penggunaan CPU 500 millicores.
  • Membuat HPA Berdasarkan CPU Usage

Sekarang, buat HPA untuk menskalakan Pod antara 1 hingga 10 Pod berdasarkan penggunaan CPU.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Penjelasan:

  1. scaleTargetRef.name: my-app → HPA bekerja pada Deployment my-app.
  2. minReplicas: 1 → Minimal 1 Pod berjalan.
  3. maxReplicas: 10 → Maksimal 10 Pod.
  4. averageUtilization: 50 → Jika penggunaan CPU rata-rata melebihi 50%, Kubernetes akan menambah jumlah Pod.
  • Mengecek HPA
  1. Cek status HPA:

    kubectl get hpa

Output yang diharapkan:

NAME         REFERENCE       TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
my-app-hpa   Deployment/my-app   40%/50%   1        10       2         5m

Artinya:

  • Penggunaan CPU saat ini 40% dari target 50%.
  • Saat ini ada 2 replika Pod berjalan.
  1. Melihat detail HPA
    kubectl describe hpa my-app-hpa

6. HPA Berdasarkan Memori

Selain CPU, HPA juga bisa menggunakan memori (RAM) sebagai metrik scaling.

Contoh HPA Berdasarkan Memori

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 70

Penjelasan:

  • Jika penggunaan memori rata-rata lebih dari 70%, jumlah Pod akan bertambah.
  • Minimal 2 Pod dan maksimal 5 Pod.

7. Best Practices dalam Menggunakan HPA

  • Pastikan Metrics Server Berjalan → Tanpa ini, HPA tidak bisa membaca metrik CPU/memori.
  • Gunakan Resource Requests dan Limits → Agar scaling lebih akurat.
  • Gunakan MaxReplicas dengan Bijak → Jangan biarkan HPA menambah Pod tanpa batas.
  • Gunakan Metrik yang Relevan → Selain CPU/memori, gunakan metrik seperti jumlah request atau backlog queue.
  • Tes HPA dengan Simulasi Load → Gunakan kubectl run --generator=run-pod/v1 atau hey untuk menguji HPA.

Kesimpulan

  • HPA membantu mengelola skala aplikasi secara otomatis berdasarkan beban kerja.
  • Gunakan CPU, memori, atau metrik kustom untuk menentukan kapan menambah/mengurangi Pod.
  • Pastikan Metrics Server berjalan agar HPA bisa berfungsi.
  • Gunakan HPA bersama Load Balancer agar trafik tersebar merata ke semua Pod.
  • Dengan HPA, aplikasi Kubernetes lebih efisien dan scalable!