Apa itu Kubernetes? #
Kamu sudah tahu cara menjalankan container dengan Docker dan mengelolanya dengan Ansible. Tapi ada masalah yang Docker saja tidak bisa selesaikan: bagaimana menjalankan ratusan container di puluhan server secara andal, memastikan container yang crash di-restart otomatis, mendistribusikan traffic secara merata, dan melakukan rolling update tanpa downtime? Kubernetes hadir untuk menjawab tantangan-tantangan ini. Artikel ini membahas apa itu Kubernetes, bagaimana ia bekerja, dan di mana Ansible masuk dalam ekosistemnya.
Dari Container ke Orkestrasi #
Bayangkan kamu punya aplikasi yang berjalan dalam 20 container, tersebar di 5 server. Tanpa orkestrasi, kamu harus:
Masalah tanpa orkestrasi:
- Container di server-3 crash → tidak ada yang restart otomatis
- Server-2 penuh → tidak ada yang tahu container baru harus ke server mana
- Deploy versi baru → harus stop dan restart manual di setiap server
- Server-4 down → traffic ke container di server itu tidak dialihkan otomatis
Kubernetes menyelesaikan semua ini melalui orkestrasi otomatis:
Dengan Kubernetes:
- Container crash → Kubernetes restart otomatis di node yang sehat
- Deploy versi baru → rolling update tanpa downtime, otomatis
- Node down → container dipindahkan ke node lain otomatis
- Traffic didistribusikan otomatis ke container yang sehat
Arsitektur Kubernetes #
Kubernetes terdiri dari dua jenis node: control plane (otak cluster) dan worker nodes (tempat container berjalan):
Control Plane:
├── API Server — pintu masuk semua operasi Kubernetes
├── etcd — database cluster state (key-value)
├── Scheduler — menentukan node mana yang menjalankan Pod
└── Controller Manager — memastikan cluster state sesuai definisi
Worker Nodes:
├── kubelet — agent yang menjalankan Pod di node ini
├── kube-proxy — networking dan load balancing
└── Container Runtime — Docker, containerd, atau CRI-O
Konsep Dasar Kubernetes #
Pod adalah unit terkecil di Kubernetes — satu atau lebih container yang berjalan bersama dan berbagi network dan storage:
# Pod paling sederhana
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: registry.company.com/myapp:2.1.0
ports:
- containerPort: 8080
Deployment mengelola replikasi Pod dan rolling update:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3 # Selalu ada 3 instance
selector:
matchLabels:
app: myapp
template:
spec:
containers:
- name: myapp
image: registry.company.com/myapp:2.1.0
Service mengekspos Pod ke jaringan dan melakukan load balancing:
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp # Arahkan traffic ke Pod berlabel app: myapp
ports:
- port: 80
targetPort: 8080
type: ClusterIP
Peran Ansible dalam Ekosistem Kubernetes #
Ada dua peran berbeda yang bisa dimainkan Ansible dalam konteks Kubernetes:
Peran 1: Provisioning Cluster
Ansible untuk:
├── Setup OS di semua node (common packages, sysctl, firewall)
├── Install container runtime (containerd)
├── Install kubeadm, kubelet, kubectl
├── Inisialisasi control plane dengan kubeadm
└── Join worker nodes ke cluster
Peran 2: Mengelola Workload
Ansible untuk:
├── Deploy manifest Kubernetes (Deployment, Service, ConfigMap)
├── Mengelola Helm chart
├── Mengelola namespace dan RBAC
└── Operasi cluster (drain node, upgrade)
Keduanya adalah pola yang valid dan saling melengkapi — Ansible bisa melakukan keduanya, atau hanya salah satunya.
Ansible vs kubectl #
kubectl:
✓ Tool utama untuk berinteraksi dengan Kubernetes
✓ Cepat untuk operasi manual satu kali
✗ Tidak idempoten — apply dua kali bisa berbeda hasilnya
✗ Tidak ada kondisi, loop, atau variabel
✗ Tidak terintegrasi dengan manajemen secret
Ansible + kubernetes.core collection:
✓ Idempoten — aman dijalankan berulang kali
✓ Kondisi, loop, variabel, dan templating penuh
✓ Integrasi dengan Vault untuk secret management
✓ Bisa dikombinasikan dengan provisioning infrastruktur
✗ Lebih verbose untuk operasi sederhana
✗ Butuh setup tambahan (collection, kubeconfig)
Ringkasan #
- Kubernetes adalah platform orkestrasi container — mengelola deployment, scaling, self-healing, dan load balancing secara otomatis.
- Arsitektur Kubernetes terdiri dari control plane (API server, etcd, scheduler) dan worker nodes (kubelet, kube-proxy, container runtime).
- Tiga konsep dasar: Pod (unit terkecil), Deployment (mengelola replikasi dan update), Service (load balancing dan service discovery).
- Ansible berperan dalam dua hal di konteks Kubernetes: provisioning cluster (setup OS, instal komponen) dan mengelola workload (deploy manifest, Helm chart).
- Ansible lebih baik dari
kubectlsaja karena bersifat idempoten, mendukung kondisi dan variabel, dan terintegrasi dengan secret management.