Kubernetes dan Seisinya

Roland Raymond Dino
Badr Interactive
Published in
5 min readJun 24, 2024
source: https://1000logos.net/kubernetes-logo/

Untuk teman-teman yang berkecimpung di dunia Devops, pasti setidaknya sudah dan atau mulai mengenal kubernetes. Dan saat ini kubernetes sudah menjadi hal umum di dunia per-devops-an untuk mendeploy aplikasi. Sedikit tentang kubernetes, kubernetes adalah platformm orkestrasi kontainer yang diranncang untuk mengotomatiskan deployment, scaling, dan operasi dari aplikasi kontainer. Kubernetes sendiri dikembangkan oleh Google yang kini dikelola oleh Cloud Native Commputing Foundation (CNCF). Dengan kubernetes harapannya pengembang dan tim devops bisa lebih mudah untuk mengelola aplikasi yang terdiri dari beberapa kontainer atau mungkin lebih kita kenal dengan microservices.

Yuk kita lebih mengenal Kubernetes

Kubernetes, atau juga dikenal dengan K8s, adalah open-source system yang digunakan untuk otomatisasi deployment, scaling, dan managemen aplikasi kontainer. Dia mengelola cluster dari virtual machine dan menjadwalkan kontainer pada mesin-mesin tersebut berdasarkan sumber daya komputasi yang tersedia dan kebutuhan setiap kontainer. Jadi dengan kubernetes sendiri, kita dapat memaksimalkan resource yang ada.

Komponen-komponen apa sih yang ada pada kubernetes?

source: https://medium.com/devops-mojo/kubernetes-objects-resources-overview-introduction-understanding-kubernetes-objects-24d7b47bb018

Jadi kubernetes itu memiliki komponen utama yang bekerja bersama-sama untuk menyediakan orkestrasi kontainer yang kuat dan fleksibel. Beberapa komponen yang normalnya sering kita gunakan adalah:

  1. Node

Node adalah mesin-mesin yang menjalankan kontainer. Normalnya satu nodes merupakan satu virtual machine. Ada dua jenis node dalam cluster kubernetes: master nnode dan worker node.

  • Master Node: berfungsi untuk mengelola cluster (kumpulan dari virtual machine) dan bertanggung jawab atas manajemen lifecycle dari kontainer-kontainer yang terpasang, termasuk scheduling, scaling, dan updating. Mudahnya, seperti namanya yaitu master, master ini akan memerintah dan mengatur node-node workernya.
  • Worker Node: berfungsi untuk menjadwalkan kontainer yang dijadwalkan oleh master node. Setiap nworker node menjalankan beberapa komponen penting juga seperti kubelet, kube-proxy, dan container runtime.

2. Pod

Pod ini merupakan penamaan dari unit terkecil dalam model objek Kubernetes yang dapat dideploy. Setiap pod bisa memiliki satu atau lebih kontainer yang juga bisa berbagi sumber daya jaringan dan storage. Pod dirancang untuk menjalankan satu instance aplikasi yang spesifik.

3. Services

Services merupakan abstraksi yang mendefinisikan kumpulan pod dan kebijakan akses bagaimana merka bisa diakses. Dengan service, Kubernetes bisa melakukan load balance dan mendistribusikan traffic ke pod yang tepat.

4. Volumes

Volumes menyediakan penyimpanan data yang persisten untuk pod. Berbeda dengan storage ephemeral yang akan terhapus ketika pod berhenti, volumes dapat bertahan dan bisa dipindahkan ke pod lain.

5. ConfigMaps dan Secrets

ConfigMaps digunakan untuk menyimpan konfigurasi aplikasi yang non-sensitif, sedangkan Secrets diguanakan untuk menyimpan data sensitif seperti password dan keys. Dengan kedua objek ini, pengembang dapat memisakan konfigurasi aplikasi seperti env dari kode sumbernya.

Jadi bagaimana jika kita ingin melakukan deployment aplikasi?

Untuk melakukan deployment sendiri sebenarnya ada objek Kubernetes terpisah yang bisa dideklarasikan untuk deployment aplikasi. Akan tetapi, sebelum kita masuk ke objek deployment, ada baiknya kita mengenal replica-set terlebih dahulu.

  1. ReplicaSet

ReplicaSet adalah object yang memastikann bahwa jumlah spesifik pod yang identik selalu berjalan di dalam cluster. ReplicaSet sendiri merupakan salah satu komponen penting dari deployment, karena deployment akan menggunakan ReplicaSet untuk memastikan ketersediaan pod yang ditentukan.

Fungsi utama ReplicaSet adalah:

  • memastikan jumlah yang diinginkan dari pod yang berjalan
  • mengganti pod yang gagal dengan yang baru atau dihapus.

Berikut merupakan contoh konfigurasi untuk ReplicaSet.

2. Deployment

Nah, untuk deployment sendiri kita akan mengguanakan objek Deployment. Deployment ini merupaka objek Kubernetes yang menyediakan deklarasi untuk deployment aplikasi. Dengan deployment, kita dapat menentukan bagaimana aplikasi harus dijalankan, diperbarui, dan diskalakan. Deployment sendiri mengelola set dari pod dan replica set, serta mendukung fitur seperti rolling updates dan rollback.

Fungsi utama dari objek deployment adalah:

  • menyediakan deklarasi untuk pod dan replica set
  • melakukan rolling updates untuk meminimalkan downtime selama pembaruan aplikasi
  • mendukung rollback ke versi aplikasi sebelumnya jika ada masalah terhadap pembaruan
  • menentukan skala jumlah pod untuk menangani beban kerja yang berubah

Contoh konfigurasi deployment

3. Horizontal Pod Autoscaling

Horizontal Pod Autoscaler atau HPA adalah fitur Kubernetes yang dapat secara otomatis menambah atau mengurangi jumlah pod dalam Deployment, ReplicaSet atau StatefulSet berdasarkan metrik CPU, memori, atau metrik kustom yang kita tentukan.

Fungsi utama HPA adalah:

  • Scaling otomatis: HPA sendiri akan memonitor metrik seperti pemmakaian CPU dan memori dari pod yang ada, kemudian menambah dan mengurangi jumlah pod berdasarkan metrik tersebut untuk menjaga performa aplikasi
  • Responsif terhadap beban kerja: HPA akan sangat membantu dalam memastikan aplikasi tetap resoponsif dengan menyesuakan jumlah pod terhadap perubahan beban kerja.

Contoh konfigurasi HPA:

Sedikit penjelasan tentang konfigurasi di atas:

  • scaleTargetRef: menunjukan resource target yang akan diskalakan dalam hal ini deployment nginx-deployment.
  • minReplicas: mengatur jumlah minimum pod yang akan dijalankan
  • maxReplicas: mengatur jumlah maksimum pod yang akan dijalankan
  • targetCPUUtilizationPercentage: persentase penggunaan CPU yang diinginkan. Jika penggunaan CPU dari pod melebihi nilai ini, HPA akan menambah jumlah pod, dan sebaliknya.

Arsitektur Kubernetes

source: https://www.metricfire.com/blog/what-is-kubernetes-a-container-orchestration-platform/

Arsitektur kubernetes senndiri diarancang dengan model client-server. Komponen ini dibagi menjadi dua yaitu komponnen master dan kommponen node

  1. Komponen Master
  • API Server: titik masuk utama semua perintah yang ada di kubernetes. API Server inni mengekspos semua API Kubernetes.
  • etcd: tempat penyimpanan data konsisten dan tersdistribusi yang digunakan untuk menyimpan semua data kluster.
  • Controller Manager: mengelola controller yang bertanggung jawab atas fungsi reguler kluster, seperti node controller, replication controller dan lain-lain.
  • Scheduler: menjadwalkan pod ke node yang sesuai berdasarkan sumber daya dan kebijakan yang telah ditentukan.

2. Komponen Node

  • kubelet: agen yang berjalan pada setiap node, memastikan kontainer dijalankan sesuai dengan spesifikasi pod.
  • kube-proxy: mengelola aturan jaringan pada node, memungkinkan komunikasi jarikan ke dan dari pod.
  • Container runtime: perangkat lunak yang menjalankan kontainer, seperti Docker atau containerd.

Bagaimana dengan keamaan di kubernetes?

Keamanan merupakan aspek penting dalam setiap deployment aplikasi. Kubernetes sendiri memiliki beberapa fitur keamanan, yaitu:

  • Network Policies: mengatur lalu lintas jaringan antara pod.
  • RBAC (Role-Based Access Control): mengatur izin berdasarkan peran pengguna.
  • Pod Security Policies: mengatur izin tingkat pod untuk memastikan hanya pod yang aman yang dapat dijalankan.

Tools apa saja yang telah mendukung ekosistem kubernetes?

Ekosistem kubernetes senndiri sebenarnnya sangat luas dengan banyak tools yang mendukung berbagai aspek pengelolaan kontainer dan kluster. Beberapa tools yang populer diantaranya:

  • Helm: package manager untuk kubernetes yang memudahkan pengelolaan chart untuk aplikasi Kubernetes.
  • Prometheus: sistem monituring alerting yang populer digunakan dengan kubernetes
  • Istio: service mesh yang menyediakan fitur seperti load balancing, authentication dan observability.

Contoh studi kasus: Menggunakan Kubernetes untuk aplikasi e-commerce

Kita bayangkan kita memiliki aplikasi e-commerce yang terdiri dari beberapa layanan seperti frontend, backend, database, dan layanan pembayaran. Dengan kubernetes, kita bisa:

  1. Mengelola deployment: menggunakan deployment untuk mengelola layanan frontend dan backend. Memastikan mereka selalu up-to-date dan tersedia.
  2. Scaling: menyiapkan autoscaling untuk menghadapi lonjakan traffic pada waktu-waktu tertentu seperti promosi besar-besaran, event diskon dan lainnya.
  3. Keamanan: menggunakan network policies untuk membatasi akses antar layanan dengann RBAC untuk mengatur izin akses ke cluster.

Kesimpulan

Kubernetes adalah platform orkestrasi container yang kuat dan fleksibel, memungkinkan pengembang dan tim IT untuk dengan mudah mengelola aplikasi container di lingkungan produksi. Dengan fitur-fitur seperti deployment management, autoscaling, dan keamanan, Kubernetes menjadi tools yang esensial dalam era cloud-native.

Dengan penjelasan di atas, semoga kita dapat memahami dasar-dasar Kubernetes. Pada artikel selanjutnya kita akan bahas bagaimana cara mengimplementasikan fitur-fiturnya secara lebih detail dan bagaimana proses instalasi kubernetes pada baremetal server.

--

--