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.
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: 80Dengan 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 pods2. 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.26Kubernetes akan melakukan rolling update secara bertahap. Anda bisa melihat prosesnya:
kubectl rollout status deployment/web-appJika ternyata terjadi error, rollback bisa dilakukan dengan:
kubectl rollout undo deployment/web-appInilah 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: 30007Setelah apply:
kubectl apply -f service.yamlAplikasi bisa diakses melalui:
http://IP_NODE:300074. 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=10Artinya:
- Minimal 3 Pod
- Maksimal 10 Pod
- Scale ketika penggunaan CPU di atas 50%
Untuk melihat status:
kubectl get hpaNamun 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 productionDeploy ke namespace tertentu:
kubectl apply -f deployment.yaml -n productionIni membantu isolasi aplikasi dan memudahkan manajemen.
7. Best Practice di Dunia Nyata
Beberapa hal yang sebaiknya mulai diterapkan:
- Jangan gunakan tag image
latest - Gunakan readiness dan liveness probe
- Gunakan ConfigMap dan Secret untuk konfigurasi
- Selalu aktifkan monitoring (Prometheus / Grafana)
- 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.
