Apa itu Kubernetes?

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 kubectl saja karena bersifat idempoten, mendukung kondisi dan variabel, dan terintegrasi dengan secret management.

← Sebelumnya: Image Build   Berikutnya: Provision Cluster →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact