Docker Swarm Cluster – Managing Cluster

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.

Untuk proses installasinya kita sudah lakukan di artikel sebelumnya, nah selanjutnya kita akan membahas terkait managin clusternya.

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.

Menambahkan node Manager pada Cluster

Karena sifatnya yang HA(High Availability) cluster swarm, Membutuhkan setidaknya 3 node manager untuk menjaga cluster tetap stabil.  Namun kali ini akan ada dua node manager dimana satu akan aktif dan satu akan stand-by. Untuk menambah node master kurang lebih sama seperti worker, namun perintah untuk mengambil token nya yang sedikit beda. Untuk mendapatkan join token untuk node manager bisa menggunakan perintah docker swarm join-token manager perintah tersebut dijalankan pada node manager yang berstatus sebagai leader seperti dibawah ini:

Nah, karena yang akan ditambahkan sebagai manager adalah node swarm-manager2 maka jalankan perintah docker swarm join --token SWMTKN-1-2txcb5if9tisfsxd9yswp912b1ym49wqs0bmc06kva3c1a7l5p-a7uphtcggqtc2ovqiy7htysj0 172.23.0.250:2377 pada node swarm-manager2. Seperti dibawah ini:

Untuk mengeceknya, kembali ke node swarm-manager1 yang mempunyai role sebagai leader dan jalankan perintah docker node ls

Seperti diatas node swarm-manager2 berstatus Reachable dimana statusnya akan berubah menjadi /Leader ketika node swarm-manager1 mati. 

Menghapus Node pada Cluster

Selain menambahkan node kita juga bisa menghapus nya, namun kasus ini sangat jarang terjadi kalau tidak karena alasan hardware yang sudah error dan lain-lain. Pada praktek kali ini akan coba menghapus node swarm-worker2 pada cluster. Karena yang akan dihapus adalah node swarm-worker2 maka jalankan perintah berikut di node swarm-worker2:

docker swarm leave

Jika sudah seperti diatas artinya node swarm-worker2 berhasil di lepas dari cluster. Untuk mengeceknya kembali ke node manager dan jalankan perintah docker node ls

Oke status pada swarm-worker2 telah menjadi Down yang artinya node swarm-worker2 telah berhasil di lepas dari cluster.

Sebagai langkah optional setelah menghapus node, yaitu menghapus list node yang down dengan perintah docker node rm <NODE_ID> .

Sebagai contoh, karena swarm-worker2 berstatus Down, maka untuk menghapusnya dari list bisa menggunakan perintah docker node rm p2z82fl0vdxze4p81ne1vjjl1  dan jangan lupa perintah ini dijalankan pada node manager yang aktif sebagai Leader.

Note: p2z82fl0vdxze4p81ne1vjjl1 merupakan ID dari node swarm-worker2

Oke, penghapusan list node telah berhasil

Menjalankan Simple Service pada Cluster

Karena cluster yang dibuat sudah berjalan maka, Hal yang selanjutnya dilakukan adalah menjalankan sebuah service dalam cluster. Sebagai contoh kita akan menjalankan service nginx dan mengexpose port 80 pada swarm maka perintahnya akan seperti dibawah ini:

docker service create --name nginx --publish 80:80 nginx

Cek service yang sedang berjalan dengan perintah docker service ls

Service nginx sudah berjalan pada mode replika dan listen pada semua node di port 80. Untuk mengeceknya bisa langsung mengakses alamat IP dari manager dan alamat IP manager yg dapat digunakan adalah 172.23.0.250 atau 172.23.0.248 pada browser.

Sebenarnya memakai alamat dari node worker juga bisa tapi best practice dari saya adalah menggunakan alamat IP dari manager.

Membuat Scaling pada Service

Scaling merupakan salah satu cara untuk mereplika kontainer yang berjalan pada cluster Docker swarm. Contoh dibawah kita akan mencoba meningkatkan replika dari service nginx dan untuk melakukannya bisa dengan perintah dibawah ini:

docker service scale nginx=10

Untuk melihat replika dari service nya bisa dengan perintah docker service ps nginx

Terlihat bukan terdapat 10 replika untuk service nginx. Kemudian selain meningkatkan kita juga bisa menurunkan replika nya, peritahnya sama namun angkanya yang di perkecil seperti kita akan membuat service nginx yang di scale menjadi 3 replika maka perintahnya seperti dibawah:

docker service scale nginx=3

Kita cek lagi replika yang berjalan pada service nginx dengan perintah docker service ps nginx

Nah, replikanya sudah turun menjadi 3 dan begitu seterusnya.

Menjalankan Stack pada Cluster

Selanjutnya di dalam docker swarm, bisa juga menjalankan multi kontainer secara bersamaan. Pada kasus ini kita sudah menyiapkan sebuah aplikasi yang membutuhkan database untuk runningnya.  Aplikasi ini berbasis Flask dan menggunakan database MongoDB. Oke untuk membuatnya buatlah file bernama simple-app.yml lalu isikan seperti dibawah:

version: '3.3'
services:
  mongodb:
    image: mongo
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=Admin123
  simple-flask:
    image: vourteen14/simple-flask-mongo
    ports:
      - 5000:5000
    environment:
      - MONGO_URL=mongodb
      - MONGO_USER=admin
      - MONGO_PASSWORD=Admin123

Setelah selesai lalu simpan file nya. Kita akan memberi nama stack yang kita buat dengan simple-app-stack maka untuk membuatnya bisa mengikuti perintah dibawah ini:

docker stack deploy --compose-file simple-app.yml simple-app-stack

Untuk melihat semua stack yang berjalan bisa dengan perintah docker stack ls

Oke karena aplikasi yang saya saya buat berjalan pada port 5000 maka kita bisa mengakses nya dengan alamat IP master yaitu 172.23.0.250:5000 atau 172.23.0.248:5000 pada browser.

Oke stack simple-app dimana berisi flask dan mongodb telah berhasil dibuat.

Write a comment