Di balik layar, Karpenter adalah controller yang mendengarkan pod tak terjadwalkan, memilih NodePool yang cocok, lalu memanggil cloud provider untuk meluncurkan node. Episode ini membedah arsitektur, NodePool, NodeClass, disruption controller, dan label karpenter.sh.

Di episode 1 kalian sudah memahami mengapa Karpenter ada: menggantikan model nodegroup yang reaktif dan lambat dengan provisioning yang cepat, efisien, dan sederhana. Sekarang saatnya melihat bagaimana Karpenter bekerja di balik layar.
Episode ini membedah arsitektur inti Karpenter: alur dari pod yang tidak terjadwalkan sampai node siap dipakai, dua konsep kunci yang akan menemani kita sepanjang series — NodePool dan NodeClass — serta komponen CRD dan label yang menjadi "bahasa" Karpenter.
Karpenter berjalan sebagai controller di dalam cluster. Ia bukan bagian dari control plane, melainkan deployment biasa yang bisa kalian lihat di namespace karpenter. Alurnya seperti ini:
Pod tidak terjadwalkan (Pending / Unschedulable)
│
▼
Controller Karpenter mendeteksi pod
│
▼
NodePool yang cocok dipilih (scheduling & capacity)
│
▼
Cloud provider (AWS) meluncurkan instance
│
▼
Node terdaftar ke cluster, pod dijadwalkanTip
Kuncinya: Karpenter tidak menunggu nodegroup. Ia langsung membawa kebutuhan pod ke cloud provider dan memilih instance yang paling pas. Itulah kenapa latensinya jauh di bawah Cluster Autoscaler.
Dua konsep ini adalah fondasi seluruh konfigurasi Karpenter. Memahami pembagian perannya menyelamatkan kalian dari kebingungan di episode-episode berikutnya.
NodePool menjawab pertanyaan apa yang boleh dijadwalkan. Ia mendefinisikan:
Sebuah NodePool menunjuk ke NodeClass untuk urusan infrastruktur.
NodeClass menjawab pertanyaan di mana dan bagaimana node dibuat. Di AWS, ia adalah EC2NodeClass dan mendefinisikan:
| Aspek | NodePool | NodeClass |
|---|---|---|
| Peran | Scheduling & capacity | Infrastruktur |
| Pertanyaan | Apa yang boleh dijadwalkan | Di mana dan bagaimana dibuat |
| Di AWS | karpenter.sh/v1 NodePool | karpenter.k8s.aws/v1 EC2NodeClass |
| Contoh isi | Requirements, weight, disruption | AMI, subnet, security group, userData |
Pembagian ini membuat satu NodeClass bisa dipakai banyak NodePool, atau satu NodePool bisa menunjuk ke NodeClass berbeda — kombinasi yang fleksibel untuk berbagai jenis workload.
Karpenter 1.14.0 bekerja lewat sekumpulan CustomResourceDefinition:
karpenter.sh/v1) — kebijakan scheduling, penerus resource provisioner yang lama.karpenter.k8s.aws/v1) — spesifikasi infrastruktur AWS.API v1 adalah kondisi GA. Sejak Karpenter 1.1.0, API v1beta1 yang lama dihapus, jadi seluruh konfigurasi di series ini memakai API v1.
Saat membuat node, Karpenter menempelkan label dan anotasi yang sangat berguna untuk operasional:
| Nama | Tipe | Fungsi |
|---|---|---|
| karpenter.sh/nodepool | label | Node berasal dari NodePool mana |
| karpenter.sh/capacity-type | label | spot atau on-demand |
| node.kubernetes.io/instance-type | label | Instance type EC2 yang dipakai |
| topology.kubernetes.io/zone | label | Availability zone node |
| karpenter.sh/registered | anotasi | Menandai node sudah terdaftar ke cluster |
| karpenter.sh/do-not-disrupt | anotasi | Melindungi pod dari disruption |
kubectl get nodes -l karpenter.sh/nodepool=default -o wide
kubectl get nodepools
kubectl get nodeclaimsPerhatikan label pada output kubectl get nodes -l karpenter.sh/nodepool=default -o wide — kalian akan melihat instance type, zona, dan capacity type yang dipilih Karpenter untuk setiap node.
Episode ini membedah arsitektur Karpenter. Karpenter adalah controller di dalam cluster yang mendeteksi pod Unschedulable, memilih NodePool yang cocok, lalu memanggil cloud provider untuk meluncurkan node yang optimal. Dua konsep kunci yang harus kalian pegang adalah NodePool (kebijakan scheduling dan capacity) dan NodeClass (spesifikasi infrastruktur). CRD seperti NodeClaim dan disruption controller melengkapi arsitektur, sementara label karpenter.sh menjadi jembatan observability.
Inti yang harus dibawa pulang:
Di episode 3 kita langsung praktik: setup dan instalasi. Kita akan membuat cluster EKS dari nol, memasang CRD dan controller Karpenter lewat Helm, membangun IAM role minimal, lalu memverifikasi dengan contoh NodePool dan EC2NodeClass pertama. Sampai jumpa di episode berikutnya!