Pandangan jelas tentang pilihan awal Joe Beda di Kubernetes—API deklaratif, control loop, Pods, Services, dan label—dan bagaimana pilihan itu membentuk platform aplikasi modern.

Joe Beda adalah salah satu tokoh kunci di balik desain awal Kubernetes—bersama para pendiri lain yang membawa pelajaran dari sistem internal Google ke platform terbuka. Pengaruhnya bukan soal mengejar fitur yang sedang tren; melainkan memilih primitif sederhana yang tahan kondisi produksi nyata dan tetap bisa dipahami oleh tim sehari-hari.
Keputusan awal itu yang membuat Kubernetes menjadi lebih dari “alat container.” Ia berubah menjadi kernel yang dapat digunakan ulang untuk platform aplikasi modern.
“Orkestrasi container” adalah seperangkat aturan dan otomasi yang menjaga aplikasi Anda tetap berjalan saat mesin gagal, trafik melonjak, atau Anda melakukan versi baru. Alih-alih seorang manusia yang mengasuh server, sistem menjadwalkan container ke komputer, me-restart saat crash, menyebarkannya untuk ketahanan, dan menyambungkan jaringan agar pengguna bisa mengaksesnya.
Sebelum Kubernetes umum digunakan, tim sering merangkai skrip dan alat kustom untuk menjawab pertanyaan dasar:
Sistem DIY itu berhasil—sampai tidak lagi. Setiap aplikasi atau tim baru menambah logika satu-off, dan konsistensi operasional sulit dicapai.
Artikel ini menelusuri keputusan desain awal Kubernetes (“bentuk” Kubernetes) dan mengapa keputusan itu masih memengaruhi platform modern: model deklaratif, controller, Pods, label, Services, API yang kuat, state klaster yang konsisten, penjadwalan yang dapat dipasang, dan extensibility. Bahkan jika Anda tidak menjalankan Kubernetes langsung, besar kemungkinan Anda menggunakan platform yang dibangun di atas ide-ide ini—atau bergulat dengan masalah yang sama.
Sebelum Kubernetes, “menjalankan container” biasanya berarti menjalankan beberapa container. Tim merangkai bash script, cron job, golden image, dan beberapa alat ad-hoc untuk melakukan deployment. Ketika sesuatu rusak, perbaikan sering hidup di kepala seseorang—atau di README yang tak dipercaya siapa pun. Operasi adalah aliran intervensi satu-ke-satu: me-restart proses, mengubah penunjukan load balancer, membersihkan disk, dan menebak mesin mana yang aman disentuh.
Container memudahkan packaging, tetapi tidak menghilangkan bagian produksi yang berantakan. Pada skala, sistem gagal dengan lebih banyak cara dan lebih sering: node hilang, jaringan terpartisi, image rollout tidak konsisten, dan workload menyimpang dari apa yang Anda pikir berjalan. Deploy yang “sederhana” bisa berubah menjadi kaskade—beberapa instance diperbarui, beberapa tidak, beberapa macet, beberapa sehat tapi tidak terjangkau.
Masalah sebenarnya bukan memulai container. Melainkan menjaga container yang benar berjalan, dalam bentuk yang benar, meski terjadi churn konstan.
Tim juga bergulat dengan lingkungan berbeda: hardware on‑prem, VM, cloud awal, dan berbagai pengaturan jaringan serta penyimpanan. Setiap platform punya kosakata dan pola kegagalan sendiri. Tanpa model bersama, setiap migrasi berarti menulis ulang tooling operasional dan melatih ulang orang.
Kubernetes berusaha menawarkan satu cara konsisten untuk mendeskripsikan aplikasi dan kebutuhan operasionalnya, terlepas dari lokasi mesin.
Developer ingin self-service: deploy tanpa tiket, scale tanpa minta kapasitas, dan rollback tanpa drama. Tim ops ingin prediktabilitas: health check standar, deployment yang dapat diulang, dan sumber kebenaran yang jelas untuk apa yang seharusnya berjalan.
Kubernetes tidak mencoba menjadi scheduler keren. Ia bertujuan menjadi fondasi untuk platform aplikasi yang andal—yang mengubah realitas berantakan menjadi sistem yang bisa Anda pikirkan.
Salah satu pilihan paling berpengaruh adalah membuat Kubernetes deklaratif: Anda mendeskripsikan apa yang Anda inginkan, dan sistem bekerja agar realitas cocok dengan deskripsi itu.
Termostat adalah contoh sehari-hari yang berguna. Anda tidak menyalakan dan mematikan pemanas setiap beberapa menit. Anda mengatur suhu yang diinginkan—misal 21°C—dan termostat terus memeriksa ruangan dan menyesuaikan pemanas agar tetap dekat target.
Kubernetes bekerja serupa. Alih-alih memberi instruksi langkah demi langkah, “jalankan container ini di mesin itu, lalu restart jika gagal,” Anda mendeklarasikan hasil: “Saya ingin 3 salinan aplikasi ini berjalan.” Kubernetes terus memeriksa apa yang sebenarnya berjalan dan mengoreksi drift.
Konfigurasi deklaratif mengurangi “checklist ops” tersembunyi yang sering hidup di kepala seseorang atau di runbook yang setengah diperbarui. Anda menerapkan konfigurasi, dan Kubernetes menangani mekanik—penempatan, restart, dan merekonsiliasi perubahan.
Ini juga membuat review perubahan lebih mudah. Perubahan terlihat sebagai diff di konfigurasi, bukan rangkaian perintah ad-hoc.
Karena desired state tertulis, Anda dapat menggunakan pendekatan yang sama di dev, staging, dan produksi. Lingkungan mungkin berbeda, tetapi niat tetap konsisten, sehingga deployment lebih dapat diprediksi dan lebih mudah diaudit.
Sistem deklaratif punya kurva belajar: Anda perlu berpikir dalam “apa yang harus benar” alih-alih “apa yang harus saya lakukan selanjutnya.” Mereka juga bergantung pada default yang baik dan konvensi yang jelas—tanpa itu, tim bisa membuat konfigurasi yang secara teknis bekerja tapi sulit dipahami dan dipelihara.
Kubernetes tidak sukses karena bisa menjalankan container sekali—ia sukses karena bisa menjaga mereka berjalan dengan benar sepanjang waktu. Langkah desain besar adalah menjadikan “control loop” (controller) sebagai mesin inti sistem.
Controller adalah loop sederhana:
Ia kurang seperti tugas sekali jalan dan lebih seperti autopilot. Anda tidak “mengasuh” workload; Anda mendeklarasikan apa yang Anda inginkan, dan controller terus mengarahkan klaster kembali ke hasil itu.
Polanya inilah yang membuat Kubernetes tangguh saat hal dunia nyata terjadi:
Alih-alih memperlakukan kegagalan sebagai kasus khusus, controller memandangnya sebagai “state mismatch” rutin dan memperbaikinya dengan cara yang sama setiap kali.
Skrip otomasi tradisional sering mengasumsikan lingkungan stabil: jalankan langkah A, lalu B, lalu C. Dalam sistem terdistribusi, asumsi itu sering runtuh. Controller lebih mudah diskalakan karena mereka idempotent (aman dijalankan berulang) dan eventually consistent (terus mencoba sampai tujuan tercapai).
Jika Anda pernah menggunakan sebuah Deployment, Anda bergantung pada control loop. Di balik layar, Kubernetes menggunakan controller ReplicaSet untuk memastikan jumlah pod yang diminta ada—dan controller Deployment untuk mengelola rolling update dan rollback dengan prediktabilitas.
Kubernetes bisa saja menjadwalkan “hanya container,” tetapi tim Joe Beda memperkenalkan Pod untuk merepresentasikan unit terkecil yang dapat ditempatkan klaster di sebuah mesin. Ide kuncinya: banyak aplikasi nyata bukan satu proses tunggal. Mereka adalah sekumpulan kecil proses yang saling terikat dan harus hidup bersama.
Pod adalah pembungkus di sekitar satu atau lebih container yang berbagi nasib: mereka mulai bersama, berjalan di node yang sama, dan diskalakan bersama. Ini membuat pola seperti sidecar menjadi alami—misalnya log shipper, proxy, reloader konfigurasi, atau agen keamanan yang selalu menemani aplikasi utama.
Daripada mengajari setiap aplikasi untuk mengintegrasikan helper itu, Kubernetes memungkinkan Anda mengemasnya sebagai container terpisah yang tetap berperilaku sebagai satu unit.
Pod membuat dua asumsi penting menjadi praktis:
localhost, yang sederhana dan cepat.Pilihan ini mengurangi kebutuhan glue code kustom, sambil mempertahankan isolasi container di tingkat proses.
Pengguna baru sering mengharapkan “satu container = satu aplikasi,” lalu tersandung pada konsep tingkat Pod: restart, IP, dan scaling. Banyak platform menyamarkan hal ini dengan memberikan template beropini (mis. “web service,” “worker,” atau “job”) yang menghasilkan Pod di belakang layar—sehingga tim mendapat manfaat sidecar dan sumber daya bersama tanpa harus memikirkan mekanik Pod setiap hari.
Pilihan awal yang sederhana namun kuat di Kubernetes adalah memperlakukan label sebagai metadata kelas satu dan selector sebagai cara utama untuk “menemukan” sesuatu. Alih-alih mengikat hubungan secara kaku (seperti “tiga mesin tertentu menjalankan aplikasi saya”), Kubernetes mendorong Anda mendeskripsikan grup lewat atribut bersama.
Label adalah pasangan key/value sederhana yang Anda lampirkan ke resource—Pod, Deployment, Node, Namespace, dan lainnya. Mereka bertindak seperti tag queryable yang konsisten:
app=checkoutenv=prodtier=frontendKarena label ringan dan ditentukan pengguna, Anda dapat memodelkan realitas organisasi: tim, pusat biaya, zona kepatuhan, channel rilis, atau apa pun yang penting untuk operasi.
Selector adalah kueri atas label (misalnya, “semua Pod di mana app=checkout dan env=prod”). Ini lebih baik daripada daftar host tetap karena sistem bisa beradaptasi saat Pod dijadwalkan ulang, diskalakan, atau diganti saat rollout. Konfigurasi Anda tetap stabil meski instance di bawahnya terus berubah.
Desain ini menskalakan secara operasional: Anda tidak mengelola ribuan identitas instance—Anda mengelola beberapa set label yang bermakna. Itulah esensi loose coupling: komponen terhubung ke grup yang keanggotaannya bisa berubah dengan aman.
Setelah label ada, mereka menjadi kosakata bersama di seluruh platform. Mereka digunakan untuk routing trafik (Services), batas kebijakan (NetworkPolicy), filter observability (metrics/logs), dan bahkan pelacakan biaya. Satu gagasan sederhana—menandai hal secara konsisten—membuka ekosistem otomasi.
Kubernetes membutuhkan cara agar jaringan terasa dapat diprediksi meskipun container sama sekali tidak. Pod diganti, dijadwalkan ulang, dan diskalakan—sehingga IP dan mesin spesifiknya akan berubah. Ide inti Service sederhana: berikan “pintu depan” yang stabil untuk himpunan Pod yang bergeser.
Service memberi Anda IP virtual dan nama DNS yang konsisten (misal payments). Di balik nama itu, Kubernetes terus melacak Pod mana yang cocok dengan selector Service dan merutekan trafik sesuai. Jika sebuah Pod mati dan yang baru muncul, Service tetap menunjuk ke tempat yang benar tanpa Anda mengubah pengaturan aplikasi.
Pendekatan ini menghilangkan banyak pengkabelan manual. Alih-alih menancapkan IP ke file konfigurasi, aplikasi bisa bergantung pada nama. Anda deploy aplikasi, deploy Service, dan komponen lain bisa menemukannya lewat DNS—tanpa registry kustom, tanpa endpoint hard-coded.
Service juga memperkenalkan perilaku load-balancing default di antara endpoint sehat. Itu berarti tim tidak perlu membangun (atau membangun kembali) load balancer untuk setiap microservice internal. Menyebarkan trafik mengurangi blast radius kegagalan satu Pod dan membuat rolling update kurang berisiko.
Service cocok untuk L4 (TCP/UDP), tetapi tidak memodelkan aturan routing HTTP, terminasi TLS, atau kebijakan edge. Di situlah Ingress dan, belakangan, Gateway API masuk: mereka membangun di atas Services untuk menangani hostname, path, dan titik masuk eksternal dengan lebih rapi.
Salah satu keputusan awal yang senyap namun radikal adalah memperlakukan Kubernetes sebagai API yang dibangun—bukan alat monolitik yang “digunakan.” Sikap API-first itu membuat Kubernetes terasa kurang seperti produk yang diklik lewat UI dan lebih seperti platform yang bisa diperluas, di-script, dan diatur.
Saat API menjadi permukaan, tim platform bisa menstandarkan bagaimana aplikasi dideskripsikan dan dikelola, terlepas dari UI, pipeline, atau portal internal yang dipakai. “Mendeploy aplikasi” menjadi “mengirim dan memperbarui objek API” (seperti Deployment, Service, dan ConfigMap), yang merupakan kontrak lebih bersih antara tim aplikasi dan platform.
Karena semua lewat API yang sama, tooling baru tidak butuh backdoor istimewa. Dashboard, controller GitOps, mesin kebijakan, dan sistem CI/CD semua bisa beroperasi sebagai klien API normal dengan izin yang terdefinisi baik.
Simetri itu penting: aturan, otorisasi, auditing, dan admission control yang sama berlaku baik request datang dari orang, skrip, atau UI platform internal.
Versioning API membuat mungkin mengembangkan Kubernetes tanpa merusak setiap klaster atau alat sekaligus. Deprecation bisa dijadwalkan; kompatibilitas bisa diuji; upgrade bisa direncanakan. Untuk organisasi yang menjalankan klaster bertahun-tahun, ini adalah perbedaan antara “kita bisa upgrade” dan “kita terjebak.”
kubectlkubectl bukan Kubernetes—itu sebuah klien. Model mental ini mendorong tim berpikir dalam alur kerja API: Anda bisa mengganti kubectl dengan otomasi, UI web, atau portal kustom, dan sistem tetap konsisten karena kontraknya adalah API itu sendiri.
Kubernetes membutuhkan satu “sumber kebenaran” untuk bagaimana klaster seharusnya terlihat sekarang: Pod mana yang ada, node mana sehat, Service menunjuk ke mana, dan objek apa yang sedang diperbarui. Itulah yang disediakan etcd.
etcd adalah database untuk control plane. Ketika Anda membuat Deployment, menskalakan ReplicaSet, atau memperbarui Service, konfigurasi yang diinginkan ditulis ke etcd. Controller dan komponen control-plane lain menonton state yang tersimpan itu dan bekerja agar realitas cocok dengannya.
Sebuah klaster Kubernetes penuh bagian yang bergerak: scheduler, controller, kubelet, autoscaler, dan admission checks dapat merespons sekaligus. Jika mereka membaca versi “kebenaran” yang berbeda, Anda mendapatkan race—seperti dua komponen membuat keputusan yang saling bertentangan tentang Pod yang sama.
Konsistensi kuat etcd memastikan bahwa ketika control plane mengatakan “ini state saat ini,” semua pihak sejalan. Kesejajaran itu yang membuat control loop dapat diprediksi alih-alih kacau.
Karena etcd menyimpan konfigurasi klaster dan riwayat perubahan, itu juga yang Anda lindungi saat:
Perlakukan state control-plane seperti data kritis. Ambil snapshot etcd secara teratur, uji restore, dan simpan backup di luar klaster. Jika Anda menjalankan Kubernetes yang dikelola, pelajari apa yang provider Anda backup—dan apa yang masih perlu Anda backup sendiri (misalnya, persistent volumes dan data aplikasi).
Kubernetes tidak menganggap “di mana workload dijalankan” sebagai perkara kecil. Sejak awal, scheduler adalah komponen terpisah dengan tugas jelas: mencocokkan Pod ke node yang benar-benar dapat menjalankannya, menggunakan state klaster saat ini dan kebutuhan Pod.
Secara tinggi, penjadwalan adalah keputusan dua langkah:
Struktur ini membuat scheduler bisa berkembang tanpa menulis ulang semuanya.
Pilihan desain penting adalah menjaga tanggung jawab bersih:
Karena kekhawatiran ini terpisah, perbaikan di satu area (mis. plugin CNI baru) tidak memaksa model penjadwalan baru.
Kesadaran sumber daya dimulai dengan requests dan limits, memberi sinyal berarti kepada scheduler daripada tebak-tebakan. Dari situ, Kubernetes menambahkan kontrol lebih kaya—node affinity/anti-affinity, pod affinity, priorities dan preemption, taints dan tolerations, dan penyebaran yang sadar topologi—dibangun di atas fondasi yang sama.
Pendekatan ini memungkinkan klaster bersama hari ini: tim bisa mengisolasi layanan kritis dengan priority dan taint, sementara semua orang mendapat manfaat pemanfaatan lebih tinggi. Dengan bin-packing yang lebih baik dan kontrol topologi, platform bisa menempatkan workload lebih hemat biaya tanpa mengorbankan keandalan.
Kubernetes bisa saja hadir dengan pengalaman platform opinionated lengkap—buildpacks, aturan routing aplikasi, background jobs, konvensi config, dan lainnya. Sebaliknya, Joe Beda dan tim awal menjaga inti fokus pada janji yang lebih kecil: jalankan dan pulihkan workload dengan andal, ekspos mereka, dan sediakan API konsisten untuk diotomasi.
PaaS “lengkap” akan memaksa satu alur kerja dan satu set trade-off untuk semua orang. Kubernetes menargetkan fondasi lebih luas yang bisa mendukung banyak gaya platform—kesederhanaan ala Heroku, tata kelola enterprise, pipeline batch + ML, atau kontrol infrastruktur sederhana—tanpa mengunci filosofi produk tunggal.
Mekanisme extensibility Kubernetes menciptakan cara terkontrol untuk menambah kapabilitas:
Certificate atau Database) yang terasa native.Ini berarti tim platform internal dan vendor bisa mengirim fitur sebagai add-on, sambil tetap memakai primitive Kubernetes seperti RBAC, namespaces, dan audit log.
Bagi vendor, ini memungkinkan produk berbeda tanpa mem-fork Kubernetes. Bagi tim internal, ini memungkinkan “platform di atas Kubernetes” yang disesuaikan kebutuhan organisasi.
Trade-offnya adalah ledakan ekosistem: terlalu banyak CRD, alat yang tumpang tindih, dan konvensi yang tidak konsisten. Tata kelola—standar, kepemilikan, versioning, dan aturan deprecation—menjadi bagian dari pekerjaan platform.
Keputusan awal Kubernetes tidak hanya menciptakan scheduler container—mereka menciptakan kernel platform yang dapat digunakan ulang. Itulah mengapa banyak platform pengembang internal modern (IDP) pada dasarnya adalah “Kubernetes plus alur kerja yang beropini.” Model deklaratif, controller, dan API konsisten membuat mungkin membangun produk tingkat lebih tinggi—tanpa menemukan ulang deployment, reconciliation, dan service discovery setiap kali.
Karena API adalah permukaan produk, vendor dan tim platform bisa menstandarkan satu control plane dan membangun pengalaman berbeda di atasnya: GitOps, manajemen multi-klaster, kebijakan, katalog layanan, dan otomasi deployment. Ini alasan besar Kubernetes menjadi denominator umum untuk platform cloud native: integrasi menargetkan API, bukan UI spesifik.
Bahkan dengan abstraksi bersih, pekerjaan tersulit tetap operasional:
Tanyakan hal yang mengungkap kematangan operasional:
Platform yang baik mengurangi beban kognitif tanpa menyembunyikan control plane di bawah atau membuat jalan keluar menjadi menyulitkan.
Lensa praktis: apakah platform membantu tim berpindah dari “ide → layanan berjalan” tanpa memaksa semua orang menjadi ahli Kubernetes pada hari pertama? Alat di kategori “vibe-coding”—seperti Koder.ai—mempercepat ini dengan memungkinkan tim menghasilkan aplikasi nyata dari chat (web di React, backend di Go dengan PostgreSQL, mobile di Flutter) lalu iterasi cepat dengan fitur seperti planning mode, snapshot, dan rollback. Apakah Anda mengadopsi sesuatu seperti itu atau membangun portal sendiri, tujuannya sama: mempertahankan primitif kuat Kubernetes sambil mengurangi overhead alur kerja di sekitarnya.
Kubernetes bisa terasa rumit, tetapi sebagian besar “keanehannya” disengaja: ini kumpulan primitif kecil yang dirancang agar bisa disusun menjadi berbagai macam platform.
Pertama: “Kubernetes hanya orkestrasi Docker.” Kubernetes bukan terutama tentang memulai container. Ia tentang terus merekonsiliasi desired state (apa yang Anda inginkan berjalan) dengan actual state (apa yang benar-benar terjadi), melintasi kegagalan, rollout, dan permintaan yang berubah.
Kedua: “Jika kita pakai Kubernetes, semuanya jadi microservices.” Kubernetes mendukung microservices, tetapi juga mendukung monolith, job batch, dan platform internal. Unit (Pods, Services, label, controller, dan API) netral; pilihan arsitektur Anda tidak ditentukan oleh alat.
Bagian tersulit biasanya bukan YAML atau Pod—mereka adalah jaringan, keamanan, dan penggunaan multi-tim: identitas dan akses, manajemen secrets, kebijakan, ingress, observability, kontrol supply-chain, dan membuat guardrail agar tim bisa mengirim dengan aman tanpa saling bertabrakan.
Saat merencanakan, pikirkan dalam hal taruhan desain asli:
Pemetakan kebutuhan nyata Anda ke primitif Kubernetes dan lapisan platform:
Workloads → Pods/Deployments/Jobs
Konektivitas → Services/Ingress
Operasi → controller, kebijakan, dan observability
Jika Anda menilai atau menstandarkan, tuliskan pemetaan ini dan tinjau dengan stakeholder—lalu bangun platform Anda secara bertahap di sekitar celah, bukan mengikuti tren.
Jika Anda juga mencoba mempercepat sisi “build” (bukan hanya sisi “run”), pertimbangkan bagaimana alur pengantaran mengubah intent menjadi layanan yang dapat dideploy. Untuk beberapa tim itu set template yang dikurasi; untuk yang lain ini adalah alur kerja berbantuan AI seperti Koder.ai yang bisa menghasilkan layanan kerja awal dengan cepat dan kemudian mengekspor kode sumber untuk kustomisasi lebih lanjut—sementara platform Anda tetap mendapat manfaat dari keputusan desain inti Kubernetes di bawahnya.
Orkestrasi container adalah otomasi yang menjaga aplikasi tetap berjalan saat mesin gagal, lalu lintas berubah, dan deployment terjadi. Dalam praktiknya ini menangani:
Kubernetes memopulerkan model konsisten untuk melakukan ini di berbagai lingkungan infrastruktur.
Masalah utamanya bukan memulai container—melainkan menjaga container yang tepat berjalan dengan bentuk yang benar meski terjadi churn terus-menerus. Dalam skala besar muncul kegagalan rutin dan drift:
Kubernetes bertujuan membuat operasi dapat diulang dan dapat diprediksi dengan menyediakan control plane dan kosakata standar.
Dalam sistem deklaratif Anda mendeskripsikan hasil yang diinginkan (misalnya, “jalankan 3 replika”), dan sistem terus bekerja agar realitas cocok dengan itu.
Alur kerja praktis:
kubectl apply atau GitOps)Ini mengurangi “runbook tersembunyi” dan membuat perubahan bisa direview sebagai diff alih-alih rangkaian perintah ad-hoc.
Controller adalah loop kontrol yang berulang kali:
Desain ini membuat kegagalan umum menjadi rutinitas, bukan logika kasus khusus. Misalnya, jika sebuah Pod crash atau node hilang, controller terkait cukup mendeteksi “kita memiliki lebih sedikit replika dari yang diinginkan” dan membuat pengganti.
Kubernetes menjadwalkan Pod (bukan container tunggal) karena banyak workload nyata membutuhkan proses pembantu yang sangat terikat.
Pod memungkinkan pola seperti:
localhost)Aturan praktis: jaga Pod tetap kecil dan kohesif—gabungkan hanya container yang harus berbagi siklus hidup, identitas jaringan, atau data lokal.
Label adalah tag ringan key/value (misalnya app=checkout, env=prod). Selector adalah kueri terhadap label tersebut untuk membentuk grup dinamis.
Ini penting karena instance bersifat ephemeral: Pod muncul dan hilang selama reschedule dan rollout. Dengan label/selector, hubungan tetap stabil (“semua Pod dengan label ini”) meskipun anggotanya berubah.
Tip operasional: standarkan taksonomi label kecil (app, team, env, tier) dan terapkan kebijakan untuk menghindari kekacauan nanti.
Service menyediakan IP virtual dan nama DNS yang stabil yang merutekan ke himpunan Pod yang terus berubah sesuai selector.
Gunakan Service ketika:
Untuk routing HTTP, terminasi TLS, dan aturan edge, biasanya Anda menumpuk Ingress atau Gateway API di atas Services.
Kubernetes memperlakukan API sebagai permukaan produk utama: segala sesuatu adalah objek API (Deployment, Service, ConfigMap, dll.). Alat—termasuk kubectl, CI/CD, GitOps, dashboard—hanya klien API.
Manfaat praktis:
Jika Anda membangun platform internal, desain alur kerja di sekitar kontrak API, bukan alat UI tertentu.
etcd adalah basis data control plane dan sumber kebenaran klaster untuk desired dan current state. Controller dan komponen lainnya mengawasi etcd dan merekonsiliasi berdasarkan state itu.
Panduan praktis:
Di managed Kubernetes, pelajari apa yang dibackup oleh provider—dan apa yang masih perlu Anda backup terpisah (mis. PersistentVolumes dan data aplikasi).
Kubernetes tetap kecil di inti dan membiarkan Anda menambah fitur melalui ekstensi:
Ini memungkinkan “platform di atas Kubernetes,” tapi bisa menyebabkan banyak alat. Untuk mengevaluasi platform berbasis Kubernetes, tanyakan: