Sebelum membahas cara menggunakan Kubernetes, ada baiknya kita memahami latar belakang pembuatan Kubernetes dan permasalahan apa yang coba diselesaikan oleh Kubernetes.
Pada Zaman Dulu
Untuk dapat diakses melalui jaringan internet, aplikasi harus dipasangkan pada server, baik itu server khusus maupun komputer personal. Semakin berkembangknya teknologi web, pemasangan aplikasi web pada server semakin banyak dilakukan, baik oleh perusahaan maupun perorangan. Untuk suatu perusahaan tidaklah sulit untuk membeli satu server sebagai tempat untuk memasangkan aplikasinya. Tetapi untuk pengguna pribadi, membeli satu server akan mengeluarkan biaya yang banyak.
Dari permasalahan diatas, lahirlah istilah untuk menyewa server. Terdapat pihak yang menyediakan jasa penyedia penyewaan server dan pengguna jasa. Untuk dapat memasangkan aplikasinya pada server yang sudah disewa, pengguna mengunggah file menggunakan File Transfer Protocol (FTP) ke server yang sudah disewa. Pada server, pengguna akan berbagi storage dengan pengguna lainnya. File mereka akan ditempatkan pada folder terpisah pada satu server. Hal ini dinilai tidak aman karena seorang pengguna bisa saja mengakses file milik pengguna lainnya.
Permasalahan lainnya adalah semakin banyak aplikasi yang dikembangkan, semakin banyak pula server yang dibutuhkan. Pemasangan satu aplikasi pada suatu server dinilai tidak efisien karena sumber daya pada server tidak digunakan sepenuhnya oleh aplikasi. Misalnya, server memiliki CPU 8 core dan RAM 16 GB, tetapi aplikasi yang dipasangkan hanya menggunakan 4 core dari 8 core dan menggunakan 5 GB dari 16 GB RAM yang ada.
Kelahiran Virtualisasi
Untuk mengatasi masalah diatas, dikembangkanlah suatu konsep baru yang dinamakan virtualisasi. Virtualisasi memungkinkan menjalankan beberapa mesin virtual pada satu server fisik. Setiap mesin virtual yang dipasangkan akan memiliki satu sistem operasi dan sistem operasi yang dipasangkan dapat berbeda-beda. Dengan demikian, setiap mesin virtual akan terpisah dengan mesin virtual lainnya. Disamping itu, sumber daya pada server dapat digunakan secara bersama oleh beberapa mesin virtual sehingga penggunaan sumber daya pada server lebih maksimal. Contoh teknologi virtualisasi adalah VMWare Workstation dan VitualBox. Berikut adalah gambaran artitektur sistem virtualisasi.
Jika kita perhatikan, akan terdapat layer Hypervisor. Hypervisor berguna untuk mengontrol semua mesin virtual dalam satu server. Diatas Hypervisor akan terdapat beberapa mesin virtual. Pada layer system operasi, setiap virtual mesin akan memiliki komponennya masing-masing seperti kernel dan registry. Dengan memiliki komponen tersendiri, maka setiap mesin virtual dipastikan terpisah dari mesin virtual lainnya. Tetapi, hal ini membuat mesin virtual akan memakan waktu lebih lama untuk hidup karena semua komponennya perlu di–load.
Kemunculan Kontainerisasi
Dengan kekurangan dari virtualisasi, maka para pengembang menciptakan konsep baru, yaitu kontainersisasi. Kontaineriasi mirip dengan virtualisasi, dimana keduanya memungkin suatu aplikasi berjalan pada lingkungan yang terisolasi dengan lingkungan lainnya. Perbedaannya adalah, kontainerisasi tidak membungkus aplikasi dan sistem operasinya, melainkan membungkus aplikasi dengan library yang dibutuhkannya untuk berjalan. Dengan tidak terbungkus dengan sistem operasi, kontainerisasi dapat dijalankan lebih cepat dari pada virtualisasi. Berikut adalah gambaran arstitektur sistem kontainerisasi.
Pada arsitektur kontainerisasi, terdapat layer Container Engine. Container Engine ekuivalen dengan Hypervisor pada artistektur virtualisasi. Container Engine bertugas untuk mengatur proses aktivitas dari kontainer yang dipasangkan. Contoh teknologi kontainersisasi adalah Docker, LXC, rkt, dan containerd.
Gambar berikut adalah ringkasan dari perkembangan cara memasang aplikasi pada server.
Orkestrasi Kontainer
Kemunculan teknologi kontainerisasi sangat diterima oleh para pengembang perangkat lunak, terlebih Docker. Docker menyediakan cara yang sederhana untuk membungkus aplikasi. Aplikasi dibungkus dalam bentuk image. Docker image inilah nantinya yang akan dijalankan di dalam kontainer. Docker image juga bisa berukuran sangat kecil, kurang lebih 10 MB, tergantung cara pembuatan image. Kita dapat menjalankan banyak docker container dalam satu komputer.
Dengan kelebihan yang ditawarkan Docker, ada hal lain yang dibutuhkan, yaitu bagaimana mengatur proses berjalannya kontainer dalam beberapa komputer. Hal ini dikenal dengan istilah orkestrasi. Menjalankan banyak kontainer dalam satu komputer akan memperbesar risiko kegagalan aplikasi jika komputer tersebut gagal. Dengan membagi kontainer dibeberapa mesin, akan mengurangi kemungkinan kegagalan sistem. Hal tersebut menjadi ide utama dari orkestrasi, yaitu bagaimana menjalakan banyak kontainer di banyak komputer. Ide ini turunkan menjadi ide utama dari pengembangan Kubernetes.
Arsitektur Kubernetes
Gambar diatas adalah arstitektur dari suatu klaster Kubernetes. Seperti ide utama dari pengembangan Kubernetes, pada satu klaster terdapat beberapa komputer yang diintegrasikan untuk menjalankan kontainer. Komputer yang ada dibagi menjadi dua jenis, yaitu master node dan worker node. Master node adalah komputer yang digunakan untuk menjalankan Kubernetes API Server. Worker node adalah tempat dimana kontainer akan dijalankan. Master node berkomunikasi dengan worker node melalui kubelet .
Kubernetes API Server bertugas untuk menerima dan mengolah request dari Kubernetes Client. Request tersebut akan diolah untuk menentukan kondisi deployment yang diharapkan dan kondisi deployment yang diharapkan akan disimpan dalam basisdata. Lalu Kubernetes API Server akan melakukan pembandingan antara kondisi deployment yang diharapkan dengan kondisi deployment yang sekarang berjalan di klaster. Jika kondisinya tidak sama, maka Kubernetes API Server akan berkomunikasi dengan worker node untuk menyamakan kondisinya.
Untuk memperjalan bagaimana Kubernetes bekerja, mari kita perhatikan contoh berikut ini.
Misalkan, request yang diterima adalah menjalankan kontainer user-service. Request ini akan disimpan menjadi kondisi yang diharapkan. Lalu Kubernetes API Server akan mengecek apakah kontainer user-service sudah berjalan diantara worker node. Jika kontainer user-service belum berjalan, maka Kubernetes API Server akan melakukan penjadwalan untuk menjalankan user-service. Kubernetes API Server akan memilih salah satu node yang akan digunakan untuk menjalankan kontainer user-service.
Begitu kira-kira gambaran cara kerja Kubernetes. Intinya, kita mendefinisikan kondisi deployment yang kita harapkan. Lalu Kubernetes akan mencoba untuk mensinkronkan kondisi deployment dengan kondisi yang kita inginkan. Tetapi sebenarnya, Kubernetes tidak sesederhana itu. Masih banyak hal-hal lain yang perlu kita ketahui untuk menjalankan aplikasi kita dengan Kubernetes. Topik-topik tersebut akan kita bahas pada part-part berikutnya.
Sekian dulu sejarah dan cara kerja Kubernetes. Konsep yang sederhana ini akan kita gunakan sampai akhir dari series ini. Maka dari itu pastikan teman-teman paham dulu cara kerja Kubernetes.
Cappy Hoding! 🖖🏾