> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Pengenalan Kubernetes (K8s)

> Mengenal orkestrasi kontainer tingkat enterprise, arsitektur Control Plane vs Worker Node, objek-objek dasar (Pod, Deployment, Service), dan perbandingannya dengan Docker Swarm.

## Apa itu Kubernetes (K8s)?

**Kubernetes** (sering disingkat **K8s**, karena ada 8 huruf di antara huruf 'K' dan 's') adalah platform orkestrasi kontainer open-source yang awalnya dikembangkan oleh Google dan kini dikelola oleh Cloud Native Computing Foundation (CNCF).

Jika Docker bertugas membungkus aplikasi ke dalam kontainer, maka **Kubernetes bertugas mengorkestrasi ribuan kontainer tersebut** di puluhan hingga ratusan server fisik atau virtual secara otomatis, cerdas, dan tahan banting.

***

## Mengapa Butuh Kubernetes? (Perbandingan dengan Docker Swarm)

Sebelumnya kita telah mempelajari Docker Swarm. Lalu mengapa industri enterprise beralih ke Kubernetes?

| Fitur / Parameter | Docker Swarm | Kubernetes (K8s) |
| :- | :- | :- |
| **Tingkat Kompleksitas** | Sangat mudah dipelajari & terintegrasi langsung di Docker | Kompleksitas tinggi, kurva belajar (*learning curve*) curam |
| **Skalabilitas** | Cocok untuk skala kecil hingga menengah (\< ratusan node) | Standar industri enterprise (mampu menangani ribuan node) |
| **Ekosistem & Komunitas** | Terbatas pada ekosistem Docker | Sangat masif (didukung Google, AWS, Azure, Red Hat) |
| **Fitur Manajemen Trafik** | Routing mesh standar | Sangat fleksibel (Ingress Controller, Service Mesh / Istio) |
| **Penyimpanan (Storage)** | Volume Docker standar | Mendukung puluhan plugin penyimpanan (CSI - Cloud & On-Premise) |
| **Auto-scaling** | Manual melalui perintah CLI | Otomatis berdasarkan beban CPU/RAM (*Horizontal Pod Autoscaler - HPA*) |

***

## Arsitektur Kubernetes

Kubernetes membagi tanggung jawab kluster menjadi dua komponen utama:

```mermaid theme={null}
flowchart TD
    subgraph ControlPlane["Control Plane (Master Node)"]
        API["kube-apiserver (Pusat Komunikasi & API)"]
        ETCD["etcd (Basis Data Kluster Key-Value)"]
        SCHED["kube-scheduler (Penjadwal Pod ke Node)"]
        CM["kube-controller-manager (Pengatur Status yang Diinginkan)"]
    end

    subgraph Worker1["Worker Node 1"]
        Kubelet1["kubelet (Agen Node)"]
        KProxy1["kube-proxy (Jaringan & Routing)"]
        CRI1["Container Runtime (containerd)"]
        Pod1["Pod: App Container"]
    end

    subgraph Worker2["Worker Node 2"]
        Kubelet2["kubelet (Agen Node)"]
        KProxy2["kube-proxy (Jaringan & Routing)"]
        CRI2["Container Runtime (containerd)"]
        Pod2["Pod: App Container"]
    end

    API --> Kubelet1
    API --> Kubelet2
    SCHED --> API
    CM --> API
    API <--> ETCD
```

### 1. Control Plane (Master Node)

Otak pengendali kluster yang mengambil keputusan global:

* **`kube-apiserver`:** Pintu gerbang utama untuk semua interaksi (menerima perintah dari `kubectl` dan komponen internal).
* **`etcd`:** Penyimpanan basis data terdistribusi yang sangat konsisten untuk menyimpan semua data status kluster.
* **`kube-scheduler`:** Memilih worker node yang paling sesuai untuk menjalankan Pod baru berdasarkan kapasitas CPU/RAM.
* **`kube-controller-manager`:** Menjalankan proses controller untuk memastikan jumlah Pod aktual selalu sama dengan jumlah yang didefinisikan (*desired state*).

### 2. Worker Node

Mesin pelaksana tempat aplikasi sebenarnya berjalan:

* **`kubelet`:** Agen yang berkomunikasi dengan API Server dan memastikan kontainer di dalam Pod berjalan dengan baik.
* **`kube-proxy`:** Mengatur aturan jaringan dan penerusan port (*packet filtering*) pada setiap node.
* **Container Runtime:** Perangkat lunak yang menjalankan kontainer (misal: `containerd` atau `CRI-O`).

***

## Objek-Objek Dasar Kubernetes

Di Kubernetes, kamu tidak berinteraksi langsung dengan kontainer, melainkan melalui abstraksi objek:

1. **Pod:** Unit terkecil yang dapat di-deploy di Kubernetes. Sebuah Pod membungkus satu (atau beberapa) kontainer yang berbagi IP dan penyimpanan yang sama.
2. **Deployment:** Objek pengendali yang mengatur pembuatan, replika, dan pembaruan (*rolling update*) dari sekumpulan Pod identik.
3. **Service:** Abstraksi jaringan yang menyediakan alamat IP stabil (*ClusterIP, NodePort, LoadBalancer*) dan mendistribusikan lalu lintas ke Pod-Pod yang dinamis.
4. **Ingress:** Pintu masuk HTTP/HTTPS dari dunia luar ke Service internal (berperan sebagai reverse proxy cerdas).
5. **ConfigMap & Secret:** Memisahkan konfigurasi lingkungan dan data rahasia (password/token) dari dalam image aplikasi.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.