Container Orchestration dengan Docker Swarm

Container Orchestration merupakan teknik untuk mengotomatiskan deployment, management, scaling, dan networking dari sejumlah container yang tersebar di beberapa container host. Docker Swarm adalah tool dari Docker untuk menjalankan aktivitas container orchestration. Docker Swarm secara default telah tersedia di Docker engine.

Docker Swarm terdiri dari beberapa Docker host yang berjalan dalam mode swarm, ada yang bertindak sebagai manager yang bertugas untuk mengelola swarm dan ada yang bertindak sebagai worker yang bertugas untuk menjalankan service.

Docker Swarm Architecture

Tutorial Environment

Server yang digunakan di tutorial ini:

  • VPS Ubuntu 20.04
  • 1 manager
  • 3 worker
  • Docker v20.10

Port yang harus dibuka untuk menjalankan Docker swarm:

  • 2377 TCP untuk komunikasi cluster management
  • 7946 TCP dan UDP untuk komunikasi sesama node
  • 4789 UDP untuk overlay network

Swarm Init

Jalankan inisialisasi swarm di manager node. VPS yang digunakan memiliki Public IP dan Private IP, di sini untuk komunikasi Docker swarm menggunakan Private IP.

Contoh hasil perintah di atas.

Join sebagai worker

Jalankan perintah berikut di semua worker node untuk bergabung ke manager node.

Contoh hasil perintah di atas.

Menampilkan semua node yang ada, jalankan di manager node.

Contoh hasil perintah di atas.

Join sebagai manager

Menampilkan token untuk bergabung sebagai manager, jalankan perintahnya di manager node.

Contoh hasil perintah di atas.

Jalankan perintah berikut di node yang ingin dijadikan sebagai manager.

Contoh hasil perintah di atas.

Secara default manager node juga bertugas sebagai worker node. Untuk menonaktifkan manager sebagai worker, set availability ke drain.

Menampilkan kembali semua node. Availability dari manager berubah dari Active menjadi Drain, artinya sudah tidak bertugas lagi menjadi worker. Worker dapat juga dinonatifkan dengan menggunakan drain.

Service

Membuat Swarm service, misalnya ingin menjalankan Nginx dengan 3 replikasi container dan berjalan di port 80.

Services diagram

Contoh hasil perintah di atas.

Menampilkan semua service.

Contoh hasil perintah di atas.

Menampilkan proses dari service myweb.

Contoh hasil perintah di atas.

Dari hasil di atas terlihat bahwa myweb direplikasi menjadi 3 container yang berjalan di worker1, worker2, dan worker3.

Menampilkan container yang berjalan di worker1.

Pengujian

Browse http://Public-IP-Manager untuk menguji apakah Nginx sudah berjalan dan dapat diakses.

Nginx default page
Nginx default page

Dari hasil pengujian di atas Nginx sudah berjalan dan dapat diakses, tetapi tidak diketahui worker yang manakah yang melayani permintaan dari browser. Oleh karena itu, perlu mengubah halaman index.html menjadi keterangan nama container dan worker.

Jalankan di worker1

Jalankan di worker2

Jalankan di worker3

Pengujian akses dengan menggunakan curl.

Hasilnya memperlihatkan bahwa permintaan dari curl direspon secara bergantian.

curl command
curl command

Scaling

Service myweb saat ini berjalan dengan 3 replikasi. Jumlah replikasinya dapat dinaikkan atau diturunkan, misalnya ingin menaikkan menjadi 5 replikasi.

Contoh hasil perintah di atas.

Menampilkan kembali informasi proses pada service myweb.

Dari hasil di atas terlihat bahwa 2 replikasi tambahan berada di worker1 (myweb.5) dan worker2 (myweb.4).

Selamat mencoba 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *