Membuat Auto Scaling pada Aplikasi di Kubernetes
Membuat aplikasi yang scalable di Kubernetes bisa bikin hidup kamu lebih santai. Auto-scaling itu kayak punya asisten pribadi, tapi buat aplikasi. Jadi, aplikasi kamu bisa nge-scale up atau down sendiri tergantung beban kerja. Gak perlu lagi nungguin aplikasi 24/7.
Apa itu Auto-Scaling di Kubernetes?
Di Kubernetes, auto-scaling berarti aplikasi kamu bisa secara otomatis nambah atau ngurangin jumlah pod (container aplikasi) berdasarkan beban yang sedang dihadapi. Ada dua jenis auto-scaling yang perlu kamu tau:
- Horizontal Pod Autoscaler (HPA): Nambah atau ngurangin jumlah pod secara horizontal.
- Vertical Pod Autoscaler (VPA): Ngubah resource (CPU dan memori) yang dialokasikan ke pod yang sudah ada.
Tapi, HPA lebih sering dipake karena lebih fleksibel dan gampang diatur.
Prasyarat
Sebelum mulai, pastiin kamu udah punya:
- Cluster Kubernetes yang berjalan.
- Aplikasi yang udah di-deploy di cluster dan punya
Deployment
atauStatefulSet
. kubectl
udah ter-install dan bisa connect ke cluster kamu.- Metric server udah ter-install di cluster. Metric server ini penting karena HPA butuh metrics untuk menentukan kapan scaling perlu dilakukan.
Cara Install Metric Server
Kalau metric server belum ada, kamu bisa install pake perintah berikut:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Pastiin metric server berjalan dengan perintah:
kubectl get deployment metrics-server -n kube-system
Bikin Deployment untuk Aplikasi
Pertama, bikin dulu deployment untuk aplikasi kamu. Misalnya, kita bikin deployment sederhana pake image nginx
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "200m"
memory: "512Mi"
Simpan sebagai nginx-deployment.yaml
dan apply:
kubectl apply -f nginx-deployment.yaml
Bikin Horizontal Pod Autoscaler (HPA)
Nah, sekarang kita bikin HPA buat deployment kita. Kita pake kubectl autoscale
atau bikin file YAML buat HPA.
Contoh pake kubectl autoscale
:
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10
Artinya, HPA akan maintain antara 1 sampai 10 pod dengan target CPU utilization 50%. Jadi, kalau CPU usage lewat 50%, HPA bakal nambah pod sampe CPU usage turun ke 50% atau sampe maksimal 10 pod. Begitu juga kalo CPU usage turun, HPA bakal ngurangin pod.
Kalau mau pake file YAML, bikin dulu filenya. Misalnya nginx-hpa.yaml
:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Terus apply:
kubectl apply -f nginx-hpa.yaml
Testing HPA
Untuk ngetes HPA, kita perlu nambah beban CPU aplikasi kita. Pake tools kayak ab
(Apache Bench) atau curl
untuk generate traffic ke aplikasi.
Alternatif: Pake kubectl run
buat generate load pake busybox
:
kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://nginx-service; done"
Cek status HPA dengan perintah:
kubectl get hpa nginx-hpa -w
Kamu bakal liat kalo jumlah replicas pod naik karena HPA nambah pod buat nanganin peningkatan beban CPU. Kalo beban CPU turun, HPA bakal ngurangin jumlah podnya.
Konfigurasi HPA Lanjutan
HPA juga bisa diatur berdasarkan metrics lain kayak memory usage atau bahkan custom metrics. Cek dokumentasi Kubernetes buat detail lebih lanjut.
Contoh konfigurasi HPA untuk memory:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa-memory
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
Auto-scaling di Kubernetes bisa bantu kamu ngoptimalin resource aplikasi dan memastiin aplikasi kamu selalu siap nanganin traffic. Cukup set sekali, dan biarin Kubernetes yang ngatur sisanya. Happy scaling!