Menjalankan satu kontainer itu sederhana. Menjalankan sepuluh masih bisa dikelola. Namun, begitu Anda menjalankan ratusan kontainer di puluhan mesin, manajemen manual tidak lagi sekadar sulit, melainkan menjadi mustahil. Anda kehilangan jejak kontainer mana yang berada di mana. Sebuah server mati, dan aplikasi Anda lenyap sampai seseorang bangun untuk menyalakannya kembali. Lonjakan trafik melumpuhkan pengaturan Anda sebelum Anda sempat menjalankan instansi baru. Di sinilah Kubernetes hadir. Ini bukan sekadar alat DevOps lainnya. Ini adalah lapisan orkestrasi yang memperlakukan manajemen kontainer sebagai masalah kontrol, bukan sekadar latihan skrip.

Mengapa Skrip Akhirnya Gagal

Sebagian besar tim memulai dengan skrip shell atau otomatisasi dasar. Mereka menulis perintah untuk menarik image, menjalankan kontainer, memantau log, dan menyalakan ulang proses yang gagal. Pendekatan tersebut berhasil untuk pembuktian konsep (proof of concept). Namun, pendekatan itu runtuh di bawah beban dunia nyata. Microservices berkomunikasi satu sama lain di host yang berbeda, bergantung pada variabel lingkungan tertentu, membutuhkan penyimpanan persisten yang bertahan setelah kontainer dinyalakan ulang, dan mengharapkan jaringan yang konsisten antar versi. Sebuah skrip tidak dapat secara otomatis menjadwalkan ulang beban kerja saat mesin virtual menghilang. Skrip tidak dapat mendistribusikan trafik jaringan di antara instansi yang sehat sambil melewati instansi yang terjebak dalam crash loop. Kubernetes menyelesaikan masalah ini dengan membuat klaster itu sendiri yang bertanggung jawab atas keputusan-keputusan tersebut. Anda mendeskripsikan apa yang Anda inginkan, dan sistem akan menegakkan status tersebut secara terus-menerus.

Tiga Hal yang Diberikannya kepada Anda

Kubernetes memberikan tiga kapabilitas inti yang menggantikan pemadaman api (firefighting) manual dengan keandalan otomatis.

High availability berarti aplikasi Anda tetap online bahkan ketika sebagian infrastruktur Anda gagal. Jika sebuah kontainer crash, Kubernetes akan menggantinya dalam hitungan detik. Jika seluruh worker node mati, scheduler akan menyadari hilangnya heartbeat dan memindahkan beban kerja yang terdampak ke mesin sehat lainnya di dalam klaster. Sistem menjaga pengawasan konstan terhadap status yang diinginkan yang Anda tentukan, memperbaiki penyimpangan tanpa intervensi manusia.

Scalability berarti aplikasi Anda tumbuh seiring dengan pengguna Anda. Alih-alih menyediakan dua puluh server hanya untuk bertahan dari lonjakan trafik selama dua jam, Anda menentukan metrik yang penting, seperti penggunaan CPU atau latensi permintaan, dan membiarkan klaster menambah lebih banyak instansi kontainer saat ambang batas terlampaui. Saat permintaan turun, jumlah replika akan berkurang kembali. Anda membayar apa yang Anda butuhkan, saat Anda membutuhkannya.

Disaster recovery berarti data dan konfigurasi Anda kembali setelah terjadi crash. Kubernetes menyimpan seluruh status klaster dalam penyimpanan key-value terdistribusi. Jika kegagalan katastrofik menghapus worker node atau bahkan sebagian dari control plane, status yang tersimpan tersebut memungkinkan sistem untuk membangun kembali beban kerja Anda persis seperti saat dikonfigurasi. Data Anda kembali karena sang orkestrator mengingat seperti apa seharusnya data tersebut.

Pengaturan: Otak dan Otot

Sebuah klaster Kubernetes memiliki dua peran fundamental yang digambarkan sebagai otak dan otot, dan analogi tersebut sangat tepat dalam praktiknya.

Master Node adalah otaknya. Ia tidak menjalankan aplikasi yang menghadap pelanggan. Sebaliknya, ia menampung komponen control plane yang menjadwalkan tugas, mengelola status klaster, dan merespons perubahan. Saat Anda mengeluarkan perintah atau mengirimkan file konfigurasi, master node memutuskan di mana beban kerja harus berada, apakah ia sehat, dan apa yang harus dilakukan jika tidak sehat.

Worker Nodes adalah ototnya. Setiap worker menjalankan agen ringan yang berkomunikasi dengan master dan menggunakan container runtime untuk mengeksekusi pod yang sebenarnya. Node-node inilah tempat kode aplikasi Anda mengonsumsi CPU dan memori. Tambahkan lebih banyak worker node, dan klaster Anda akan mendapatkan kapasitas mentah. Tambahkan lebih banyak master node yang dikonfigurasi untuk redundansi, dan control plane Anda akan menjadi tangguh terhadap kegagalan perangkat keras individual.

Pods, Containers, dan Services

Untuk bekerja dengan Kubernetes, Anda perlu memahami tiga istilah yang mendefinisikan bagaimana perangkat lunak dikemas dan diakses.

Containers adalah paket yang membundel aplikasi Anda dengan dependensi, pustaka (library), dan konfigurasinya. Mereka mengisolasi perangkat lunak dari host yang mendasarinya sehingga berjalan dengan cara yang sama di lingkungan pengembangan (development), staging, dan produksi (production).

Pod adalah unit yang dapat dideploy terkecil di Kubernetes. Sebuah pod membungkus satu atau lebih kontainer yang perlu berbagi sumber daya. Mereka berbagi namespace jaringan yang sama dan dapat mengakses volume penyimpanan lokal yang sama. Ini penting: Anda tidak men-deploy kontainer kosong secara langsung. Anda men-deploy sebuah pod yang menampungnya. Pod juga sengaja dibuat bersifat efemeral (sementara). Mereka dibuat, dihancurkan, dan diganti seiring perubahan kondisi. Masa pakainya bersifat dinamis secara desain.

Service ada karena pod bersifat transien. Setiap kali sebuah pod dimulai ulang, kemungkinan besar ia akan menerima alamat IP internal baru. Jika bagian lain dari aplikasi Anda mencoba terhubung langsung ke alamat-alamat yang berubah tersebut, koneksi akan terus terputus. Sebuah service memberikan alamat IP tetap dan nama DNS kepada pod Anda. Ia bertindak sebagai pintu depan yang stabil, melakukan load-balancing pada permintaan yang masuk ke seluruh pod sehat yang sesuai dengan selector-nya. Hal ini memisahkan klien Anda dari kekacauan siklus hidup kontainer individual.

Kubernetes dalam Skala Besar: Contoh Netflix

Netflix menggunakan Kubernetes untuk mengelola content delivery network miliknya. Infrastruktur ini mengirimkan aliran video ke jutaan penonton secara bersamaan di seluruh dunia. Ketika sebuah acara populer dirilis dan permintaan melonjak, cluster akan melakukan scale out pada node cache yang menyimpan segmen video lebih dekat ke pengguna. Jika sebuah node regional gagal, lalu lintas akan dialihkan secara otomatis. Hasilnya adalah film tetap dapat ditonton oleh jutaan orang tanpa perlu memanggil teknisi secara darurat secara manual. Orchestrator menangani skala dan kegagalan sehingga layanan terus berjalan tanpa gangguan.

Memulai: YAML, JSON, dan API Server

Memulai dengan Kubernetes berarti meninggalkan metode "click-ops" yang imperatif dan beralih ke konfigurasi deklaratif. Anda menulis apa yang Anda inginkan dalam file YAML atau JSON. Manifest ini mendeskripsikan segalanya, mulai dari image kontainer hingga jumlah replika, port yang dibuka, variabel lingkungan, dan mount penyimpanan. Setelah file Anda siap, Anda mengirimkannya ke API server pada master node. Control plane menerima deklarasi tersebut, menyimpannya dalam database status cluster, lalu mulai bekerja untuk membuat realitas sesuai dengan deskripsi Anda. Anda tidak memberi tahu Kubernetes secara tepat bagaimana cara melakukan pekerjaannya. Anda memberi tahu apa hasil akhirnya, dan ia akan menentukan langkah-langkahnya sendiri.

Intisari Sebenarnya

Kubernetes memiliki kurva pembelajaran. Terminologinya terasa padat pada awalnya. Ada banyak bagian yang bergerak, dan melakukan debugging pada sistem terdistribusi secara inheren lebih sulit daripada melakukan debugging pada satu server tunggal. Namun, imbalannya adalah ketenangan operasional. Anda berhenti mengawasi mesin satu per satu. Anda berhenti berdoa agar skrip startup Anda berfungsi saat terjadi gangguan pada jam 3 pagi. Anda mulai merancang untuk kegagalan secara default, berasumsi bahwa node akan mati, dan mempercayai orchestrator untuk menjaga aplikasi Anda tetap utuh. Perubahan pola pikir tersebut, dari berharap tidak ada yang rusak menjadi mengetahui bahwa sistem dapat menangani kerusakan, adalah hal yang membuat upaya ini sepadan.

Sumber: What Is Kubernetes? Kubernetes Explained in 15 Mins

Komunitas belajar opsional: GyaanSetu AI on Telegram