Kubernetes adalah sistem operasi cloud-native yang mengatur container secara otomatis. Kalian mempelajari managed Kubernetes di cloud — EKS, GKE, AKS — konsep node pool, workload, service, dan ingress, lalu membuat cluster dan men-deploy aplikasi container yang lengkap dengan scale dan upgrade dari kode.

Sejak episode 3 kalian sudah menjalankan container di cloud lewat layanan container dasar. Sekarang saatnya naik level ke orchestrator: Kubernetes. Kubernetes adalah sistem yang mengotomasi deployment, scaling, dan operasional container — tetapi mengelola Kubernetes sendiri di VM adalah pekerjaan besar yang menyita waktu (dan biaya).
Di sinilah managed Kubernetes berperan: AWS EKS, Google GKE, dan Azure AKS menyediakan control plane yang dikelola provider. Kalian fokus pada aplikasi; provider mengurus control plane, patching, dan high availability-nya. Episode 10 membahas konsep inti Kubernetes, node pools, workload & service, lalu praktik membuat cluster dan men-deploy aplikasi.
Menjalankan banyak container secara manual penuh masalah: ke mana request diarahkan? Bagaimana aplikasi tetap hidup saat satu node mati? Bagaimana scale otomatis? Kubernetes menjawab semuanya dengan declarative state: kalian menyatakan hasil akhir (10 replica, image v2.0), dan control plane bekerja agar kenyataan sesuai.
| Aspek | Self-hosted K8s | Managed (EKS/GKE/AKS) |
|---|---|---|
| Control plane | Kalian install & patch | Provider kelola |
| HA control plane | Kalian desain sendiri | Bawaan |
| Upgrade | Manual, berisiko | Terkelola / semi-manual |
| Biaya ops | Tinggi | Lebih rendah (fokus ke app) |
| Kontrol | Penuh | Sedikit dikurangi |
Aturan praktis 2026: self-hosted hanya untuk alasan spesifik (regulasi, kasus khusus). Untuk hampir semua organisasi, managed K8s adalah pilihan default.
Membuat cluster GKE:
gcloud container clusters create lab-cluster \
--region=asia-southeast2 \
--node-locations=asia-southeast2-a,asia-southeast2-b \
--machine-type=e2-standard-2 \
--num-nodes=2 \
--enable-autoscaling --min-nodes=1 --max-nodes=5
gcloud container clusters get-credentials lab-clusterPerhatikan --enable-autoscaling — node pool yang bisa scale otomatis sesuai beban (episode 21). Ini bukan fitur "bonus", melainkan bagian dari desain yang benar.
Pod adalah unit terkecil (satu atau lebih container). Deployment mengelola pod: jumlah replica, image, rollout strategy.
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
labels:
app: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.27
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256MiDua hal yang wajib kalian biasakan di Kubernetes:
image: nginx:1.27 memakai tag versi spesifik, bukan latest — latest membuat rollout tidak reproducible.Service memberikan alamat IP stabil ke sekumpulan pod (supaya load balancer tidak mengejar pod yang berpindah). Ingress mengatur routing HTTP eksternal ke service, lengkap dengan TLS.
apiVersion: v1
kind: Service
metadata:
name: webapp
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp
spec:
rules:
- host: lab.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp
port:
number: 80Di cloud, Ingress di-backing oleh cloud load balancer (ALB/NLB di EKS, HTTP LB di GKE, Application Gateway di AKS) — kalian cukup menulis manifest, provider yang memasang load balancer fisiknya.
Note
Jangan lewatkan latihan dasar kubectl ini: kubectl get pods, kubectl get nodes, kubectl logs, kubectl describe pod. Sekitar 80% troubleshooting harian kalian dimulai dari keempat perintah ini — plus kubectl get events untuk peristiwa di balik layar.
Mari deploy aplikasi lengkap — deployment, service, dan ingress:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
kubectl rollout status deployment/webapp
kubectl get pods
kubectl get svc
kubectl get ingressUji scaling manual — jumlah replica bisa diubah kapan saja, dan Kubernetes menyesuaikan:
kubectl scale deployment webapp --replicas=5
kubectl get pods -o wide
kubectl scale deployment webapp --replicas=3Perhatikan pola declarative: kalian tidak "membuat pod" atau "menghapus pod", kalian menyatakan jumlah yang diinginkan (--replicas=5), dan Kubernetes bekerja agar keadaan nyata sesuai. Semua perubahan lain — image, environment, config — mengikuti pola yang sama.
kubectl set image deployment/webapp webapp=nginx:1.29
kubectl rollout status deployment/webapp
kubectl rollout history deployment/webappJika versi baru bermasalah, rollback semudah satu perintah:
kubectl rollout undo deployment/webappInilah kekuatan deployment strategy: aplikasi di-update dan di-rollback tanpa downtime, otomatis oleh Kubernetes.
| Aspek | EKS (AWS) | GKE (GCP) | AKS (Azure) |
|---|---|---|---|
| Control plane | Kelola AWS | Kelola Google (standar gratis) | Kelola Azure |
| Node VM | EC2 / Fargate | Compute Engine / Autopilot | Virtual Machines / AKS |
| Kelebihan | Integrasi AWS paling dalam | Autopilot & pengalaman Google | Integrasi Azure AD/Windows |
| Autoscaling | Karpenter / CA | Cluster autoscaler | Cluster autoscaler |
| Network | VPC + AWS Load Balancer | VPC native + HTTP LB | Azure VNet + App Gateway |
Pilihannya sering ditentukan oleh provider yang sudah dipakai organisasi. Kemampuan dasar — deployment, service, ingress — identik lintas provider karena semua Kubernetes. Yang membedakan hanya integrasi di sekitarnya.
latest — tidak reproducible; selalu pin versi.Inti yang harus dibawa pulang:
kubectl rollout.Di episode 11 selanjutnya kita akan membahas serverless architecture — API Gateway + Lambda/Cloud Functions, event-driven design, cold start trade-off, dan membangun serverless API yang lengkap. Sampai jumpa di episode 11!