Docker Swarm untuk Orkestrasi Kontainer

Diterbitkan: 2019-08-08

Semua tentang Docker Swarm dan bagaimana ia mengelola dan mengatur semua container dalam sebuah cluster.

Apa itu Docker Swarm?

Docker swarm adalah mode penanganan cluster Mesin Docker, maka nama Swarm. Cluster host Docker berjalan dalam mode swarm yang terdiri dari manajer dan pekerja. Instance mesin buruh pelabuhan yang berpartisipasi dalam swarm disebut node.

Penyebaran swarm tingkat produksi terdiri dari node buruh pelabuhan yang tersebar di beberapa server.

Mengapa menggunakannya? – Orkestrasi Kontainer

Saat Anda bekerja di lingkungan produksi, 100-an kontainer buruh pelabuhan akan menjalankan beberapa aplikasi di dalamnya. Mengelola semua wadah ini bisa menjadi masalah besar bagi semua insinyur DevOps; di sinilah Docker Swarm membantu Anda. Ini mengelola dan mengatur cluster yang menjalankan beberapa wadah buruh pelabuhan dengan mudah.

Di bawah ini adalah beberapa fiturnya:

  • Ketersediaan Tinggi – bertujuan untuk tidak menawarkan waktu henti atau pemadaman.
  • Load Balancing – mengalokasikan sumber daya dan permintaan pada node lain di cluster secara otomatis jika ada node yang gagal.
  • Terdesentralisasi – beberapa node manajer berjalan di lingkungan produksi; maka cluster tidak pernah tergantung pada satu node manajer.
  • Skalabilitas – menggunakan satu perintah docker swarm, Anda dapat dengan mudah meningkatkan atau memperkecil container di cluster.

Mengorkestrasikan Kontainer Docker

Sekarang setelah Anda mengetahui dasar-dasar Docker Swarm, mari kita lihat contoh implementasinya.

Dalam contoh ini, saya memiliki tiga mesin yang berjalan dalam sebuah cluster dengan detail di bawah ini:

 manager1: 192.168.56.104 worker1: 192.168.56.105 worker2: 192.168.56.102

Untuk menginisialisasi mode swarm di buruh pelabuhan, jalankan perintah di bawah ini pada node manager. Bendera --advertise-addr digunakan untuk mengiklankan dirinya sendiri ke node yang dapat bergabung dengan cluster.

 geekflare@manager1:~$ docker swarm init --advertise-addr 192.168.56.104 Swarm initialized: current node (lssbyfzuiuh3sye1on63eyixf) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Perintah di atas akan menghasilkan token yang akan digunakan oleh node lain untuk bergabung dengan cluster ini. Salin perintah dengan token yang dihasilkan dan jalankan di node pekerja.

Menjalankan token pada node worker1.

 geekflare@worker1:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377 This node joined a swarm as a worker.

Menjalankan token pada node worker2.

 geekflare@worker2:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377 This node joined a swarm as a worker.

Sekarang, pada node manager, Anda dapat memeriksa node mana yang berjalan di cluster.

 geekflare@manager1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION lssbyfzuiuh3sye1on63eyixf * manager1 Ready Active Leader 18.09.6 utdr3dnngqf1oy1spupy1qlhu worker1 Ready Active 18.09.6 xs6jqp95lw4cml1i1npygt3cg worker2 Ready Active 18.09.6

Mari kita buat gambar buruh pelabuhan geekflare_mongodb yang kita gunakan di Tutorial Dockerfile.

 docker build -t geekflare_mongodb .

Jalankan container image buruh pelabuhan MongoDB dengan membuat layanan swarm. 27017 adalah nomor port tempat MongoDB diekspos.

 geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 geekflare_mongodb image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image. kok58xa4zi05psh3uy6s5x9e6 overall progress: 1 out of 1 tasks 1/1: running verify: Service converged

Periksa apakah layanan kawanan buruh pelabuhan telah dimulai. MODE direplikasi berarti wadah telah direplikasi pada semua node di cluster dan REPLICAS 1/1 berarti hanya satu layanan swarm yang sedang berjalan.

 geekflare@manager1:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS kok58xa4zi05 Mongo-Container replicated 1/1 geekflare_mongodb:latest *:27017->27017/tcp

Mari kita periksa node mana di cluster yang menjalankan layanan tunggal ini. Itu berjalan pada node manager1.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS jgqjo92rbq23 Mongo-Container.1 geekflare_mongodb:latest manager1 Running Running about a minute ago

Jalankan perintah docker ps untuk mendapatkan detail lebih lanjut tentang wadah yang menjalankan layanan swarm ini.

 geekflare@manager1:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 05d77e7b4850 geekflare_mongodb:latest "/bin/sh -c usr/bin/…" 2 minutes ago Up 2 minutes 27017/tcp Mongo-Container.1.jgqjo92rbq23sv01hrufdigtx

Anda dapat menjalankan layanan swarm dalam mode "global" juga alih-alih mode "direplikasi" default. Mode global menjalankan satu tugas layanan swarm di semua node di cluster.

Sebelum saya menjalankan layanan dalam mode global, izinkan saya menghapus wadah berjalan yang ada.

 geekflare@manager1:~$ docker service rm Mongo-Container Mongo-Container

Mulai layanan swarm di dalam wadah buruh pelabuhan dalam mode global menggunakan flag –mode.

 geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --mode global geekflare_mongodb image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image. mfw8dp0zylffppkllkcjl8391 overall progress: 3 out of 3 tasks utdr3dnngqf1: running lssbyfzuiuh3: running xs6jqp95lw4c: running verify: Service converged

Periksa apakah layanan swarm dimulai dalam mode global. Karena, tiga node (1 manajer, 2 pekerja) berjalan di cluster, itu sebabnya jumlah replikanya adalah 3.

 geekflare@manager1:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS mfw8dp0zylff Mongo-Container global 3/3 geekflare_mongodb:latest *:27017->27017/tcp

3 layanan sedang berjalan sekarang di 3 node, periksa dengan menjalankan perintah di bawah ini.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS zj2blvptkvj6 Mongo-Container.xs6jqp95lw4cml1i1npygt3cg geekflare_mongodb:latest worker2 Running Running about a minute ago 3eaweijbbutf Mongo-Container.utdr3dnngqf1oy1spupy1qlhu geekflare_mongodb:latest worker1 Running Running about a minute ago yejg1o2oyab7 Mongo-Container.lssbyfzuiuh3sye1on63eyixf geekflare_mongodb:latest manager1 Running Running about a minute ago

Selanjutnya, izinkan saya menunjukkan bagaimana Anda dapat menentukan jumlah replika. Sebelum itu, saya akan menghapus wadah saat ini, yang sedang berjalan.

 geekflare@manager1:~$ docker service rm Mongo-Container Mongo-Container

Gunakan flag –replicas dalam perintah dan sebutkan jumlah replika yang Anda inginkan dari layanan swarm. Misalnya, saya ingin memiliki dua replika layanan swarm:

 geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --replicas=2 geekflare_mongodb image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image. 4yfl41n7sfak65p6zqwwjq82c overall progress: 2 out of 2 tasks 1/2: running 2/2: running verify: Service converged

Periksa layanan swarm yang sedang berjalan. Anda dapat melihat satu replika berjalan pada node manager1 dan yang lainnya pada node worker1.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS xukodj69h79q Mongo-Container.1 geekflare_mongodb:latest worker1 Running Running 9 seconds ago e66zllm0foc8 Mongo-Container.2 geekflare_mongodb:latest manager1 Running Running 9 seconds ago

Buka node worker1 dan periksa apakah wadah buruh pelabuhan menjalankan layanan swarm.

 geekflare@worker1:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5042b7f161cb geekflare_mongodb:latest "/bin/sh -c usr/bin/…" About a minute ago Up About a minute 27017/tcp Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv

Untuk menghentikan penampung ini, jalankan perintah di bawah ini.

 geekflare@worker1:~$ docker stop 5042b7f161cb 5042b7f161cb

Sekarang dari node manager1 jika Anda memeriksa semua node yang menjalankan layanan, Anda akan melihatnya berjalan pada node manager1 dan node worker2. NEGARA SAAT INI dari node worker1 adalah Shutdown (saat kami menghentikan wadah yang menjalankan layanan). Tetapi karena dua replika harus menjalankan layanan ini, layanan lain dimulai pada pekerja 2.

Ini adalah bagaimana Anda mencapai ketersediaan tinggi menggunakan kawanan buruh pelabuhan.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS cd2rlv90umej Mongo-Container.1 geekflare_mongodb:latest worker2 Running Running 30 seconds ago xukodj69h79q \_ Mongo-Container.1 geekflare_mongodb:latest worker1 Shutdown Failed 38 seconds ago "task: non-zero exit (137)" e66zllm0foc8 Mongo-Container.2 geekflare_mongodb:latest manager1 Running Running 3 minutes ago

Sangat mudah untuk meningkatkan atau menurunkan wadah buruh pelabuhan. Perintah di bawah ini akan meningkatkan wadah mongo menjadi 5.

 geekflare@manager1:~$ docker service scale Mongo-Container=5 Mongo-Container scaled to 5 overall progress: 5 out of 5 tasks 1/5: running 2/5: running 3/5: running 4/5: running 5/5: running verify: Service converged

Periksa berapa banyak replika wadah mongo yang berjalan sekarang, itu harus 5.

 geekflare@manager1:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS 4yfl41n7sfak Mongo-Container replicated 5/5 geekflare_mongodb:latest *:27017->27017/tcp

Periksa di mana 5 replika ini berjalan di cluster. 1 replika berjalan pada node manager1 dan 2 replika pada kedua node pekerja masing-masing.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS cd2rlv90umej Mongo-Container.1 geekflare_mongodb:latest worker2 Running Running 2 minutes ago xukodj69h79q \_ Mongo-Container.1 geekflare_mongodb:latest worker1 Shutdown Failed 2 minutes ago "task: non-zero exit (137)" e66zllm0foc8 Mongo-Container.2 geekflare_mongodb:latest manager1 Running Running 5 minutes ago qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb:latest worker2 Running Running 47 seconds ago 9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb:latest worker1 Running Running 46 seconds ago e9dhoud30nlk Mongo-Container.5 geekflare_mongodb:latest worker1 Running Running 44 seconds ago

Di kluster Anda, jika Anda tidak ingin layanan Anda berjalan di node manajer, dan ingin menyimpannya hanya untuk mengelola node, Anda dapat menguras node manajer.

 geekflare@manager1:~$ docker node update --availability drain manager1 manager1

Periksa ketersediaan node manajer.

 geekflare@manager1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION lssbyfzuiuh3sye1on63eyixf * manager1 Ready Drain Leader 18.09.6 utdr3dnngqf1oy1spupy1qlhu worker1 Ready Active 18.09.6 xs6jqp95lw4cml1i1npygt3cg worker2 Ready Active 18.09.6

Anda akan melihat layanan tidak lagi berjalan di node manager; mereka tersebar di seluruh node pekerja di cluster.

 geekflare@manager1:~$ docker service ps Mongo-Container ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS cd2rlv90umej Mongo-Container.1 geekflare_mongodb:latest worker2 Running Running 5 minutes ago xukodj69h79q \_ Mongo-Container.1 geekflare_mongodb:latest worker1 Shutdown Failed 5 minutes ago "task: non-zero exit (137)" qo405dheuutj Mongo-Container.2 geekflare_mongodb:latest worker1 Running Running 41 seconds ago e66zllm0foc8 \_ Mongo-Container.2 geekflare_mongodb:latest manager1 Shutdown Shutdown 44 seconds ago qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb:latest worker2 Running Running 3 minutes ago 9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb:latest worker1 Running Running 3 minutes ago e9dhoud30nlk Mongo-Container.5 geekflare_mongodb:latest worker1 Running Running 3 minutes ago

Itu semua tentang Docker Swarm dan bagaimana mengatur container dalam mode docker swarm. Cobalah ini di lingkungan non-produksi Anda untuk mendapatkan gambaran tentang cara kerjanya.