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.