Panduan Linux

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:

  1. Horizontal Pod Autoscaler (HPA): Nambah atau ngurangin jumlah pod secara horizontal.
  2. 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:

  1. Cluster Kubernetes yang berjalan.
  2. Aplikasi yang udah di-deploy di cluster dan punya Deployment atau StatefulSet.
  3. kubectl udah ter-install dan bisa connect ke cluster kamu.
  4. 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!

#Kubernetes #Tutorial