Kubernetes: Pengertian, Implementasi dan Manfaat

Kubernetes: Pengertian, Implementasi, dan Manfaat

Kubernetes menjadi perkakas yang sangat dibutuhkan di era serba cepat ini. Kemampuan deployment dalam waktu singkat dan tanpa mengganggu pengguna menjadi faktor utama yang dipertimbangkan saat ingin mengirim suatu perangkat lunak.

Pada tahun 2013, Docker memperkenalkan deployment berbasis container. Cara deployment tersebut merupakan suatu inovasi yang cemerlang dan membantu perusahaan teknologi dalam memberikan perangkat lunak kepada penggunanya.

Pada artikel ini akan dibahas salah satu container orchestration tools yaitu Kubernetes. Sebenarnya masih banyak perkakas lain yang mampu melakukan orkestrasi container seperti Docker Swarm, HashiCorp Nomad, Apache Mesos, dan lain-lain. Mari kita simak pengertian, implementasi, dan manfaat dari Kubernetes.

💻 Mulai Belajar Pemrograman

Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.

Daftar Sekarang

Pengertian Kubernetes

Kubernetes merupakan sumber terbuka mesin orkestrasi kontainer (open source container orchestration engine) untuk mengotomatiskan deployment, scaling, dan pengelolaan dari aplikasi yang dikemas (containerized). Kubernetes atau proyek ini dikelola oleh Cloud Native Computing Foundation (CNCF). Proyek ini awalnya dikembangkan oleh Google, tetapi menjadi sumber terbuka sejak tahun 2014. Nama Kubernetes ini berasal dari bahasa Yunani yang berarti seorang pilot atau juru mudi.

Kubernetes dikenal sebagai K8s yang merupakan singkatan dari menghitung delapan huruf antara “K” dan “s”. Kubernetes memanfaatkan deployment menggunakan container yang saat itu cukup membantu dalam dunia deployment dibandingkan deployment secara tradisional maupun virtualisasi. Perkembangan dunia deployment dapat juga dilihat melalui gambar di bawah ini.

Perkembangan Dunia Deployment

Perkembangan Dunia Deployment

Komponen-Komponen Kubernetes Cluster

Komponen-komponen kubernetes cluster cukup banyak untuk dibahas pada artikel ini, sehingga komponen yang dibahas hanya beberapa bagian. Secara singkat dapat dibagi menjadi dua komponen yaitu Control Plane dan Node. Namun, masih banyak komponen-komponen penyusun Control Plane dan Node. Oh iya, kamu juga bisa mempelajari komponen-komponen dan pengertiannya pada kelas Belajar Membangun Arsitektur Microservices, loh.

Komponen-komponen pada Control Plane bertanggung jawab dalam mengontrol kluster seperti penjadwalan, merespon kejadian-kejadian dalam kluster, menyalakan suatu pod, dan banyak hal lainnya terutama dalam hal pengelolaan container. Komponen pada Control Plane sebagai berikut kube-apiserver, etcd, kube-scheduler, kube-controller-manager, dan cloud-controller-manager. Selengkapnya mengenai komponen-komponen tersebut ada baiknya mengacu kepada dokumentasinya untuk memahaminya lebih lanjut atau kamu bisa pelajari melalui kelas Belajar Membangun Arsitektur Microservices, ya.

Komponen Node bertanggung jawab dalam pemeliharaan terhadap pod dan menyediakan environment runtime. Komponen-komponen Node adalah kubelet, kube-proxy, dan Container Runtime. Penjelasan lengkap mengenai komponen tersebut ada pada halaman dokumentasinya.

Implementasi Kubernetes

Untuk melakukan implementasi Kubernetes, ada baiknya kamu juga sudah memahami Kubernetes Object, dalam hal ini kita akan sedikit membahas mengenai pod, service, dan deployment saja. Kubernetes Object lain seperti namespace, HorizontalPodAutoscaler, Volume, Persistent Volume, ConfigMap, Secret, dan StatefulSet kamu dapat pelajari pada kelas Belajar Membangun Arsitektur Microservices.

Instalasi

Sebelum lebih jauh, ada banyak jalan menuju Roma, eh, maksudnya banyak cara untuk melakukan instalasi Kubernetes ke mesin yang akan kamu gunakan. Kamu dapat memasang Kubernetes yang hanya memiliki satu kluster untuk mesin pribadi kamu, tetapi biasanya akan menggunakan multi-kluster untuk lingkungan produksi.

Supaya kamu dapat mengikuti lebih lanjut, kamu dapat mengikuti panduan instalasi Kubernetes menggunakan perkakas minikube. Pastikan kamu sudah bisa menggunakan kubectl pada komputer kamu. Singkatnya kamu bisa menggunakan perintah berikut (sesuaikan dengan sistem operasi dan arsitektur CPU kamu, ya).

  • Linux

  • Windows

  • MacOS

Mencoba Implementasi

Sebelum menggunakan perintah kubectl, pastikan kamu sudah menjalankan klusternya menggunakan perintah berikut.


Jika sudah memiliki kubectl, kamu bisa lompat ke bagian berikutnya. Namun, jika kamu belum memiliki kubectl, minikube juga menyediakan kubectl yang memungkinkanmu untuk memberikan alias sehingga saat menggunakan perintah kubectl sebenarnya akan memanggil kubectl milik minikube.


Sepertinya kamu sudah siap nih untuk mulai mengimplementasikan Kubernetes. Mari kita coba beberapa Kubernetes Object seperti pod, service, dan deployment. Sebenarnya masih banyak Kubernetes Object yang bisa kamu eksplorasi. Nah, itu jadi bahan eksplorasi secara pribadi, ya.

Kamu akan memulainya dari bagian terkecil dari Kubernetes yaitu pod. Sebenarnya apa sih itu pod? Pod adalah unit terkecil yang dapat kamu deploy sehingga kamu bisa membuat dan mengelolanya di Kubernetes. Dalam sebuah pod kamu dapat memiliki satu atau lebih container dengan penyimpanan dan jaringan yang saling berbagi. Dalam menulis konfigurasi untuk pod, kamu perlu menggunakan format berkas yaml dan tentu saja kamu perlu memperhatikan indentasi. Kita simak konfigurasi berikut.


Kamu bisa menuliskan itu di mesin kamu lalu melakukan perintah kubectl apply, tetapi kamu juga bisa menggunakan perintah berikut untuk mempermudah kamu tanpa menulis konfigurasinya pada komputer kamu.


Nah, ini bagian uniknya, kamu bisa memberikan konfigurasi dari internet dan kubectl akan mencoba membaca konfigurasinya. Namun, tetap berhati-hati ya dengan konfigurasi yang tersedia di internet.

Singkatnya kamu sudah berhasil men-deploy suatu pod nginx ke kluster Kubernetes kamu. Sayangnya, kamu belum bisa mengakses pod ini karena masih terisolasi dari dunia luar. Mari kita lanjutkan ke objek selanjutnya yaitu service.

Supaya lebih mudah, kamu akan menggunakan service dengan tipe NodePort. Ada banyak jenis service yaitu ClusterIP, NodePort, LoadBalancer, dan ExternalName. Secara singkat service ini berfungsi sebagai suatu abstraksi untuk mengekspos grup pod ke suatu jaringan. Jadi, kamu bisa memudahkan komunikasi antar pod. Sebagai bahan eksplorasi, kamu simak konfigurasi berikut.


Jangan lupa melakukan perintah berikut ya dan jangan lupa sesuaikan dengan nama berkas kamu. Misalnya, kamu dapat memberikan nama nginx-service.yaml.


Nah, sekarang pod kamu yang sebelumnya sudah bisa diakses nih. Kamu bisa menggunakan perintah berikut untuk mengaksesnya dari perambanmu.


Jika sudah berhasil diakses, berarti sudah saatnya kamu eksplorasi ke objek yang lebih kompleks yaitu deployment. Secara singkat, deployment ini membantu kamu untuk mengelola banyak pod menjadi suatu grup dan memiliki state yang kamu inginkan. Misalnya, jika ingin memiliki beberapa pod dalam suatu deployment, kamu bisa menggunakan konfigurasi berikut ini.


Dalam konfigurasi tersebut, kita akan membuat pod nginx sebanyak 3 replika. Jadi kamu akan memiliki tiga pod yang nantinya beban jaringannya dapat kamu bagi saat menggunakan service. Karena tadi kamu sudah pernah deploy pod nginx, sebaiknya hapuslah pod tersebut terlebih dahulu sehingga kamu tidak bingung akses ke pod yang mana.


Setelah itu, kamu bisa men-deploy nginx menggunakan perintah berikut.


Karena sebelumnya kamu sudah membuat service, nah kamu bisa coba akses lagi dengan perintah berikut, ya.


Loh, kok sepertinya tidak ada bedanya, ya? Nah, sebenarnya kamu sedang mengakses pod yang berbeda. Kamu tidak bisa membedakannya karena pod yang diberikan merupakan pod yang sejenis. Hal ini biasa digunakan untuk membagi tugas jika beban sudah terlalu penuh pada suatu pod sehingga layanan yang kamu sediakan tidak mengalami gangguan.

Apakah kamu semakin tertarik mengeksplorasi Kubernetes objek yang lainnya? Nah, kamu bisa eksplorasi lebih dalam melalui kelas Belajar Membangun Arsitektur Microservices.

Saat ini, kamu sudah mempelajari dasar-dasar dan komponen yang sering digunakan dalam Kubernetes. Apakah kamu penasaran manfaatnya saat menggunakan perkakas ini? Mari simak bagian berikutnya mengenai manfaat Kubernetes.

Manfaat Kubernetes

Kamu sudah tau definisi dan implementasi Kubernetes, saatnya kita mengetahui manfaatnya. Setiap keputusan dalam memilih suatu teknologi sudah pasti ada kelebihan dan kekurangannya. Kubernetes bisa menjadi suatu teknologi yang cukup rumit digunakan jika kamu ingin melakukan deployment aplikasi atau perangkat lunak yang sederhana.

Walaupun kelihatannya begitu rumit, tetapi manfaat dari Kubernetes inilah yang membuat beberapa perusahaan teknologi tetap memilih perkakas ini sebagai pendukung dalam hal deployment. Manfaat dan apa yang disediakan dari Kubernetes yaitu:

  • Penemuan Layanan (Service Discovery) dan Penyeimbang Beban (Load Balancing)
    • Kubernetes memungkinkan container diakses melalui nama DNS (Domain Name Service) maupun alamat IP. Hal ini akan memudahkan dalam menemukan layanan yang sesuai.
    • Kubernetes juga mampu menyeimbangkan lalu lintas jaringan ke suatu container. Container yang sedang sibuk tidak akan dipenuhi oleh permintaan yang menunggu jawaban. Namun, ia akan diarahkan kepada container lain yang sudah siap melakukan pengerjaan dan siap menjawab permintaan tersebut.
  • Orkestrasi Penyimpanan (Storage Orchestration)
    • Kubernetes memperbolehkan kamu untuk secara otomatis menggunakan suatu sistem penyimpanan sesuai pilihan kamu, sebagai contoh penyimpanan lokal, cloud, dan lain-lain. Sehingga, kamu memiliki banyak pilihan dan dapat disesuaikan dengan kebutuhan penyimpananmu.
  • Automated Rollouts and Rollbacks
    • Melakukan deployment banyak container menjadi sangat mudah karena kamu hanya menentukan berapa container yang akan dibutuhkan. Secara otomatis, Kubernetes akan men-deploy container sesuai dengan jumlah yang sudah kamu tentukan.
  • Self-healing
    • Saat melakukan deployment tidak menutup kemungkinan terjadi galat. Jika container berhenti, sudah tentu menjadi sesuatu yang tidak diinginkan bagi pengguna maupun pengelola. Kubernetes membantu dalam hal memastikan layanan tetap dapat diakses di saat ada container yang sedang bermasalah.
  • Secret and Configuration Management
    • Ini adalah hal terpenting dan sering digunakan dalam berbagai perangkat lunak. Sangat memungkinkan jika kita memiliki konfigurasi yang berbeda pada setiap tahap pengembangan perangkat lunak. Kamu dapat dengan mudah mengelola konfigurasi tersebut sehingga berbeda antara lingkungan pengembangan maupun produksi. Tidak hanya konfigurasi, begitu juga dalam pengelolaan secret.
  • Batch Execution
    • Tidak hanya memberikan layanan seperti API (Application Programming Interface), kamu juga dapat memberikan Kubernetes untuk mengelola tugas batch dan CI (Continuous Integration).
  • Skala Horizontal (Horizontal Scaling)
    • Kamu dapat dengan mudah mengurangi maupun menambah container yang dibutuhkan. Hal ini juga dapat dilakukan secara otomatis berdasarkan penggunaan CPU.
  • IPv4/IPv6 dual-stack
    • Tidak terbatas penggunaan IPv4, kamu juga bisa menggunakan IPv6 secara bersamaan untuk pod dan service.
  • Designed for extensibility
    • Kamu juga bisa menambahkan fitur-fitur lain untuk mengelola kluster Kubernetes tanpa mengubah kode-kode atau layanan yang sudah kamu deploy pada kluster tersebut. Sehingga, kamu tidak perlu repot untuk membuat perubahan pada kode yang kamu miliki.

Dari berbagai manfaat yang Kubernetes sediakan, apa layanan yang sangat kamu butuhkan? Kamu bisa berbagi juga jika menemukan manfaat lain dari Kubernetes ini. Selamat bereksplorasi!


Belajar Pemrograman Gratis
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.