Kubernetes: Apa itu Kubernetes? Pengenalan, Keunggulan, dan Cara Kerjanya

From OnnoWiki
Jump to navigation Jump to search

Sumber: https://www.dewaweb.com/blog/kubernetes-adalah/


Apa itu Kubernetes? Kubernetes adalah platform open-source untuk mengelola workloads aplikasi yang ada dalam kontainer, serta menyediakan konfigurasi dan otomatisasi. Pertama kali dikembangkan oleh Google, Kubernetes kini dikelola oleh Cloud Native Computing Foundation (CNCF).

Kubernetes berfungsi sebagai mesin untuk menjadwalkan dan menjalankan container pada server fisik atau virtual. Kubernetes memiliki infrastruktur kontainer-sentris, artinya semua aplikasi berjalan dalam kontainer atau docker.

Lalu, apa saja komponen-komponen dalam Kubernetes untuk bisa menjalankan fungsi tersebut?


Komponen Kubernetes

Diringkas dari situs resmi Kubernetes, berikut ini beberapa komponen dalam Kubernetes yang bertindak sebagai platform container orchestration:

Cluster

Saat mendeploy Kubernetes, kamu akan mendapatkan sebuah Cluster. Cluster adalah kelompok yang terdiri dari server fisik atau Virtual Private Server (VPS) untuk menjalankan Kubernetes.

Dalam cluster Kubernetes terdapat beberapa node. Node adalah server berupa server fisik atau virtual (VPS) yang digunakan untuk menjalankan Kubernetes. Setidaknya ada 2 jenis server yang diperlukan, yaitu Master node dan Worker node. Berikut penjelasannya:

Master Node

Master node sebagai control plane bagi kluster. Node master mengatur seluruh operasi cluster, termasuk mekanisme schedule, proses deteksi, dan memberikan respon saat events yang berlangsung dalam cluster (contoh saat penjadwalan pod baru apabila jumlah replika yang ada pada replication controller tidak terpenuhi).

Operasi master menggunakan beberapa komponen, di antaranya:

  • kube-controller-manager: bertugas melakukan monitor pada cluster agar sesuai dengan konfigurasi data objek di dalam node.
  • kube-apiserver: sebagai front-end dari control plane Kubernetes. Komponen ini didesain agar dapat diskalakan secara horizontal.
  • kube-scheduler: menentukan bagaimana events dijadwalkan antara cluster berdasarkan ketersediaan resource, peraturan dari operator, dsb. Bertugas mengamati Pod baru yang belum ditempatkan di node manapun dan kemudian memilihkan Node di mana Pod baru tersebut akan dijalankan.
  • etcd: storage key value yang digunakan sebagai penyimpanan data klaster Kubernetes.


Worker Node

Worker node berfungsi menjalankan tugas yang diberikan oleh master node. Node worker menjalankan dua komponen, yakni kubelet dan kube-proxy.

  • kubelet: aplikasi kecil di dalam node worker untuk memastikan kontainer beroperasi di dalam Pod.
  • kube-proxy: memelihara aturan-aturan jaringan (network rules) serta meneruskan koneksi yang ditujukan pada suatu host.
  • Container runtime: perangkat lunak yang bertanggung jawab dalam menjalankan kontainer. Kubernetes mendukung beberapa runtime, di antaranya Docker, containerd, cri-o, rktlet dan semua implementasi Kubernetes CRI (Container Runtime Interface).

Object

Kubernetes memiliki entitas yang merepresentasikan state dari sistem kamu, misalnya apa aplikasi / workload yang dijalankan, jaringan / resource disk apa yang kamu sediakan, dan beberapa informasi lainnya terkait apa yang sedang dilakukan clustermu.

Object adalah entitas yang merepresentasikan kondisi suatu cluster. Ada berbagai object dasar yang ada dalam suatu cluster Kubernetes, di antaranya:

  • Pod – unit terkecil di dalam cluster yang terletak di node. Fungsi pod yaitu menjalankan docker images yang membentuk sebuah kontainer.
  • Service – digunakan untuk mengarahkan request atau trafik ke beberapa Pod menggunakan IP Address.
  • Volume – terletak di luar kontainer yang berfungsi untuk penyimpanan data suatu kontainer.
  • Namespace – object untuk memisahkan resource atau environment cluster.

Selain itu, Kubernetes memiliki beberapa abstraksi yang lebih tinggi yang disebut dengan kontroler. Kontroler merupakan object dasar dengan fungsi tambahan, contohnya:

  • ReplicaSet – memastikan jumlah pod yang harus beroperasi dan menentukan penggunaan container image.
  • Deployment – mengontrol pod dan replicaSet.
  • StatefulSet – workload API object untuk manajemen aplikasi stateful.
  • Daemonset – memastikan pod berjalan di setiap node yang terdaftar di master.
  • Job – memastikan jumlah pod sesuai dengan jumlah yang didefinisikan.


Cara Kerja Kubernetes

Kubernetes adalah sistem operasi yang mampu menjalankan aplikasi di berbagai cluster dan infrastruktur pada layanan cloud dan private data center environment.

Seperti sistem terdistribusi lainnya, Kubernetes memiliki dua komponen, yaitu Master node dan Worker node.

Control Plane (secara kasar setara dengan konsep Master node), bertindak sebagai otak dari cluster Kubernetes. Scheduling, service discovery, load balancing, dan sebagainya ada di Control Plane. Sementara itu, Worker Node bekerja menjalankan aplikasi. Kumpulan Master Node dan Worker Node membentuk sebuah cluster.


Manfaat Kubernetes

Kubernetes sangat membantu dalam proses deployment aplikasi. Kenapa hal itu bisa terjadi? Mari lihat dari perkembangan proses deployment berikut ini:

Manfaat-kubernetes-untuk-deployment-1024x369.png

Deployment secara tradisional hanya menggunakan server fisik, sehingga kamu tidak bisa menentukan batasan resource untuk aplikasi. Ini menyebabkan munculnya permasalahan pada alokasi sumber daya.

Sebagai solusinya, muncullah Virtual Machine (VM). Dengan ini, pemanfaatan resource dan skalabilitas menjadi lebih baik. Aplikasi dapat ditambahkan atau diperbarui dengan mudah, dan mengurangi biaya perangkat keras, dsb.

Selanjutnya ada Container. Kontainer mirip dengan VM, tetapi memiliki sifat isolasi yang lebih fleksibel untuk berbagi sistem operasi (OS) antar aplikasi. Dianggap lebih ringan dibanding VM, proses kontainerisasi memungkinkan aplikasi dapat di-deploy dengan mudah, terlepas dari berbagai macam sistem, baik di on-premise, local atau di cloud.

Keunggulan Kubernetes

Untuk memudahkan dalam pengembangan aplikasi, Kubernetes dilengkapi dengan fitur-fitur berikut:

  • Service discovery - Semakin banyak layanan yang membentuk aplikasi, maka akan semakin sulit untuk dilacak dan dikelola. Untungnya, Kubernetes memiliki fitur service discovery sehingga dapat melacak kontainer secara otomatis. Kubernetes dapat mengenali kontainer menggunakan nama DNS atau menggunakan IP address server itu sendiri.
  • Load balancing - Kubernetes memiliki fungsi load balancing, yaitu penyeimbang trafik/beban. Load balancing dapat mengelola trafik sehingga ketika terdapat lonjakan trafik yang cukup besar, maka Kubernetes mampu membagi load yang ada agar aplikasi dapat berjalan lebih stabil.
  • Orkestrasi ruang penyimpanan - Kubernetes memungkinkan kamu melakukan mount pada storage yang kamu inginkan, misalnya ruang penyimpanan lokal atau yang berbasis cloud storage.
  • Rollout dan rollback otomatis - Fitur ini memungkinkanmu melakukan deployment menggunakan file YAML, sehingga kamu dapat mendeskripsikan terlebih dahulu deployment yang diinginkan. File YAML tersebut dapat digunakan untuk melakukan deployment lain atau mengubah deployment yang ada. Kamu juga bisa melakukan rollback jika terjadi kendala pada deployment. Semua terdokumentasi dan bisa dilakukan secara otomatis.
  • Bin packing otomatis - Fitur bin packing otomatis memungkinkan kamu bisa mengatur kapasitas CPU dan RAM yang spesifik di tiap kontainer. Ketika limit kapasitas sudah ditentukan, maka aplikasi tidak akan berebut resource yang ada. Kamu juga jadi bisa lebih menghemat sumber daya.
  • Self-healing - Kubernetes juga bisa melakukan self-healing secara otomatis. Self-healing yang dimaksud artinya Kubernetes memiliki kemampuan untuk memeriksa kontainer, merestart kontainer yang error, ataupun mengganti dan memastikan kontainer yang sudah tidak bisa menanggapi request. Kubernetes tidak akan memberikan trafik ke container sampai benar-benar siap untuk menerima request (ready to serve).
  • Secret and configuration management - Kamu bisa menyimpan data-data yang bersifat rahasia, seperti password, SSH keys, dan auth token ke dalam Kubernetes Secret. Kamu dapat membangun dan mengupdate secret tanpa harus membangun ulang container image dan mengekspos secret di dalam konfigurasi. Kamu bisa melakukan konfigurasi sesuai kebutuhan, misalnya opaque (secret umum/default), docker registry (untuk otentikasi docker registry), dan TLS (untuk penggunaan dengan public/private keys).

Kubernetes vs Docker, Mana yang Lebih Baik?

Kubernetes sering dibandingkan dengan Docker. Padahal, kedua platform tersebut berbeda dan tidak saling menggantikan.

Singkatnya, Docker merupakan platform yang berperan sebagai container manager untuk membuat kontainer aplikasi. Sedangkan, Kubernetes adalah platform keseluruhan ekosistem yang berisi kumpulan container manager. Docker bisa menjadi bagian dalam Kubernetes, tapi tidak sebaliknya.

Sebenarnya, Docker memiliki platform ekosistem sendiri yakni Docker Swarm. Jadi perbandingan yang lebih tepat adalah antara Kubernetes dengan Docker Swarm.

Perbandingan Kubernetes vs Docker
Fitur Kubernetes Docker
Definisi Software untuk mengelola kontainer di dalam cluster server Platform untuk membuat kontainer aplikasi
Skalabilitas Mendukung auto-scaling Manual scaling
Deployment Gabungan pod dan service Kumpulan service
Load balancing Manual setup Auto load balancer
Running Harus dengan platform kontainer Bisa dijalankan tanpa platform lain
Instalasi Lebih kompleks Lebih sederhana
Monitoring Built-in monitoring Menggunakan software third party untuk monitoring

Referensi