Kubernetes

Kubernetes

rama jz

Introduction

Apa itu Kubernetes ?

Kubernetes adalah platform open source yang digunakan untuk manajemen container. Kubernetes bisa disingkat menjadi K8s dimana huruf K merupakan huruf depan, angka 8 merupakan jumlah huruf dari “ubernete” dan s adalah huruf terakhir. Sehingga Kubernetes = K8s .


Mengapa kubernetes ?

Perkembangan teknologi semakin cepat, termasuk datangnya teknologi baru yaitu container. Dengan menggunakan container, seluruh aplikasi yang kita miliki akan di kemas sehingga ketika akan di jalankan dimanapun, aplikasi tersebut akan berjalan sama serperti pada saat kita mencobanya. Kita tidak perlu lagi menginstall server dengan berbagai macam aplikasi, environment, dan kebutuhan lainnya, karena semua yang dibutuhkan oleh aplikasi tersebut sudah terpasang di container.


Untuk menjalankan container, tentunya membutuhkan sebuah aplikasi. Aplikasi yang paling umum digunakan adalah Docker. Docker di install di server, kemudian kita jalankan docker image dan terbentuklah container dan aplikasi kita sudah berjalan dan bisa digunakan.

Tetapi untuk kebutuhan production, tidak cukup hanya sekedar aplikasi bisa berjalan, kita membutuhkan sistem yang handal yang mampu membuat aplikasi kita selalu available, tidak ada downtime, memiliki security yang handa, bisa menerima banyak traffic, dan sebagainya. Untuk itu diperlukan lah sebuah orkestrasi (orchestration) yang bertugas untuk memanajemen itu semua. Maka yang bisa kita gunakan untuk itu semua adalah kubernetes.

Kubernetes dikembangkan oleh google dan kubernetes merupakan open source. Semua yang dijalankan di kubernetes, bisa anda simpan dalan file YML, sehingga apapun yang ada didalam cluster kubernetes anda, anda akan memiliki dokumentasinya. Sebagai contoh ketika anda ingin membuat deployment yang didalamnya terdapat beberapa pod dengan spesifikasi container image nginx:latest, kemudian pod tersebut di ekpose menggunakan service, maka anda hanya perlu membuat sebuah file deploymen.yml, kemudian anda ketikan kubectl create -f deployment.yml dalam waktu yang singkat apa yang anda butuhkan sudah terbentuk.

Begitu juga jika anda ingin mengubah jumlah pod yang ada, tinggal anda ubah file deployment.yml tersebut, kemudian anda ketikan kubectl apply -f deployment.yml , maka jumlah pod pun sudah berubah sesuai dengan yang anda definisikan di file deployment tersebut.

Jika anda ingin membuat resource yang sama dengan nama yang berbeda, anda tinggal duplikasikan file deployment.yml dan ubah sesuai dengan yang anda inginkan, ketikan kubectl create -f deployment.yml , maka resource yang baru sudah terbentuk.

Dengan demikian, semua resource yang anda bangun sudah terdokumentasi dan akan mempermudahkan anda kedepannya.

Kelebihan Kubernetes

Berikut beberapa hal yang dapat dilakukan kubernetes :


→ Service discovery and load balancing

Kubernetes dapat mengekspose container menggunakan nama DNS atau menggunakan IP address server itu sendiri. Jika trafik ke container besar, kubernetes akan otomatis melakukan load balancing trafik (penyeimbanagn beban) dan melakukan distribusi trafik sehingga aplikasi selalu stabil.

→ Storage orchestration

Kubernetes memungkinkan untuk me-mount sistem storage yang anda inginkan, seperti lokal storage, atau storage dari cloud provider seperti aws, dan alicloud.

→ Automated rollouts and rollbacks

Deployment di kubernetes bisa menggunakan file YAML. Sehingga anda dapat mendeskripsikan terlebih dahulu deployment yang anda inginkan, kemudian anda lakukan deployment. Anda dapat menggunakan file YAML tersebut untuk melakukan deployment lainnya atau untuk mengubah deployment yang ada. Atau anda bisa melakukan rollback jika anda memiliki file YAML yang terdahulu. Sehingga semua terdokumentasi dan semua bisa dilakukan dengan otomatis.

→ Automatic bin packing

Kubernetes mengizinkan anda untuk memberikan container dengan CPU dan RAM secara spesifik. Ketika container memiliki sumber daya yang ditentukan, Kubernetes dapat membuat keputusan yang lebih baik dalam mengelola sumber daya untuk container.

→ Self-healing

Kubernetes merestart container yang gagal, mematikan dan mengganti container yang tidak menanggapai request, dan kubernetes tidak akan memberikan trafik ke container sampai container benar-benar siap untuk menerima request (ready to serve).

→ Secret and configuration management

Kubernetes memungkinkan anda untuk menyimpan data-data yang sentitif, seperti password, auth token dan ssh keys. Anda dapat membangun dan mengupdate secret tanpa harus membangun ulang container image anda, dan tanpa mengekspose secret anda didalam konfigurasi anda.

Konsep Kubernetes

Cluster Kubernetes

Dalam Cluster Kubernetes terdapat beberapa node. Node merupakan Server, baik server fisik atau Virtual Private Server (VPS) yang digunakan untuk menjalankan kubernetes. Untuk membuat cluster kubernetes dibutuhkan setidaknya 1 server untuk kubernetes-master atau node-master dan 1 server untuk kubernetes-node atau node-1.


  • Kubernetes Master


Kubernetes master adalah server yang bertindak sebagai node-master. Kubernetes master menjalankan tiga komponen yaitu kube-apiserverkube-controller-manager, dan kube-scheduller.

→ PENJELASAN Komponen Master :

kube-apiserver, merupakan front-end dari kontrol plane Kubernetes dan merupakan komponen di node master yang mengekspos API Kubernetes. Komponen ini didesain agar dapat di-scale secara horizontal. Server API Kubernetes memvalidasi dan mengonfigurasikan data untuk objek api yang mencakup pod, services, replication controller, dan lainnya.

kube-controller-manager, merupakan komponen di node master yang menjalankan kontroler. Secara logis, setiap kontroler adalah sebuah proses yang berbeda, tetapi untuk mengurangi kompleksitas, kontroler-kontroler ini dikompilasi menjadi sebuah binary yang dijalankan sebagai satu proses.

kube-scheduller, merupakan komponen di master yang bertugas mengamati pod yang baru dibuat dan belum di-assign ke suatu node dan kemudian akan memilih sebuah node dimana pod baru tersebut akan dijalankan.

  • Kubernetes Nodes


Kubernetes nodes adalah semua server non-master yang terdaftar di server master. Kubernetes nodes menjalankan dua komponen, yaitu kubelet dan kube-proxy.

→ PENJELASAN Komponen Nodes:

kubelet, merupakan agen yang dijalankan pada setiap node di kluster dan bertugas memastikan kontainer dijalankan di dalam pod.

kube-proxy, bertugas membantu abstraksi service Kubernetes melakukan tugasnya. Hal ini terjadi dengan cara memelihara aturan-aturan jaringan (network rules) serta meneruskan koneksi yang ditujukan pada suatu host.

Object Kubernetes

  • Pod
  • Service
  • Volume
  • Namespace

→ PENJELASAN :

Pod merupakan objek terkecil didalam cluster kubernetes. Pod menjalankan docker images sehingga membentuk sebuah container didalam pod. Sebuah pod memiliki ip address dan hanya bisa diakses dari lokal kubernetes cluster itu sendiri.

Pod → Container

Service digunakan untuk mengekpose pod supaya pod bisa diakses dari luar. Service seperti Load Balancer dan pod merupakan targetnya. Jadi satu service bisa mengarahkan request ke beberapa pod.

Service → Pod → Container

Volume adalah sebuah directory yang memungkinkan data di simpan didalamnya dan terletak diluar container. Kubernetes mendukung beberapa tipe volume yaitu : awsElasticBlockStore, azureDisk, azureFile, cephfs, cinder, configMap, csi, downwardAPI, emptyDir, fc (fibre channel), flexVolume, flocker, gcePersistentDisk, gitRepo (deprecated), glusterfs, hostPath, iscsi, local, nfs, persistentVolumeClaim, projected, portworxVolume, quobyte, rbd, scaleIO, secret, storageos dan vsphereVolume.

Namespace digunakan untuk memisahkan resource atau environment. Anda dapat membuat tiap project di berbeda namespace untuk mengisolasi project supaya tidak saling terganggu satu sama lain. Jika anda tidak mendeklarasikan namespace, maka namespace yang akan digunakan adalah namespace default .

Object Tambahan

Sebagai tambahan, Kubernetes memiliki beberapa abstraksi yang lebih tinggi yang disebut kontroler. Kontroler merupakan obyek mendasar dengan fungsi tambahan, contoh dari kontroler ini adalah:


  • Replicaset
  • Deployment
  • StatefulSet
  • DaemonSet
  • Job

Replicaset memiliki peranan untuk memastikan berapa jumlah pod yang harus running dan harus menggunakan container image yang mana, serta informasi lain seputar pod.

Deployment digunakan untuk mengontrol pod dan replicaset. Didalam deployment inilah pod dan replicaset di setup.

StatefulSet adalah workload API object yang digunakan untuk memanajemen aplikasi stateful.

DaemonSet berfungsi untuk memastikan pod berjalan di setiap node yang terdaftar di master. Ketika ada penambahan node kedalam cluster, maka pod akan ditambahkan ke node tersebut. Menghapus DaemonSet akan menghapus semua pod yang terbuat.

Job bertugas memastikan jumlah pod sesuai dengan jumlah yang di definisikan. Jika terdapat kegagalan saat membuat pod (misal karena node belum siap), maka ketika node sudah ready, job akan menjalankan pod baru di node tersebut.

Istilah Tambahan

Istilah ini yang mungkin akan saya gunakan untuk artikel selanjutnya yaitu mengenai bagaimana cara membuat Cluster Kubernetes.


  • Ingress: hampir sama dengan reverse proxy atau ALB (Aplication Load Balancer) di AWS. ingress akan mendengar request berupa domain atau subdomain. Request domain atau subdomain tersebut akan diteruskan ke service untuk kemudian request akan diteruskan ke pod.
  • Ansible : Aplikasi untuk provisioning
  • Docker : Aplikasi yang digunakan untuk menjalankan container
  • Flannel : Digunakan untuk jaringan antar node dalam cluster kubernetes
  • Kubeadm : Tools yang digunakan untuk inisialisai nodes kubeadm ini dan join nodes kubeadm join sehingga membentuk cluster kubernetes.
  • Kubelet : merupakan node agent yang berjalan di tiap-tiap node
  • Kubectl : command yang digunakan untuk mengontrol kubernetes cluster

Kesimpulan

Kubernetes atau K8s merupakan orkestrasi container open source yang dikembangkan oleh google. Cluster Kubernetes terdiri dari kubernetes-master dan kubernetes-nodes. Cluster Kubernetes terdiri dari beberapa object, seperti: Pod, Service, Volume, dan Namespace serta beberapa object tambahan seperti: ReplicaSet, Deployment, StatefulSet, DaemonSet dan Job.


Kubernetes memiliki beberapa kelebihan, seperti: Service discovery and load balancing, Storage orchestration, Automated rollouts and rollbacks, Automatic bin packing, Self-healing, serta Secret and configuration management.

Setelah kita memahami konsep dari kubernetes dan istilah di dalamnya, langkah selanjutnya yaitu bagaimana cara membuat cluster kubernetes ? Bagaimana caranya akan saya tulis pada tulisan saya selanjutnya.

Semoga apa yang sudah di jelaskan diatas dapat bermanfaat. Jika ada kesalahan maka itu dari saya, jika ada kebenaran itu hanya milik sang maha benar (allah). Cukup sekian dari saya dan terimakasih.


Report Page