Kubernetes

Kubernetes merupakan salah satu Container Orchestration open-source yang digunakan untuk melakukan manajemen workloads aplikasi yang dikontainerisasi, serta menyediakan konfigurasi dan otomatisasi secara deklaratif. Kubernetes berada di dalam ekosistem yang besar dan berkembang cepat. Service, support, dan perkakas Kubernetes tersedia secara meluas.

Google membuka Kubernetes sebagai proyek open source pada tahun 2014. Kubernetes dibangun berdasarkan pengalaman Google selama satu setengah dekade dalam menjalankan workloads bersamaan dengan kontribusi berupa ide-ide terbaik yang diberikan oleh komunitas.

Komponen Utama
"komponen-komponen tersebut lebih mudah dipahami saat dalam bentuk praktek (bukan saat belajar)"
 * pod: sekumpulan service yang di-manage cluster atau yang di-deploy ke satu node. Mudahnya pod itu ada didalam sebuah cluster.
 * cluster: sekumpulan mesin node (setidaknya satu) untuk menjalankan aplikasi dalam container (playgorunds pods). Mudahnya cluster itu sekumpulan rumah (perumahan), dan pod itu dalah rumahnya. Untuk membuat cluster maka dibutuhkan sebuah node yang dibuat dengan banyak cara, seperti menggunakan k3s, build from stratch, dan lain-lain.
 * node: node itu sebuah mesin worker di kubernetes (mencakup single/multi node) Sebuah node bisa berupa VM ataupun mesin fisik, tergantung dari klaster-nya. Jika node dianalogikan server fisik. Maka posisi sebuah cluster merupakan servis yang berjalan pada server fisik tersebut. Mesin ini melakukan tugas yang diberikan oleh control plane. Tanpa node, pods dan cluster tidak akan jalan. Lihat dokumentasi resmi di Arsitektur Kubernetes
 * namespace: ialah virtual cluster. Namespaces memungkinkan Kubernetes untuk mengelola beberapa cluster (untuk beberapa tim atau project) dalam cluster fisik yang sama.
 * control plane: kumpulan proses yang mengontrol node Kubernetes. Di sinilah semua tugas berasal. Pada level production biasanya berjalan di banyak komputer/server dan cluster-nya biasanya juga menjalankan banyak node.
 * services: proses dimana aplikasi yang berjalan diekspos dari sekumpulan pod sebagai layanan jaringan. Tujuan nya adalah agar client dapat mengakses service yang terdapat di dalam sebuah pods.
 * container: container ini mewakili dari 1 aplikasi, misalnya ada database postgresql atau ada web server apache tomcat.

Bagian Kubernetes Master (Control Plane)

 * kube-controller-manager: makhluk yang bertanggung jawab untuk memperhitungkan status cluster (seperti, jumlah pod yang berjalan) sampai status service didalam cluster (sejumlah pod) itu aktif atau sedang mati. Teknik bekerja kube-controller sederhana, yaitu hanya mendengarkan informasi kube-api-server untuk informasi detail dari status cluster
 * kuber-api-server: makhluk yang digunakan oleh dasbor Web UI dan service command line seperti kubeclt dalam mendapatkan service pada worker node sebagai mana fungsi api pada umumnya yang selanjutnya akan digunakan berinteraksi dengan cluster Kubernetes.
 * kube-scheduler: makhluk yang digunakan administrator untuk memutuskan bagaimana suatu event, resource, dan policy pada cluster yang dimiliki. Sama seperti kube-controller-manager, kube-scheduler mendapatkan informasi status cluster dari kube-api-server.
 * etcd: sebuah "storage stack" untuk master node Kubernetes yang digunakan key-value pairs dan digunakan untuk menyimpan policies, definitions, secrets, status sistem, dan lain-lain.

Bagian Kubernetes Node (Worker Node)



 * kubelet: makhluk yang menyampaikan informasi tentang kesehatan node kembali ke master node melalui api-server yang berada pada master node (control plane) serta menjalankan instruksi yang diberikan kepadanya oleh master node.




 * kube-proxy: service yang memungkinkan sebuah pod yang didalamnya adalah sebuah aplikasi untuk berkomunikasi satu sama lain di dalam satu cluster. Serta melempar keluar eksistensi dari aplikasi pada pod yang dimiliki ke jaringan luar (internet) jika memang dibutuhkan. Karena adanya kube-proxy, setiap pod dapat berbicara dengan setiap pod lainnya melalui sebuah proxy ini.




 * docker: makhluk yang merupakan dalang dari sistem per-kontaineran. Dalam satu cluster setiap node memiliki mesin docker engine untuk mengelola Container. (lihat halaman Docker)

Limitation of Container (Batasan kemampuan container)
Container menyediakan cara mudah untuk mengemas dan menjalankan layanan. Namun, seiring dengan bertambahnya jumlah container yang dikelola oleh perusahaan, pekerjaan SysAdmin terasa berat karena beban semakin meningkat seiring dengan kebutuhan untuk dengan cepat menanggapi kebutuhan.

Saat menggunakan container di lingkungan production, perusahaan sering kali membutuhkan:


 * mendapatkan komunikasi yang mudah antara sejumlah besar layanan.
 * Melimitasi penggunaan resource pada sejumlah container. Namun, sistem resource berupa RAM dan CPU pada container tidak dapat dilakukan limitasi
 * Merespons untuk lonjakan penggunaan aplikasi untuk menambah atau mengurangi container yang sedang berjalan yang tidak bisa dilakukan dengan hanya container. Dalam Kubernetes hal ini dapat dilakukan dengan sistem scheduler pada master node. Misal pada saat siang dimana lonjakan trafik penggunaan aplikasi sangat sedang tingginya, administrator dapat membuat rule tersebut secara otomatis untuk menambahkan resource lebih atau melipat gandakan container sesuai load yang dibutuhkan (dalam Kubernetes termasuk kedalam pod) dalam waktu itu secara otomatis.
 * kemungkinan terhadap kerusakan layanan dalam beberapa kasus seperti butuh fitur pada versi terbaru dalam sebuah librari atau tool yang sangat susah (tricky) di-handle secara manual oleh sebuah container dan butuh sebuah orchestration (cluster) semisal Kubernetes atau OpenShift.
 * dapat meluncurkan rilis baru secara bertahap untuk sekumpulan pengguna.

Perusahaan sering kali memerlukan teknologi orkestrasi container karena runtime container (seperti Podman) tidak memenuhi persyaratan di atas secara memadai.

Kubernetes Overview
Sudah termasuk hal yang dibicarakan dari Limitation of Container tadi :v Sederhananya ia akan menyederhanakan proses deployment container yang secara manual mulai dari scaling, scheduler, deployment dan lain-lain (biasanya pada konsep kubernetes kata container diganti dengan pod yang isinya berupa satu atau banyak container ). Jika dilihat dalam konsep Kubernetes, prinsip microservices diterapkan sangat baik lagi dibandingkan container/single container (satu container dengan satu image).

Berikut adalah fitur-fitur Kubernetes:


 * Load Balancing:
 * s

Referensi

 * https://kubernetes.io/docs/concepts/overview/components/