Belajar Kubernetes: Cara Deployment, Service, dan Scaling Aplikasi

kubernetes
ilustrasi kubernetes

Setelah memahami konsep dasar Kubernetes seperti Pod, Node, Cluster, dan cara melakukan deployment sederhana, langkah berikutnya adalah memahami bagaimana Kubernetes digunakan dalam skenario yang lebih realistis. Pada artikel ini, kita akan membahas praktik lanjutan yang wajib dipahami: Deployment strategy, Service exposure, scaling, dan manajemen resource.

Jika pada artikel sebelumnya kita hanya menjalankan container, sekarang kita akan belajar bagaimana membuat aplikasi benar-benar siap digunakan di environment production.

Read More

1. Memahami Deployment Secara Lebih Dalam

Pada tahap pemula, biasanya kita membuat Pod secara langsung menggunakan file YAML. Namun dalam praktik nyata, hampir tidak pernah kita membuat Pod secara manual. Sebagai gantinya, kita menggunakan Deployment.

Deployment berfungsi untuk:

  • Mengatur jumlah replica
  • Mengelola rolling update
  • Melakukan rollback versi
  • Menjaga aplikasi tetap tersedia

Contoh deployment sederhana:

apiVersion: apps/v1kind: Deploymentmetadata:  name: web-appspec:  replicas: 3  selector:    matchLabels:      app: web  template:    metadata:      labels:        app: web    spec:      containers:      - name: nginx        image: nginx:1.25        ports:        - containerPort: 80

Dengan konfigurasi di atas, Kubernetes akan memastikan selalu ada 3 Pod yang berjalan. Jika salah satu mati, otomatis dibuat ulang.

Untuk melihat status:

kubectl get deploymentkubectl get pods

2. Rolling Update dan Rollback

Salah satu fitur penting Kubernetes adalah kemampuan melakukan update tanpa downtime.

Misalnya Anda ingin upgrade image:

kubectl set image deployment/web-app nginx=nginx:1.26

Kubernetes akan melakukan rolling update secara bertahap. Anda bisa melihat prosesnya:

kubectl rollout status deployment/web-app

Jika ternyata terjadi error, rollback bisa dilakukan dengan:

kubectl rollout undo deployment/web-app

Inilah salah satu alasan mengapa Kubernetes sangat powerful untuk environment production.


3. Service: Menghubungkan Aplikasi ke Dunia Luar

Pod di Kubernetes bersifat ephemeral. IP bisa berubah kapan saja. Untuk itulah kita membutuhkan Service.

Ada beberapa tipe Service:

ClusterIP

Digunakan untuk komunikasi internal antar Pod.

NodePort

Membuka akses melalui port di setiap node.

LoadBalancer

Digunakan di cloud provider untuk membuat external load balancer otomatis.

Contoh Service NodePort:

apiVersion: v1kind: Servicemetadata:  name: web-servicespec:  type: NodePort  selector:    app: web  ports:  - port: 80    targetPort: 80    nodePort: 30007

Setelah apply:

kubectl apply -f service.yaml

Aplikasi bisa diakses melalui:

http://IP_NODE:30007

4. Horizontal Pod Autoscaler (HPA)

Jika traffic naik, apakah kita harus menambah replica secara manual? Tidak perlu.

Kubernetes menyediakan Horizontal Pod Autoscaler yang bisa menambah atau mengurangi replica berdasarkan CPU atau metric tertentu.

Contoh:

kubectl autoscale deployment web-app --cpu-percent=50 --min=3 --max=10

Artinya:

  • Minimal 3 Pod
  • Maksimal 10 Pod
  • Scale ketika penggunaan CPU di atas 50%

Untuk melihat status:

kubectl get hpa

Namun perlu dicatat, metrics-server harus terinstall terlebih dahulu.


5. Resource Request dan Limit (Wajib untuk Production)

Salah satu kesalahan umum pemula adalah tidak mengatur resource.

Tanpa request dan limit, satu container bisa menghabiskan CPU dan memory node.

Contoh konfigurasi yang benar:

resources:  requests:    memory: "128Mi"    cpu: "250m"  limits:    memory: "256Mi"    cpu: "500m"

Penjelasan:

  • Request = jaminan resource minimum
  • Limit = batas maksimum penggunaan

Dengan pengaturan ini, cluster menjadi lebih stabil dan terkontrol.


6. Namespace untuk Manajemen Environment

Dalam satu cluster, sebaiknya pisahkan environment menggunakan namespace:

  • dev
  • staging
  • production

Contoh membuat namespace:

kubectl create namespace production

Deploy ke namespace tertentu:

kubectl apply -f deployment.yaml -n production

Ini membantu isolasi aplikasi dan memudahkan manajemen.


7. Best Practice di Dunia Nyata

Beberapa hal yang sebaiknya mulai diterapkan:

  1. Jangan gunakan tag image latest
  2. Gunakan readiness dan liveness probe
  3. Gunakan ConfigMap dan Secret untuk konfigurasi
  4. Selalu aktifkan monitoring (Prometheus / Grafana)
  5. Gunakan Ingress untuk routing domain

Setelah memahami dasar Kubernetes, langkah selanjutnya adalah menguasai Deployment, Service, autoscaling, dan manajemen resource. Inilah fondasi utama agar aplikasi bisa berjalan stabil di environment production.

Kubernetes bukan sekadar menjalankan container, tetapi mengelola lifecycle aplikasi secara otomatis dan terstruktur.

Pada artikel berikutnya, kita bisa membahas tentang Ingress Controller dan implementasi reverse proxy menggunakan Nginx Ingress.

Related posts

Leave a Reply

Your email address will not be published. Required fields are marked *