Docker Swarm Cluster – Install

Apa itu Docker?

Docker merupakan sebuah alat kontainerization yang bersifat open source. Karena sifatnya yg open source, sehingga memungkinkan developer untuk packing suatu aplikasi menjadi bentuk kontainer. Kontainer menjadi komponen standar yang dapat dieksekusi dengan menggabungkan source code aplikasi dengan library dari sistem operasi dan dependensi yang diperlukan untuk menjalankan aplikasi di sistem operasi apapun.

Apa itu Docker Swarm?

Docker swarm adalah alat orkestrasi kontainer yang berarti ia memungkinkan pengguna untuk mengelola beberapa kontainer sekaligus yang berada dalam cluster. Manfaat utama dari Docker swarm ini terkait dengan sifatnya yang HA(High Availability) untuk kontainer yang berjalan di dalam clusternya. Biasanya di dalam Docker swarm akan terdiri dari beberapa node worker dan setidaknya satu sebagai node manager, dimana node manager yang bertanggung jawab untuk menangani resource dari cluster dan memastikan bahwa cluster beroperasi secara efisien.

Cara Kerja Docker Swarm

Docker Swarm bekerja berdasarkan service, task dan node untuk mengelola kontainer. Node sendiri pada Docker swarm paling minim akan ada satu node sebagai manager dan satu node sebagai worker. Node manager bertugas untuk mengalokasikan task untuk node worker, selain itu node manager juga menjalankan task lainya yang diperlukan untuk menjaga operasi cluster tetap efektif. Dalam best practicenya setidaknya membutuhkan tiga node manager untuk dua worker agar klaster berfungsi dengan stabil, HA(High Availability) dan efektif. 

Lalu bagaimana cara mengakses kontainer dalam cluster Docker swarm? Docker swarm menggunakan service untuk memberikan akses ke pada kontainer yang berjalan pada cluster. Pada langkah deployment kontainer kita bisa menetapkan port untuk mengakses kontainer, Nah disanalah service bekerja. Ia dipisahkan berdasarkan port yang ditetapkan ketika tahap deployment dimana ketika kita mendeploy beberapa jenis aplikasi port yang kita expose dalam service harus berbeda.

Mode service dalam Docker Swarm

Dalam Docker swarm terdapat dua mode, yaitu global dan replikasi. Perbedaanya jika kita menggunakan mode global maka kontainer akan berjalan pada setiap node dalam cluster. Jadi ketika kita menjalankan kontainer dalam cluster docker swarm maka pada setiap node dalam cluster akan terdapat satu kontainer dan tidak lebih dari satu, layaknya DaemonSet pada Kubernetes. Lalu yang selanjutnya yaitu replika dimana kita bisa kontainer yang kita jalankan akan diatur alokasinya oleh manager. Berbeda dengan mode global yang hanya 1 kontainer per node maka dalam mode replika kita bisa menjadwalkan lebih dari 1 kontainer dalam 1 node, tapi itu diatur oleh node manager ya.

Kelebihan dan Kekurangan Docker Swarm

Kelebihan:

  • Deployment aplikasi sangat mudah 
  • Mudah dipelajari, tidak perlu banyak pengalaman untuk menjalankanya 
  • Terintegrasi dengan docker-compose, Dimana bisa menjalankan beberapa kontainer sekaligus dalam satu perintah

Kekurangan:

  • Proses scaling dilakukan secara manual
  • Limitasi pada fault tolerance
  • Komunitas yang terbatas yang bisa saja menyulitkan ketika mengalami masalah yang serius

Pre Requirement 

Pada eksekusi kali ini akan menggunakan 4 buah node, dimana 2 node sebagai manager dan 2 node sebagai worker. Agar lebih jelas berikut topologi fisik yang akan dipraktekkan:

Spesifikasi setiap node:

  • Processor: 2 Core
  • Memory: 4 G
  • HDD: 24 G
  • Operating System: Ubuntu 20.04

Alokasi IP:

  • swarm-manager1: 172.23.0.250/20
  • swarm-manager2: 172.23.0.248/20
  • swarm-worker1: 172.23.0.249/20
  • swarm-worker2: 172.23.0.251/20

Pastikan operating sistem telah terinstall,jaringan telah di konfigurasi serta user yang digunakan telah memiliki akses sudo.

Install Dependensi

Sebelum melanjutkan untuk melakukan deployment docker swarm, maka perlu menginstall dependensi yang dibutuhkannya terlebih dahulu dan pastinya ini dilakukan di setiap node. Untuk perintahnya seperti dibawah ini:

sudo apt install apt-transport-https software-properties-common ca-certificates -y

Perintah selanjutnya adalah menambahkan docker-key ke dalam sistem yang digunakan dan perintahnya seperti dibawah ini:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Perintah selanjutnya adalah menambahkan docker-repository ke sistem yang kita gunakan dan perintahnya seperti berikut ini:

sudo su -c "echo 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable' > /etc/apt/sources.list.d/docker-ce.list"

Perintah selanjutnya yaitu mengupdate sekaligus menginstall docker dan perintahnya seperti berikut ini:

sudo apt update && sudo apt install docker-ce -y

Docker telah sukses diinstall maka langkah selanjutnya yaitu start docker dan membuat docker berjalan otomatis setelah booting. Untuk perintahnya seperti berikut ini:

sudo systemctl start docker && sudo systemctl enable docker

Menambahkan user ke Docker

Langkah selanjutnya yaitu menambahkan user biasa ke dalam group docker. Langkah ini bersifat optional karena secara default perintah docker bisa berjalan menggunakan user root akan tetapi itu cukup berbahaya jika digunakan oleh orang yang tidak diharapkan. Maka sebagai best practice kita bisa menambahkan user biasa untuk memanage docker. Untuk perintahnya seperti dibawah ini:

sudo usermod -aG docker $USER && sudo chown root:docker /var/run/docker.sock

Lakukan test running kontainer menggunakan yang baru dibuat dan baru ditambahkan ke group docker, pada kasus user yang ditambahkan adalah user anggasuriana dan untuk pengetesan test running kontainer nginx, Maka perintahnya seperti dibawah ini:

su - anggasuriana => Masukan kata sandi dari user anggasuriana dan dilanjutkan dengan perintah docker run -d –rm nginx

Kontainer sudah berhasil dibuat, sebagai verifikasi bisa mengeceknya menggunakan perintah seperti dibawah ini:

docker ps -a

Terlihat sebuah kontainer nginx yang berjalan bernama fervend_kilby yang artinya user telah menjadi bagian dari group docker.

Inisiasi Docker Swarm

Inisiasi kali ini akan dilakukan pada node swarm-manager1 yang mempunyai alamat IP 172.23.0.250 dimana alamat ini akan menjadi inti dalam cluster docker swarm. Oke untuk perintah inisiasi cluster nya seperti dibawah ini:

docker swarm init --advertise-addr 172.23.0.250

Inisiasi cluster telah berhasil, untuk mengeceknya bisa dengan perintah seperti dibawah ini:

docker node ls

Di atas terlihat node dengan hostname swarm-manager1 telah aktif dengan role sebagai leader manager pada cluster docker swarm ini.

Menambahkan node Worker pada Cluster

Penambahan node pada Docker swarm tidak jauh beda layaknya Kubernetes, ia membutuhkan join token untuk bergabung ke dalam cluster. Untuk menampilkan perintah join token pada worker bisa di menggunakan perintah docker swarm join-token worker perintah tersebut dijalankan pada node manager yang menjadi leader dalam cluster. Untuk mengecek node mana yang menjadi leader nya bisa dengan perintah docker node ls

Berdasarkan instruksi diatas, Untuk menambahkan node Worker pada cluster bisa dengan perintah 

docker swarm join --token SWMTKN-1-2txcb5if9tisfsxd9yswp912b1ym49wqs0bmc06kva3c1a7l5p-emfop1i8kxufc8tq2h4u6swvw 172.23.0.250:2377. 

Token bisa saja beda karena menyesuaikan dengan cluster yang dibuat. Lalu coba tambahkan node swarm-worker1 dan swarm-worker2 sebagai worker pada cluster ini, caranya jalankan perintah diatas pada masing-masing node worker yang akan kita tambahkan.

Seperti diatas kita berhasil menambahkan swarm-worker1 sebagai worker pada cluster. Lanjut dengan menambahkan swarm-worker2.

Semua node worker telah ditambahkan, kembali ke node manager cek node yang tersedia dengan perintah docker node ls

Seperti diatas, node swarm-worker1 dan swarm-worker2 telah berhasil ditambahkan sebagai worker pada cluster Docker swarm.

Write a comment