Materi ini adalah slide tambahan (“extra”) pada IF4031 Arsitektur Aplikasi Terdistribusi, membahas Kubernetes sebagai container orchestrator. Materi Docker/container/VM/serverless dasar sudah dibahas di catatan Computing Platform & Deployment — di sini container deployment hanya disinggung sebagai pengantar bahwa Kubernetes adalah lapisan orkestrasi di atas container runtime. Catatan ini paling relevan untuk capaian belajar terkait deployment & platform komputasi modern (VM, container, serverless, Kubernetes).
Motivasi: Kenapa Kubernetes?
Slide membuka dengan Goal yang ingin dicapai Kubernetes:
- Velocity: software update bisa cepat masuk ke production, didukung oleh:
- Immutability — komponen (container image) tidak diubah setelah dibuat, melainkan diganti dengan versi baru
- Declarative configuration — state yang diinginkan dideklarasikan, bukan langkah-langkah imperatif
- Online self-healing — sistem otomatis memulihkan diri saat terjadi kegagalan, tanpa downtime
- Scaling — kemampuan menambah/mengurangi kapasitas, didukung oleh Decoupling (komponen aplikasi tidak saling terikat erat)
- Abstracting Infrastructure — aplikasi tidak perlu tahu detail infrastruktur di baliknya
- Efficiency — pemanfaatan resource yang lebih optimal
Tren yang mendasari kebutuhan ini adalah pergeseran ke container deployment:
- Memudahkan pengaturan alokasi resource ke aplikasi/komponen aplikasi
- Memudahkan pengelolaan banyak resources
- Mendukung continuous development, integration, dan deployment
Perbandingan tiga era deployment (Traditional → Virtualized → Container) diperlihatkan pada diagram berikut: pada Traditional Deployment, semua App berjalan langsung di atas OS dan Hardware fisik tanpa isolasi; pada Virtualized Deployment, Hypervisor memungkinkan beberapa OS (VM) berjalan di satu hardware, masing-masing dengan App dan Bin/Library sendiri; pada Container Deployment, satu Container Runtime menjalankan banyak App yang masing-masing membawa Bin/Library sendiri tapi berbagi satu OS/kernel — jauh lebih ringan dibanding VM.

Peran Kubernetes
Kubernetes berperan sebagai orchestrator dengan cakupan tugas:
- Orkestrasi: pengaturan alokasi storage, keterhubungan antar-modul
- Service discovery & load balancing: pengaturan pemetaan service ke layanan, pengaturan trafik
- Automated rollout dan rollback: update aplikasi dilakukan bertahap dan bisa dikembalikan (rollback) bila gagal
- Konfigurasi & secret: pengaturan konfigurasi aplikasi (termasuk data sensitif)
- Self healing: mendeteksi dan memperbaiki komponen yang gagal secara otomatis
- Alokasi dan penjadwalan resource: menentukan container berjalan di node mana
- Horizontal scaling: menambah/mengurangi jumlah replika sesuai kebutuhan beban
Prinsip Dasar Kubernetes
Dua prinsip fundamental yang mendasari cara kerja Kubernetes:
- Deklaratif — pengguna mendeklarasikan desired state (state yang diinginkan), bukan menuliskan urutan perintah untuk mencapainya
- Controller — komponen yang terus-menerus memantau (watch) state aktual dan berusaha menyamakannya dengan desired state (control loop)
Contoh alur kerja controller: aktor menjalankan kubectl scale rc my-app --replicas=5 (2), permintaan ini disimpan di etcd melalui API server. Controller terus mem-watch Replication-Controller (1), mendeteksi ada perubahan desired state, lalu memerintahkan API server untuk membuat Pod baru hingga jumlah replika sesuai (3). Alur ini adalah pola dasar reconciliation loop yang dipakai di hampir semua controller Kubernetes.

Kubernetes Object
Kubernetes object adalah persistent entities pada sistem Kubernetes yang merepresentasikan state dari cluster:
- Aplikasi yang sedang berjalan
- Resource yang tersedia
- Policy yang mengatur perilaku aplikasi
Object merupakan record of intent — dengan membuat object, kita mendefinisikan desired state dari cluster. Object dibuat, diubah, dan dihapus melalui Kubernetes API (langsung via REST, atau via CLI seperti kubectl).
Hampir setiap object terdiri atas dua bagian:
- spec — menyatakan desired state (apa yang diinginkan)
- status — menyatakan current state (kondisi aktual saat ini, terus diperbarui oleh Kubernetes)
Saat membuat object, deskripsi diberikan ke API server dalam format JSON (atau YAML yang kemudian dikonversi ke JSON oleh kubectl).
Contoh manifest YAML untuk sebuah Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80Manifest ini mendeklarasikan: buatkan Deployment bernama nginx-deployment, jalankan 2 Pod yang cocok dengan label app: nginx, setiap Pod berisi 1 container nginx image versi 1.14.2 yang membuka port 80. Kubernetes (lewat controller & scheduler) yang akan mewujudkan desired state ini secara otomatis.
Konsep Dasar
- Cluster: sekumpulan node yang menyediakan resource CPU, memory, storage, dan networking
- Nodes: sebuah host, bisa berupa mesin fisik maupun virtual
- Deployment: object untuk deklaratif update terhadap Pod dan ReplicaSet
- Pod: unit kerja terkecil di Kubernetes; dapat terdiri atas 1 atau lebih container yang berbagi namespace (network, IPC) yang sama
- ReplicaSet: mengelola stable set dari replika Pod (memastikan jumlah Pod yang berjalan sesuai target)
Anatomi Pod
Sebuah Pod membungkus satu atau lebih container dalam satu IPC Linux namespace dan satu Network namespace yang sama, sehingga semua container di dalamnya berbagi alamat IP dan bisa saling berkomunikasi lewat localhost. Contoh pada diagram: container nginx (aplikasi utama) dan container envoy (sidecar proxy) berjalan dalam CGroup dan PID terpisah, tetapi berada dalam Network namespace yang sama, dijembatani oleh Pause container (container “penahan” namespace jaringan Pod). Kubelet-lah yang mengelola siklus hidup Pod ini di level node.

Arsitektur Kubernetes
Sebuah Kubernetes cluster terdiri atas dua kelompok komponen besar: Control Plane (otak cluster) dan sekumpulan Node (tempat aplikasi benar-benar berjalan).

Pada diagram di atas terlihat bagaimana API server menjadi hub komunikasi: menerima perintah dari luar, disinkronkan ke etcd, dipantau oleh scheduler (sched) dan controller-manager (c-m), serta terhubung ke setiap Node yang menjalankan kubelet dan kube-proxy. Cloud controller manager (c-c-m) bersifat opsional dan hanya menyambungkan cluster ke Cloud provider API bila cluster berjalan di lingkungan cloud.
Control Plane
Control plane adalah layer orkestrasi yang menyediakan API dan interface untuk mendefinisikan serta mengelola siklus hidup container.
| Komponen | Fungsi |
|---|---|
| kube-apiserver | Komponen control plane yang menyediakan/mengekspose Kubernetes API; titik masuk semua request (dari kubectl, controller, kubelet, dll) |
| etcd | Key-value store terdistribusi untuk menyimpan seluruh data/state cluster secara persisten |
| kube-scheduler | Memonitor Pod yang belum punya alokasi node, lalu mengalokasikan (menjadwalkan) Pod tersebut ke node yang sesuai |
| kube-controller-manager | Menjalankan semua proses controller: node controller, job controller, endpointslice controller, serviceaccount controller, dll |
| cloud-controller-manager (opsional) | Mengelola logic yang spesifik terhadap cloud provider; hanya dipakai bila cluster berjalan di cloud |
kube-controller-manager secara logic menjalankan beberapa controller terpisah, namun secara realitas berjalan sebagai satu proses tunggal:
- Node controller — memonitor dan menangani node
- Job controller — memonitor dan menangani job, serta membuat Pod untuk menjalankan job tersebut
- Endpoints controller — mengisi object Endpoint (menggabungkan Service dan Pod)
- Service account & token controllers — membuat default account dan API access untuk namespace yang baru dibuat
cloud-controller-manager menyambungkan Kubernetes cluster dengan cloud provider API, mencakup:
- Node controller
- Route controller — setup route pada infrastruktur cloud
- Service controller — pengelolaan load balancer cloud
Node Component (Worker Node)
| Komponen | Fungsi |
|---|---|
| kubelet | Agent yang berjalan di setiap node; memastikan container benar-benar menjalankan Pod sesuai spesifikasi |
| kube-proxy | Network proxy yang mengelola network rules pada node; mengimplementasikan sebagian dari Service object |
| container runtime | Pengelola container pada node, misal containerd, cri-o (implementasi apa pun yang mendukung Kubernetes CRI) |
Node sendiri adalah sebuah server dengan komponen berikut terinstal: OS, systemd, kubelet, container runtime, kube-proxy, dan CNI provider (plugin jaringan). Sebuah node bergabung ke cluster dengan registrasi ke kube-apiserver, baik secara self register oleh kubelet maupun manual addition oleh admin.
Kubelet secara khusus:
- Menjalankan control loop yang mengawasi Pod mana yang dijadwalkan pada node tersebut, memastikan pod itu benar-benar berjalan
- Secara berkala memberi tahu API server bahwa kubelet pada node tersebut sehat (healthy)
- Melakukan garbage collection untuk resource Pod yang sudah tidak dipakai, termasuk ephemeral storage dan network device
- Memanfaatkan CNI (Container Network Interface) dan CRI (Container Runtime Interface)
Addons Cluster
Selain komponen inti, cluster Kubernetes umumnya dilengkapi addons:
- Cluster DNS — menyediakan layanan DNS untuk cluster
- Dashboard — web-based UI untuk mengelola cluster
- Container Resource Monitoring
- Cluster-level logging
- Network plugins
Kubernetes API
API adalah antarmuka yang disediakan sistem untuk query dan manipulasi state object pada cluster (Pods, Namespace, ConfigMaps, Events, dll). API bisa diakses melalui:
- CLI tool seperti kubectl, kubeadm
- Client libraries
- Langsung melalui REST API
Beberapa catatan penting soal API:
- Discovery API menyediakan informasi tentang API Kubernetes: nama, resource, versi, dan operasi yang didukung
- Saat ini (menurut slide) terdapat sekitar 70 API types
- Spesifikasi API dapat diakses via OpenAPI melalui endpoint
/openapi/v2 - Kubernetes juga mendukung format serialisasi protobuf

Pengelompokan API
API Kubernetes dapat dikelompokkan menjadi:
- API groups, misalnya
autoscaling/v1,autoscaling/v2beta2 - Resource category:
- Workloads — object untuk manage dan menjalankan container
- Discovery & load balancing — object untuk mengekspose workload ke luar dan load balancing
- Config and storage — object untuk inisialisasi, konfigurasi, dan persist data
- Cluster — object untuk mendefinisikan konfigurasi cluster
- Metadata — object untuk mengkonfigurasi behaviour resource pada cluster
Versioning dilakukan pada level API (bukan pada resource atau field individual), dan API resource dibedakan berdasarkan kombinasi API group, resource type, namespace, dan nama.
Kubernetes API juga dapat diperluas (API extension) melalui dua mekanisme: Custom Resources (mendefinisikan jenis object baru) dan mengimplementasikan aggregation layer.
Objek-Objek Utama Kubernetes
Berikut daftar object per kategori sebagaimana pada slide, dilanjutkan tabel fungsi dan use case untuk objek-objek yang paling sering dipakai sehari-hari.
Workloads: Container, CronJob, ControllerRevision, DaemonSet, Deployment, HorizontalPodAutoscaler, Job, Pod, PodTemplate, PriorityClass, ReplicaSet, ReplicationController, StatefulSet
Discovery: Endpoints, EndpointSlice, Ingress, IngressClass, Service
Config and Storage: ConfigMap, CSIDriver, CSINode, CSIStorageCapacity, Secret, PersistentVolumeClaim, StorageClass, Volume, VolumeAttachment
Cluster: Namespace, Node, PersistentVolume, ResourceQuota, Role, RoleBinding, ClusterRole, ClusterRoleBinding, NetworkPolicy
| Objek | Fungsi | Contoh Use Case |
|---|---|---|
| Pod | Unit kerja terkecil; membungkus 1+ container yang berbagi network & IPC namespace | Menjalankan 1 instance aplikasi web beserta sidecar proxy-nya |
| Deployment | Deklaratif update untuk Pod & ReplicaSet; mengatur rollout/rollback versi aplikasi | Mengelola versi aplikasi stateless (web server) dengan kemampuan update tanpa downtime |
| ReplicaSet | Menjaga jumlah replika Pod tetap sesuai target (dibuat otomatis oleh Deployment) | Memastikan selalu ada 3 Pod backend API yang hidup |
| StatefulSet | Seperti Deployment tapi untuk aplikasi stateful, menjaga identitas & urutan Pod | Basis data terdistribusi yang butuh identitas node tetap (mis. cluster database) |
| DaemonSet | Memastikan 1 salinan Pod berjalan di setiap (atau sebagian) node | Agent logging/monitoring yang harus ada di semua node |
| Job / CronJob | Menjalankan Pod hingga tugas selesai (Job), atau terjadwal berkala (CronJob) | Job batch processing sekali jalan, atau backup terjadwal tiap malam |
| HorizontalPodAutoscaler | Menyesuaikan jumlah replika Pod secara otomatis berdasarkan metrik (mis. CPU) | Menambah replika Pod saat beban trafik naik, mengurangi saat sepi |
| Service | Mengekspose sekelompok Pod sebagai satu titik akses stabil, sekaligus load balancing | Menyediakan satu alamat/DNS tetap untuk backend yang Pod-nya berganti-ganti IP |
| Ingress | Mengatur akses HTTP/HTTPS dari luar cluster ke Service di dalamnya (routing berbasis host/path) | Mengarahkan api.contoh.com dan web.contoh.com ke Service yang berbeda dalam satu cluster |
| Namespace | Menyediakan scope/isolasi nama untuk resource dalam satu cluster | Memisahkan environment dev, staging, production dalam satu cluster |
| ConfigMap | Menyimpan data konfigurasi non-rahasia dan menyuntikkannya ke Pod | Menyimpan konfigurasi environment variable atau file config aplikasi |
| Secret | Menyimpan data sensitif (password, token, key) untuk dipakai Pod | Menyimpan kredensial database yang dipakai backend |
| PersistentVolume / PersistentVolumeClaim | Menyediakan & meminta storage yang persisten, lepas dari siklus hidup Pod | Menyimpan data database agar tidak hilang saat Pod di-restart |
Persistence
State seluruh cluster (semua object, konfigurasi, status) disimpan secara persisten oleh etcd — inilah “sumber kebenaran” (source of truth) yang dirujuk oleh API server, scheduler, dan seluruh controller.
Manajemen Object
Kubernetes object dapat dikelola dengan 3 cara:
- Imperative command — perintah langsung, misal
kubectl scale … - Imperative object configuration — mengacu ke file manifest tapi dieksekusi secara imperatif, misal
kubectl create -f nginx.yaml - Declarative object configuration — mendeklarasikan desired state dari kumpulan file dan membiarkan Kubernetes menyamakan state, misal
kubectl apply -f configs/
Pendekatan declarative inilah yang selaras dengan prinsip dasar Kubernetes (deklaratif + controller reconciliation) dan menjadi cara yang direkomendasikan untuk pengelolaan production.
Identitas, Namespace, dan Metadata Object
- Object name & ID: setiap object memiliki Name yang unik untuk jenis resource tersebut, dan UID yang unik dalam satu cluster.
- Namespace: menyediakan scope untuk name (namespace tidak bisa nested). Tidak semua object berada dalam namespace — misalnya Node dan PersistentVolume bersifat cluster-wide, tidak terikat namespace. Sejak v1.21, label
kubernetes.io/metadata.nameotomatis berisi nama namespace tersebut. - Namespace & DNS: saat sebuah Service dibuat, Kubernetes otomatis membuat entri DNS berformat
<service-name>.<namespace-name>.svc.cluster.local. Entri ini akan resolve ke Service yang berada di namespace yang sama; untuk mengakses Service lintas namespace, klien harus menggunakan FQDN lengkap tersebut. - Label & Selector: label adalah pasangan key-value yang ditempel ke object, berguna untuk mencari/menampilkan/menyeleksi object atau resource yang diinginkan (misalnya Selector pada Deployment/Service menentukan Pod mana yang menjadi target).
- Annotation: metadata tambahan pada object (di luar label) yang biasanya dipakai untuk menyimpan informasi non-identifikasi seperti deskripsi, informasi tooling, atau konfigurasi addon — slide memberikannya sebagai pertanyaan diskusi kelas (“kapan annotation digunakan?”) tanpa elaborasi lebih lanjut.
- Field Selector: digunakan untuk mencari resource berdasarkan nilai field tertentu (bukan label), misalnya mencari Pod berdasarkan field
status.phase. - Finalizers: keys yang memberi tahu Kubernetes untuk menunggu kondisi tertentu terpenuhi sebelum sebuah resource benar-benar dihapus; dipakai untuk mengendalikan proses garbage collection resource secara terkontrol.
Referensi Slide
- Vyas, Jay, and Chris Love. Core Kubernetes. Simon and Schuster, 2022.
- Ibryam, Bilgin, and Roland Huß. Kubernetes Patterns. O’Reilly Media, Inc., 2022.
- Miriyala Kannaiah, Govardhana. Kubernetes Anti-Patterns: Overcome common pitfalls to achieve optimal deployments and a flawless Kubernetes ecosystem. 2024.
Flashcard
flashcards Apa fungsi utama Kubernetes sebagai orchestrator container? :: Mengatur orkestrasi (storage & konektivitas antar-modul), service discovery & load balancing, automated rollout/rollback, konfigurasi & secret, self healing, alokasi/penjadwalan resource, dan horizontal scaling. Apa dua prinsip dasar yang membuat Kubernetes bekerja secara self-healing? :: Deklaratif (mendefinisikan desired state) dan Controller (control loop yang terus menyamakan current state dengan desired state di etcd/API server). Apa itu Pod dan mengapa ia disebut unit kerja terkecil di Kubernetes? :: Pod adalah unit kerja terkecil yang dapat berisi 1 atau lebih container yang berbagi network namespace & IPC namespace yang sama (jadi bisa saling komunikasi lewat localhost). Apa perbedaan spec dan status pada Kubernetes object? :: spec menyatakan desired state (apa yang diinginkan pengguna), sedangkan status menyatakan current state (kondisi aktual yang terus diperbarui Kubernetes). Sebutkan 5 komponen utama Control Plane Kubernetes. :: kube-apiserver, etcd, kube-scheduler, kube-controller-manager, dan cloud-controller-manager (opsional, khusus cluster di cloud). Apa fungsi kubelet dan kube-proxy pada Worker Node? :: kubelet adalah agent yang memastikan container di node benar-benar menjalankan Pod sesuai spesifikasi; kube-proxy adalah network proxy yang mengelola network rules dan mengimplementasikan sebagian dari Service object. Apa perbedaan Deployment dan ReplicaSet? :: Deployment mengatur deklaratif update (termasuk rollout/rollback versi) terhadap Pod dan ReplicaSet, sedangkan ReplicaSet hanya menjaga agar jumlah replika Pod tetap sesuai target — ReplicaSet biasanya dibuat otomatis oleh Deployment. Apa 3 cara mengelola Kubernetes object? :: Imperative command (mis. kubectl scale), Imperative object configuration (kubectl create -f file.yaml), dan Declarative object configuration (kubectl apply -f folder/). Apa yang menyimpan seluruh state cluster Kubernetes secara persisten? :: etcd, sebuah key-value store terdistribusi yang menjadi sumber kebenaran (source of truth) bagi API server, scheduler, dan semua controller.