Docker Swarm

Pada kesempatan kali ini saya akan menulis mengenai docker swarm yaitu salah satu tools orkestrasi yang cukup populer disediakan oleh docker yang merupakan salah satu container yang cukup populer saat ini. mungkin kita tau ada beberapa tools orkestrasi lainnya seperti kubernetes, openshift, nomad dan lain lain.

Untuk orkestrasi tersendiri bisa digambarkan seperti dibawah ini dimana kita mengatur flow atau alur kerja dalam mengelola banyak nya kontainer mulai dari mendefinisikan merancang image atau service yang akan di deploy, kemudian mengatur kebutuhan sumber daya dan networking antar kontainer, lalu bagaimana agar setelah di deploy service atau kontainer di awasi dan ditindak jika terjadi sesuatu termasuk load balancer dan alokasi resources pada kontainer serta self-healing jika ada service yang mati.

kehadiran kontainer yang ringan melahirkan sistem arsitektur microservice yang dimana aplikasi dipecah menjadi kecil kecil berdasarkan komponen fitur nya masing masing setiap fitur yang terpisah dihubungkan dan saling terintegrasi menggunakan API (Application Programming Interface). Microservice berhubungan erat dengan orkestrasi dan juga automasi yang cukup berhubungan dengan topik yang akan dibahas selanjutnya yaitu docker swarm.

Apa itu Docker Swarm?

Docker Swarm adalah sebuah teknologi clustering untuk manajemen banyak docker host atau mungkin disebut juga sebagai tools orkestrasi, host atau mesin mesin yang terinstall docker dan  join ke dalam klaster yang sama disebut node. node sendiri terbagi menjadi 2 yaitu node manager dan node worker.

Manager Nodes
  • Maintain Cluster State
  • Scheduling Services
  • Serving Swarm Mode HTTP API endpoint

Manager menggunakan algoritma raft dalam mengawasi dan manajemen cluster, untuk mengaktifkan high availability ataupun fault tolerance kita membutuhkan lebih dari 1 node manager

  • 3 node manager maksimum toleransi kesalahan atau maksimum node manager yang mati 1 node.
  • 5 node manager maksimum toleransi kesalahan atau maksimum node manager yang mati 2 node.
  • 7 node manager maksimum toleransi kesalahan atau maksimum node manager yang mati 3 node.

rumus dari konsep diatas adalah (N-1) / 2

Worker Nodes

node ini ditugaskan menerima perintah dari node manager untuk mengeksekusi atau menjalankan kontainer. untuk best practice nya sendiri memang sebaiknya service atau kontainer itu dijalankan hanya pada node worker karena node manager sudah bertugas untuk mendistribusikan dan mengatur aktivitas di cluster.

Change Roles

kita juga bisa membuat peran dari node itu berubah atau mengganti tipe node seperti jika node worker ingin diganti menjadi node manager maupun sebaliknnya jika node manager ingin dijadikan node worker. untuk mempromosikan node worker menjadi node manager bisa gunakan perintah “node promote namanode sedangkan untuk mengganti node manager menjadi node worker bisa gunakan perintah “node demote namanode

Kenapa Menggunakan Docker Swarm?

  • Cluster management integrated with Docker Engine:

untuk membuat cluster dengan docker swarm itu terintegrasi dengan docker engine atau docker cli sehingga kita tidak butuh software tambahan dalam manajemen klaster atau membuat swarm, docker swarm sudah termasuk saat kita menginstall docker cli.

  • Decentralized Design

manajemen dengan desain terpusat

  • Declarative Service Model

Docker Swarm menggunakan pendekatan deklaratif untuk mendefinisikan kondisi tumpukan layanan, contoh nya kita mendefinisikan layanan front end dan back end pada saat membuat service stack atau tumpukan layanan

  • Scaling

untuk setiap service kita bisa atur jumlah nya, menurunkan ataupun menambah jumlah replika dalam klaster. node manager akan mengatur jumlah kontainer atau service  yang ingin dikurangi atau ditambah jumlahnya.

  • Desired state reconciliation

Node manager monitoring status dan aktivitas yang terjadi di klaster, seperti jika ada node worker yang menjalankan dua container kemudian node tersebut mati. maka manager akan membuat dua container di node yang lain sebagai ganti nya atau bentuk self-healing.

  • Service discovery

Swarm manager memberi dns unik pada setiap service yang ada di klaster, kita bisa kueri semua kontainer yang berjalan di swarm.

  • Load balancing

secara default di klaster, request yang masuk akan di distribusikan secara merata

  • Secure by default

setiap node di dalam klaster menggunakan enkripsi dan TLS untuk berkomunikasi antar node

Bagaimana Cara Menggunakan Docker Swarm?

cara menggunakan docker swarm adalah mulai dari clustering yaitu membuat docker host join ke klaster yang sama, dipelopori oleh satu docker host yang mendeklarasikan diri menjadi manager sekaligus leader dengan perintah “docker swarm init –advertise-addr IPHOST” setelah itu output nya akan menampilkan token yang bisa digunakan untuk join ke klaster tersebut.

root@manager:~# docker swarm init  – advertise-addr 10.23.3.2

Swarm initialized: current node (3wo3wwmyerxxjju62h81b3ubl) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join — token   SWMTKN-1–38w9y5nourg3o4fkorkzqonlnmayk5qr52svnzns8y3tm39ftg-dta2g8eqixj11icbf8ehxc79w 10.23.3.2:2377

To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.

setelah itu akan terbuat sebuah klaster, seperti penjelasan sebelumnya bahwa terdapat 2 node yaitu manager dan worker. kita akan mengatur semua nya melalui node dari membuat service, scaling, setup network dan lain lain. contoh disini saya memiliki 3 node untuk simulasi yang dimana satu node menjadi manager dan sisanya menjadi worker.

root@manager:~# docker node ls

ID                                            HOSTNAME STATUS   AVAILABILITY   MANAGER    ENGINE

3wo3wwmyerxxjju62h81b3ubl *   manager   Ready          Active                 Leader    20.10.12

uf4w6z2aoos9emizidgnhmw9p     worker1     Ready         Active                                20.10.12

9g51wsko9uwkr8vs1u3l5qs4b      worker2     Ready         Active                                20.10.12

contoh di bawah membuat service di docker swarm dari image nginx:alpine

root@manager:~# docker service create –replicas 1 –name webserver nginx:alpine

p12y4anvmpi1nr9lef72ppz0k

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converged

list dari service yang berjalan di swarm

root@manager:~# docker service ls

ID             NAME        MODE         REPLICAS   IMAGE          PORTS

p12y4anvmpi1   webserver   replicated   1/1        nginx:alpine  

scaling service, menambah atau mengurangi jumlah service

root@manager:~# docker service scale webserver=6

webserver scaled to 6

overall progress: 6 out of 6 tasks

1/6: running   [==================================================>]

2/6: running   [==================================================>]

3/6: running   [==================================================>]

4/6: running   [==================================================>]

5/6: running   [==================================================>]

6/6: running   [==================================================>]

verify: Service converged

list dari service yang telah di scale up

root@manager:~# docker service ps webserver

ID                       NAME             IMAGE       NODE  DESIRED STATE   CURRENT STATE           

9kbkusi9e54i  webserver.1   nginx:alpine   worker1      Running       Running 3 minutes ago             

eikizr2zbiy0    webserver.2   nginx:alpine    worker2      Running       Running 52 seconds ago            

mmi49b273    webserver.3   nginx:alpine   worker1      Running       Running 52 seconds ago            

lvhtbgiwgrr5    webserver.4   nginx:alpine   worker2      Running      Running 52 seconds ago            

yj32kmfqc535 webserver.5   nginx:alpine   worker1      Running      Running 56 seconds ago            

b4qf4inpersc   webserver.6   nginx:alpine   worker2      Running      Running 52 seconds ago     

untuk menghapus service yang ada

docker service rm webserver

diatas adalah contoh penggunaan dasar cara menggunakan atau manajemen docker swarm

Kapan Menggunakan Docker Swarm?

kapan kita menggunakan docker swarm? adalah saat kita butuh high availability dan juga scalability, dimana kita ingin layanan kita harus selalu tersedia atau memiliki ketersediaan tinggi jika terjadi lonjakan permintaan ataupun gangguan tak terduga. menambah atau mengurangi resources secara cepat serta fleksibel. jika kita membutuhkan hal hal itu  ini adalah waktu yang cukup tepat untuk menggunakan docker swarm.

Gimana temen-temen, udah paham kan pengertian, cara menggunakan dan kapan kita harus menggunakan docker swarm? Kalau masih bingung temen-temen bisa scroll lagi ke atas untuk memahami lagi tentang docker swarm. Semoga artikel ini membantu yaa 🙂

Tertarik untuk mengikuti training IT di ID-Networkers (IDN.ID)? Kami juga menyediakan berbagai pilihan training cek disini.