Back to IF4031 Arsitektur Aplikasi Terdistribusi
Pengenalan dan Konsep Dasar Kubernetes
Questions/Cues
Apa tujuan utama Kubernetes?
Apa saja peran K8s?
Apa prinsip dasar Kubernetes?
Apa itu Objek Kubernetes?
Apa beda
specdanstatus?Apa saja konsep-konsep fundamental?
Apa itu Pod?
Mengapa Pod penting?
Reference Points
- 25-extra-IF4031-24-2024-Kubernetes.pdf (hlm. 2-9)
Tujuan Utama Kubernetes (K8s)
Kubernetes adalah sebuah platform open-source untuk otomatisasi deployment, penskalaan, dan manajemen aplikasi dalam kontainer (container orchestration). Tujuannya adalah untuk menyediakan platform yang solid untuk menjalankan sistem terdistribusi secara andal.
Velocity: Mempercepat siklus rilis perangkat lunak ke produksi melalui immutability, konfigurasi deklaratif, dan self-healing.
Scaling: Memudahkan penskalaan aplikasi secara horizontal dan efisien.
Abstracting Infrastructure: Menyembunyikan kompleksitas infrastruktur di bawahnya (fisik, virtual, atau cloud) sehingga pengembang bisa fokus pada aplikasi.
Efficiency: Mengoptimalkan penggunaan sumber daya (resource) infrastruktur.
Peran Kubernetes
Kubernetes bertindak sebagai “sistem operasi” untuk sebuah cluster, menyediakan fungsi-fungsi inti berikut:
Orkestrasi: Pengaturan alokasi storage dan konektivitas antar kontainer.
Service Discovery & Load Balancing: Memberikan nama DNS yang stabil untuk layanan dan menyeimbangkan beban lalu lintas ke beberapa kontainer.
Automated Rollout & Rollback: Mengelola pembaruan aplikasi secara bertahap dan dapat kembali ke versi sebelumnya jika terjadi masalah.
Configuration & Secret Management: Mengelola konfigurasi aplikasi dan data sensitif (seperti password atau API keys) secara terpisah dari container image.
Self-healing: Secara otomatis me-restart kontainer yang gagal, mengganti node yang mati, dan mematikan kontainer yang tidak lolos health check.
Resource Scheduling: Secara cerdas menempatkan kontainer pada node yang tersedia berdasarkan kebutuhan sumber daya.
Prinsip Dasar: Deklaratif
Kubernetes bekerja dengan model deklaratif. Artinya, pengguna tidak memberi tahu Kubernetes bagaimana melakukan sesuatu (model imperatif), melainkan apa keadaan akhir yang diinginkan (desired state).
Pengguna: Mendefinisikan desired state dalam sebuah file konfigurasi (biasanya YAML). Contoh: “Saya ingin 5 replika dari aplikasi web saya berjalan menggunakan image versi 1.2.”
Kubernetes Controller: Terus-menerus memantau keadaan saat ini (current state) dari cluster. Jika current state tidak cocok dengan desired state, controller akan secara otomatis melakukan tindakan yang diperlukan untuk mencapai desired state tersebut.
Objek Kubernetes
Objek adalah entitas persisten yang merepresentasikan state dari sebuah cluster. Ketika Anda membuat sebuah objek, Anda memberi tahu Kubernetes desired state yang Anda inginkan. Hampir setiap objek memiliki dua field utama:
spec(Spesifikasi): Disediakan oleh pengguna, mendeskripsikan desired state dari objek (misalnya, jumlah replika, image yang digunakan).
status: Dikelola oleh Kubernetes, berisi informasi tentang current state dari objek (misalnya, berapa replika yang saat ini berjalan, alamat IP Pod).Konsep Dasar Arsitektur
Cluster: Sekumpulan mesin (node) yang sumber dayanya (CPU, memori, storage) digabungkan dan dikelola oleh Kubernetes.
Node: Sebuah mesin pekerja, bisa berupa mesin fisik atau virtual. Setiap node menjalankan komponen yang diperlukan untuk menjalankan kontainer.
Pod: Unit kerja terkecil dan paling dasar di Kubernetes. Sebuah Pod merepresentasikan satu instance dari sebuah proses yang berjalan di cluster.
ReplicaSet: Memastikan bahwa sejumlah replika Pod yang ditentukan selalu berjalan.
Deployment: Menyediakan cara deklaratif untuk mengelola pembaruan pada Pod dan ReplicaSet. Ini adalah objek yang paling umum digunakan untuk men-deploy aplikasi stateless.
Mendalami Konsep Pod
Pod adalah abstraksi di atas kontainer. Sebuah Pod dapat berisi satu atau lebih kontainer yang selalu dijadwalkan bersama di node yang sama dan berbagi konteks eksekusi yang sama.
Karakteristik Pod:
Shared Network: Semua kontainer di dalam satu Pod berbagi namespace jaringan yang sama, termasuk alamat IP. Mereka dapat berkomunikasi satu sama lain melalui
localhost.Shared Storage: Kontainer di dalam satu Pod dapat berbagi volume penyimpanan data.
Co-location: Mereka dijamin selalu berjalan di node yang sama.
Pola yang umum adalah satu Pod berisi satu kontainer utama. Namun, pola multi-kontainer berguna untuk tugas-tugas pendukung seperti sidecar untuk logging, proxy, atau sinkronisasi file.
Kubernetes adalah sebuah platform orkestrasi kontainer yang bekerja dengan prinsip deklaratif, di mana pengguna mendefinisikan “keadaan yang diinginkan” (desired state) dari aplikasi melalui objek-objek API. Kubernetes kemudian secara otomatis bekerja untuk menyamakan keadaan aktual sistem dengan keadaan yang diinginkan tersebut. Unit fundamental dan terkecil yang dikelolanya adalah Pod, sebuah abstraksi yang dapat menampung satu atau lebih kontainer yang berbagi sumber daya jaringan dan penyimpanan, yang kemudian dikelola siklus hidupnya oleh objek tingkat tinggi seperti Deployment untuk memastikan skalabilitas dan ketahanan (self-healing).
Additional Information
Pendalaman: Deklaratif vs. Imperatif
Bayangkan Anda ingin pergi ke sebuah alamat.
Cara Imperatif: “Jalan lurus 200 meter, belok kiri di perempatan, lalu belok kanan di lampu merah kedua.” Anda memberikan serangkaian perintah langkah demi langkah. Jika ada jalan yang ditutup, Anda gagal.
Cara Deklaratif: “Saya ingin berada di alamat X.” Anda hanya menyatakan tujuan akhir. Aplikasi GPS (seperti Kubernetes Controller) yang akan mencari rute terbaik, bahkan jika harus berputar karena ada jalan ditutup.
Model deklaratif ini yang membuat Kubernetes sangat kuat. Anda tidak perlu peduli jika sebuah node mati. Anda hanya menyatakan “saya butuh 5 replika”, dan Kubernetes akan memastikan selalu ada 5 replika yang berjalan, bahkan jika ia harus membuatnya di node yang baru.
Pendalaman: “Pause” Container di dalam Pod
Bagaimana cara Kubernetes membuat beberapa kontainer berbagi satu alamat IP? Di belakang layar, ketika sebuah Pod dibuat, komponen
kubeletdi sebuah node pertama kali membuat sebuah kontainer infrastruktur yang sangat kecil yang disebut “pause” container. Tugas utama pause container ini adalah untuk membuat dan memegang network namespace. Setelah itu, semua kontainer aplikasi yang Anda definisikan di dalam Pod akan dibuat untuk bergabung dengan network namespace milik pause container tersebut. Inilah yang memungkinkan mereka semua melihat antarmuka jaringan yang sama dan berkomunikasi melaluilocalhost. Pause container tidak melakukan apa-apa selain “tidur”, tetapi ia adalah fondasi dari model jaringan Pod.