Kubernetes vs Docker: Berikut Perbedaannya

· 7 min read
Kubernetes vs Docker: Berikut Perbedaannya
Photo by Caspar Camille Rubin / Unsplash

Kontainerisasi telah ada selama beberapa dekade tetapi adopsinya meningkat dalam beberapa tahun terakhir untuk pengembangan dan modernisasi aplikasi. Artikel ini membahas dua solusi kontainer dan kegunaannya:

  • Docker, yang merupakan solusi mesin kontainer, solusi orkestrasi kontainernya Docker Compose, dan Docker Swarm, yang merupakan solusi orkestrasi kontainer cluster.
  • Kubernetes, solusi cluster-container alternatif dan membandingkannya dengan Docker Swarm untuk membantu Anda memilih salah satu yang paling memenuhi kebutuhan Anda.

Apa itu Kontainerisasi?

Kontainerisasi adalah salah satu bentuk virtualisasi di tingkat aplikasi. Ini bertujuan untuk mengemas aplikasi dengan semua dependensi, runtime, pustaka, dan file konfigurasinya dalam satu paket terisolasi yang dapat dieksekusi, yang disebut container. Sistem operasi (OS) tidak termasuk dalam wadah yang membuatnya berbeda dari mesin virtual (VM), yang divirtualisasikan pada tingkat perangkat keras dan menyertakan OS.

Konsep di balik virtualisasi adalah pembagian sumber daya fisik antara beberapa mesin virtual, sedangkan container berbagi kernel dari satu OS di antara beberapa container. Tidak seperti mesin virtual, container lebih ringan karena tidak berisi OS. Inilah sebabnya mengapa container memerlukan waktu beberapa detik untuk melakukan booting. Selain itu, container dapat dengan mudah diterapkan di sistem operasi yang berbeda (Windows, Linux, macOS) dan di lingkungan yang berbeda (cloud, VM, server fisik) tanpa memerlukan perubahan apa pun.

Pada tahun 2013, Docker Inc. memperkenalkan Docker dalam upaya untuk menstandarisasi container agar dapat digunakan secara luas dan pada platform yang berbeda. Setahun kemudian, Google memperkenalkan Kubernetes sebagai solusi untuk mengelola sekelompok host container. Definisi kedua solusi tersebut akan menunjukkan perbedaan antara Kubernetes dan Docker.
Docker adalah platform sumber terbuka untuk mengemas dan menjalankan aplikasi dalam wadah standar yang dapat berjalan di berbagai platform dengan perilaku yang sama. Dengan Docker, aplikasi dalam container diisolasi dari host, yang menawarkan fleksibilitas dalam mengirimkan aplikasi ke platform apa pun yang menjalankan OS apa pun. Selain itu, mesin Docker mengelola container dan memungkinkannya berjalan secara bersamaan di host yang sama.

Karena arsitektur klien-server, Docker terdiri dari komponen sisi klien dan server (klien Docker dan daemon Docker). Klien dan daemon (Dockerd) dapat berjalan di sistem yang sama atau Anda dapat menghubungkan klien ke daemon jarak jauh. Daemon memproses permintaan API yang dikirim oleh klien selain mengelola objek Docker lainnya (kontainer, jaringan, volume, gambar, dll.).

Docker Desktop adalah penginstal klien dan daemon Docker dan menyertakan komponen lain seperti Docker Compose, Docker CLI (Command Line Interface), dan banyak lagi. Itu dapat diinstal pada berbagai platform: Windows, Linux, dan macOS.

Pengembang dapat merancang aplikasi untuk dijalankan pada beberapa container di host yang sama, sehingga menimbulkan kebutuhan untuk mengelola beberapa container secara bersamaan. Untuk alasan ini, Docker Inc. memperkenalkan Docker Compose. Docker vs Docker Compose dapat diringkas sebagai berikut: Docker dapat mengelola sebuah container, sedangkan Compose dapat mengelola banyak container di satu host.

Docker Compose

Mengelola aplikasi multi-kontainer pada host yang sama adalah tugas yang rumit dan memakan waktu. Docker Compose, alat orkestrasi untuk satu host, mengelola aplikasi multi-kontainer yang ditentukan pada satu host menggunakan format file Compose.

Docker Compose memungkinkan menjalankan beberapa container secara bersamaan dengan membuat satu file konfigurasi YAML tempat Anda mendefinisikan semua container. Compose memungkinkan Anda membagi aplikasi menjadi beberapa container, bukan membangunnya dalam satu container. Anda dapat membagi aplikasi Anda menjadi sub-layanan yang disebut layanan mikro dan menjalankan setiap layanan mikro dalam sebuah kontainer. Kemudian Anda dapat memulai semua container dengan menjalankan satu perintah melalui Compose.

Docker Swarm

Pengembang dapat merancang aplikasi untuk dijalankan pada beberapa container di host yang berbeda, sehingga memerlukan solusi orkestrasi untuk sekelompok container di host yang berbeda. Untuk alasan ini, Docker Inc. memperkenalkan Docker Swarm.

Docker Swarm atau Docker dalam mode Swarm adalah sekelompok mesin Docker yang dapat diaktifkan setelah menginstal Docker. Swarm memungkinkan pengelolaan beberapa container di host yang berbeda, tidak seperti Compose yang memungkinkan pengelolaan beberapa container di host yang sama saja.

Apa itu Kubernetes?

Kubernetes (K8s) adalah alat orkestrasi yang mengelola container pada satu atau lebih host. K8 mengelompokkan host baik di lingkungan lokal, cloud, atau hibrid, dan dapat berintegrasi dengan Docker dan platform kontainer lainnya. Google awalnya mengembangkan dan memperkenalkan Kubernetes untuk mengotomatiskan penerapan dan pengelolaan container. K8s menyediakan beberapa fitur untuk mendukung ketahanan, seperti toleransi kesalahan kontainer, penyeimbangan beban di seluruh host, serta pembuatan dan penghapusan kontainer secara otomatis.

Kubernetes mengelola cluster yang terdiri dari satu atau lebih host, yang merupakan node master atau node pekerja. Node master berisi komponen panel kontrol Kubernetes, sedangkan node pekerja berisi komponen non-panel kontrol (Kubelet dan Kube-proxy). Rekomendasinya adalah memiliki setidaknya satu cluster yang terdiri dari empat host: setidaknya satu node master dan tiga node pekerja untuk menjalankan pengujian Anda.

Komponen panel kontrol (master node)

Node master dapat menjangkau beberapa node tetapi hanya dapat berjalan di satu komputer. Disarankan agar Anda menghindari pembuatan kontainer aplikasi pada node master. Master bertanggung jawab untuk mengelola cluster. Ia merespons peristiwa klaster, membuat keputusan klaster, menjadwalkan operasi dengan kontainer, memulai Pod baru (sekelompok kontainer di host yang sama dan unit terkecil di Kubernetes), menjalankan loop kontrol, dll.

  • Apiserver adalah frontend panel kontrol yang memaparkan API ke komponen Kubernetes lainnya. Ini menangani akses dan otentikasi komponen lainnya.
  • Dll adalah database yang menyimpan semua data kunci/nilai cluster. Setiap node master harus memiliki salinan etcd untuk memastikan ketersediaan tinggi.
  • Penjadwal Kube bertanggung jawab untuk menetapkan sebuah node untuk Pod yang baru dibuat.
  • Manajer kendali Kube adalah sekumpulan proses pengontrol yang berjalan dalam satu proses untuk mengurangi kompleksitas. Proses pengontrol adalah loop kontrol yang memantau status bersama cluster melalui apiserver. Ketika keadaan cluster berubah, diperlukan tindakan untuk mengubahnya kembali ke keadaan yang diinginkan. Manajer kontrol memantau status node, pekerjaan, akun layanan, token, dan lainnya.
  • Manajer pengontrol cloud adalah komponen opsional yang memungkinkan cluster berkomunikasi dengan API penyedia cloud. Ini memisahkan komponen yang berinteraksi dengan cloud dari komponen yang berinteraksi dengan cluster internal.

Komponen node (working nodes)

Node yang berfungsi adalah node non-master. Ada dua komponen node: kubelet dan kube-proxy. Mereka harus berjalan di setiap node yang berfungsi selain perangkat lunak runtime container seperti Docker.

  • Kubelet adalah agen yang berjalan pada node yang berfungsi untuk memastikan bahwa setiap container berjalan di sebuah Pod. Ia mengelola container yang dibuat oleh Kubernetes untuk memastikan container tersebut berjalan dalam kondisi sehat.
  • Kube-proxy adalah proxy jaringan yang berjalan di setiap node yang berfungsi dan merupakan bagian dari layanan jaringan Kubernetes. Hal ini memungkinkan komunikasi antara Pod dan cluster atau jaringan eksternal.

Komponen lainnya

  • Layanan adalah sekumpulan Pod logis yang bekerja bersama pada waktu tertentu. Berbeda dengan Pod, alamat IP suatu layanan bersifat tetap. Hal ini memperbaiki masalah yang muncul ketika sebuah Pod dihapus sehingga Pod atau objek lain dapat berkomunikasi dengan layanan tersebut. Kumpulan Pod dari suatu layanan dipilih dengan menetapkan kebijakan pada layanan untuk memfilter Pod berdasarkan label.
  • Label adalah sepasang atribut kunci/nilai yang dapat ditetapkan ke Pod, layanan, atau objek lainnya. Label memungkinkan pembuatan kueri objek berdasarkan atribut umum dan menetapkan tugas pada pilihan. Setiap objek dapat memiliki satu atau lebih label. Kunci hanya dapat didefinisikan satu kali dalam suatu objek.

Kubernetes vs Docker Swarm: Mana yang Lebih Baik?

Kubernetes dan Docker adalah solusi cakupan berbeda yang dapat saling melengkapi untuk menghasilkan kombinasi yang kuat. Jadi, Docker vs Kubernetes bukanlah perbandingan yang tepat. Docker memungkinkan pengembang untuk mengemas aplikasi dalam wadah yang terisolasi. Pengembang dapat menyebarkan container tersebut ke mesin lain tanpa mengkhawatirkan kompatibilitasnya dengan sistem operasi.

Pengembang dapat menggunakan Docker Compose untuk mengelola container di satu host. Namun Docker Compose vs Kubernetes juga bukan perbandingan yang akurat, karena solusinya ditujukan untuk cakupan yang berbeda. Cakupan Compose terbatas pada satu host sedangkan Kubernetes terbatas pada sekelompok host.

Ketika jumlah container dan host menjadi tinggi, pengembang dapat menggunakan Docker Swarm atau Kubernetes untuk mengatur container Docker dan mengelolanya dalam sebuah cluster. Kubernetes dan Docker Swarm adalah solusi orkestrasi container dalam pengaturan cluster.

Kubernetes lebih banyak digunakan dibandingkan Swarm di lingkungan besar karena menyediakan ketersediaan tinggi, penyeimbangan beban, penjadwalan, dan pemantauan untuk memberikan solusi yang selalu aktif, andal, dan tangguh.

Poin-poin berikut akan menyoroti perbedaan yang menjadikan K8 solusi yang lebih kuat untuk dipertimbangkan.

Instalasi

  • Swarm sudah termasuk dalam mesin Docker. Menggunakan perintah standar Docker CLI (antarmuka baris perintah) tertentu, Swarm dapat dengan mudah diaktifkan.
  • Penerapan Kubernetes lebih kompleks karena Anda perlu mempelajari perintah non-standar baru untuk menginstal dan menggunakannya. Selain itu, Anda perlu belajar menggunakan alat penerapan khusus yang digunakan di Kubernetes. Node cluster harus dikonfigurasi secara manual di Kubernetes, seperti menentukan master, pengontrol, penjadwal, dll.

Catatan: Kompleksitas instalasi Kubernetes dapat diatasi dengan menggunakan Kubernetes as a service (KaaS). Platform cloud utama menawarkan Kaas, termasuk Google Kubernetes Engine (GKE), yang merupakan bagian dari Google Cloud Platform (GCP), dan Amazon Elastic Kubernetes Service (EKS).

Skalabilitas

Kedua solusi tersebut mendukung skalabilitas. Namun, lebih mudah untuk mencapai skalabilitas dengan Swarm sedangkan dengan Kubernetes lebih fleksibel untuk melakukannya.

  • Swarm menggunakan API Docker sederhana untuk menskalakan kontainer dan layanan sesuai permintaan dengan cara yang lebih mudah dan cepat.
  • Kubernetes di sisi lain mendukung penskalaan otomatis yang membuat skalabilitas lebih fleksibel. Namun karena API terpadu yang digunakannya, skalabilitasnya menjadi lebih kompleks.

Penyeimbang beban

  • Swarm memiliki fitur penyeimbangan beban bawaan dan dilakukan secara otomatis menggunakan jaringan internal. Semua permintaan ke klaster diseimbangkan bebannya di seluruh host. Swarm menggunakan DNS untuk menyeimbangkan permintaan ke nama layanan. Tidak perlu konfigurasi manual untuk fitur ini di Swarm.
  • Kubernetes harus dikonfigurasi secara manual untuk mendukung penyeimbangan beban. Anda harus menentukan kebijakan di Pod untuk penyeimbangan beban, sehingga Pod harus didefinisikan sebagai layanan. Kubernetes menggunakan Ingress untuk penyeimbangan beban, yaitu objek yang memungkinkan akses layanan Kubernetes dari jaringan eksternal.

Ketersediaan Tinggi

Kedua solusi tersebut secara asli mendukung fitur ketersediaan tinggi.

  • Manajer gerombolan memantau keadaan klaster dan mengambil tindakan untuk memperbaiki setiap perubahan dalam keadaan sebenarnya agar memenuhi keadaan yang diinginkan. Setiap kali node pekerja mengalami error, manajer gerombolan akan membuat ulang kontainer di node lain yang sedang berjalan.
  • Kubernetes juga secara otomatis mendeteksi node yang salah dan melakukan failover ke node baru dengan lancar.

Pemantauan

  • Swarm tidak memiliki alat pemantauan dan pencatatan bawaan. Ini memerlukan alat pihak ketiga untuk tujuan ini, seperti Reimann atau Elasticsearch, dan Kibana (ELK).
  • Kubernetes memiliki alat pemantauan ELK bawaan untuk memantau keadaan klaster secara asli. Selain itu, sejumlah alat pemantauan didukung untuk memantau objek lain seperti node, container, Pod, dll.

Kesimpulan

Docker adalah platform containerisasi untuk membangun dan menyebarkan aplikasi dalam container secara independen dari sistem operasi. Itu dapat diinstal menggunakan Docker Desktop di Windows, Linux, atau macOS, dan menyertakan solusi lain seperti Compose dan Swarm. Ketika beberapa kontainer dibuat pada host yang sama, pengelolaannya menjadi lebih rumit. Docker Compose dapat digunakan dalam hal ini untuk dengan mudah mengelola beberapa container dari satu aplikasi di host yang sama.

Di lingkungan yang besar, cluster yang terdiri dari beberapa node menjadi kebutuhan untuk memastikan ketersediaan tinggi dan fitur-fitur canggih lainnya. Inilah kebutuhan akan solusi orkestrasi container seperti Docker Swarm dan alternatifnya Kubernetes. Perbandingan fitur kedua platform ini menunjukkan bahwa keduanya mendukung skalabilitas, ketersediaan tinggi, dan penyeimbangan beban. Namun, Swarm lebih mudah dipasang dan digunakan, sementara Kubernetes mendukung penskalaan otomatis dan alat pemantauan bawaan. Hal ini menjelaskan mengapa sebagian besar organisasi besar menggunakan Kubernetes dengan Docker untuk aplikasi yang sebagian besar didistribusikan ke ratusan container.