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
-
Sebuah kluster ACK Serverless
-
Metrics Server telah diinstal. Instal dari halaman Add-ons di Konsol ACK.
Buat aplikasi yang mendukung HPA di Konsol ACK
-
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
-
Di halaman Clusters, temukan kluster target lalu klik namanya atau klik Details di kolom Actions.
-
Di panel navigasi sebelah kiri, pilih Workloads > Deployments.
-
Di halaman Deployments, klik Create from Image.
-
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. |
-
-
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
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: 50autoscaling/v2beta2sudah tidak digunakan lagi (deprecated) di Kubernetes 1.23 dan dihapus di versi 1.26. Lakukan upgrade keautoscaling/v2jika 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