Swarm là gì

     

Bao gồm các Manager và các Worker. Người dùng có thể khai báo trạng thái muốn muốn của nhiều service để chạy vào Swarm áp dụng YAML files.

Bạn đang xem: Swarm là gì

*

Swarm: là 1 cluster của một hoặc những Docker Engine sẽ run (cụ thể ở đấy là các node) trong chính sách Swarm, ráng vì cần chạy những container bởi câu lệnh thì ta sẽ cấu hình thiết lập các services để phân chia các bạn dạng replicas tới những node.Node: Một node là một trong những máy thiết bị lý hay máy ảo đang run phiên bạn dạng Docker Engine trong cơ chế Swarm. Node sẽ tất cả hai loại: Manager NodeWorker Node.Manager Node: Là node nhận các define service trường đoản cú user, nó quản lý và điều phối những task đến những node Worker. Theo khoác định node Manager cũng được xem như là node Worker.Worker Node: là node nhận và thực thi các task từ bỏ node Manager.Service: Một service xác minh image của container và số lượng các replicas (bản sao) ước muốn khởi chạy vào swarm.Task: là 1 trong tác vụ mà node worker cần thực hiện. Tác vụ này sẽ do node Manager phân bổ xuống. Một task mang trong mình một Docker Container và những lệnh để chạy mặt container.

Làm việc với Docker Swarm

Trong phần này ta sẽ thực hiện thực hành cùng với Docker Swarm trải qua demo nhỏ.Đầu tiên ta nên 4 trang bị ảo (vps ảo) nhằm tạo những máy ảo ta thực hiện câu lệnh sau:

$ docker-machine create trong đó:

: tên thứ ảo bạn muốn đặt.

Tạo machine(máy ảo) cho swarm manager:

$ docker-machine create managerTiếp mang đến là những machine cho swarm worker lần lượt là : worker1, worker2, worker3.

$ docker-machine create worker1$ docker-machine create worker2$ docker-machine create worker3Sau lúc tạo dứt ta kiểm tra list machine:

$ docker-machine ls

*

Bây tiếng ta thực hiện lệnh inspect thử xem tin tức của một machine

$ docker-machine inspect manager

*

Dễ thấy một số thông tin cơ phiên bản về machine như: địa chỉ IP, MachineName (tên vày ta đặt), SSHKey để có thể truy cập vào machine thông qua SSHKey này, tin tức về CPU ( 1 CPU), Memory ( 1GB), ….

Việc thiết lập các machine vẫn hoàn vớ giờ ta tiến hành khởi chế tác swarm trên bé manager nhé cùng để truy vấn vào nhỏ manager hay các con worker thì ta sử dụng trải qua SSH ví dụ như sau:

$ docker-machine ssh Ở đây:

= manager

Và để trở về host local:

$ exitKhởi tạo thành swarm

$ docker swarm init --advertise-addr nếu khách hàng đang sử dụng Docker Desktop for Mac hoặc Docker Desktop for Windows thì chỉ việc docker swarm init . Nhưng tại đây Operating SystemBoot2Docker bắt buộc buộc phải gồm flag --advertise-addr.

*

Kiểm tra danh sách node hiện đang có trong swarm

$ docker node ls

*

Những node (machine/vps) là manager thì mới có thể có xem danh sách này với dấu * cho biết thêm bạn sẽ ở node manager như thế nào trong swarm. Ở phía trên ta chỉ có một node manager và node này vẫn ở status Ready. OK ! vậy là kết thúc nhiệm vụ ở con manager.

Giờ ta chuyển sang làm câu hỏi trên bé worker1 nhé. Tại worker1 ta triển khai join nó vào swarm như một worker:

$ docker swarm join --token :Trong đó:

host: Địa chỉ ip của bé manager.port: Cổng port của nhỏ manager.

Xem thêm: Nitrite Là Gì - Nguy Hại Của Nitrit Với Sức Khỏe

Để lấy thông tin về token thì trên bé manager của swarm kia ta áp dụng lệnh

$ docker swarm join-token

*

Trên hai nhỏ worker2worker3 ta cũng làm cho tương tự

Lưu ý: một node worker chỉ có thể join vào một swarm.

Trên node manager ta bình chọn lại các mục node

*
Dễ thấy 3 node worker kia có chung 1 status là rỗng tại cột MANAGER STATUS. Điều này đến ta biết chúng là node worker.

Vậy là ta vẫn tạo thành công 3 bé worker với 1 bé manager và gom bọn chúng thành một swarm (cluster).

Một thắc mắc được đưa ra ở đó là tại sao ở chỗ này ta không tận dụng loại swarm nhưng ta đã tạo nên ở Phần 3 tại thiết bị host local (Docker Desktop for Mac) với coi nó như 1 node manager để join các node không giống vào swarm này nhưng mà lại tạo ra thêm một machine để gia công node manager chi cho mức giá tài nguyên như thế ? Thì câu trả lời nằm sinh sống Phần 3 (đã có nói khôn cùng rõ) trên phiên bạn dạng Docker Desktop for Mac cần thiết mở luồng định tuyến tới các machine cho nên việc ta cố gắng join các node (machine/vps) vào swarm cùng với manager swarm là host local là vô tác dụng. Đây cũng chính là điểm yếu khi triển khai networking trên OSX.

Bây giờ ta liên tục tạo ra service và những replicas cũng giống như deploy trên node manager.

Để làm được vấn đề này ta yêu cầu config file docker-compose.yml:

version: "3"services: webreactjs: image: quanphamptit/docker-swarm-demo:webreactjs_1 build: . Ports: - 3000:3000 restart: always networks: - my-net deploy: mode: replicated replicas: 3 servergo: image: quanphamptit/docker-swarm-demo:servergo_1 build: . Ports: - 8080:8080 restart: always networks: - my-net deploy: mode: replicated replicas: 3networks: my-net: driver: overlayvà copy file docker-compose.yml mà ta vẫn config qua bên nhỏ manager:

$ docker-machine scp filesource name-machine:/path-docker-machine/Trong thử nghiệm này:

$ docker-machine scp ~/Workspace/gocode/docker-swarm-demo/docker-compose.yml manager:/home/docker/docker-compose.ymlTiếp theo ta phải push 2 image nhưng ở Phần 2 ta đã sử dụng lên repository trên hub.docker nhé:

$ docker tag /:$ docker push /Trong đó:

: Id image bạn có nhu cầu push

: là username trên hub.docker của bạn.

: tên repository bạn có nhu cầu đặt.

: thương hiệu tag bạn muốn đặt mang lại image được push lên đó.

*

Trên Docker Hub

*

Vậy là ta đã push thành công 2 image cùng giờ ta đề xuất deploy stack :

$ docker stack deploy -c /home/docker/docker-compose.yml swarm-demo-appKiểm tra danh mục services:

*

Ta demo xem các phiên bản replicas này đang làm việc trên phần đa node như thế nào nhé:

*

Ngoài ra chúng ta cũng có thể tạo service dùng lệnh với cú pháp như sau:

$ docker service create --replicas --name trong đó:

: số task bạn có nhu cầu tạo ra ( hay nói theo cách khác là số bản sao của image/container).: thương hiệu service bạn có nhu cầu đặt.: ID của image/container.: lệnh hy vọng chạy.

Và ta có thể biến đổi số container của cluster một cách nhanh lẹ bằng câu lệnh sau:

$ docker service scale =Trong kia :

: thương hiệu service nhưng ta mong đổi số container.: Số container muốn muốn.

Tiếp theo ta đang xem demo liệu hào kiệt load balancing vận động thế làm sao nhé ?

Ta thấy trên bé node worker3 không tồn tại giữ replicas của service servergo_1 nào cả. Ta thực hiện gửi request test tới service servergo_1 trên nhỏ worker3 này xem sao nhé !

$ curl http://192.168.99.103:8080/api/v1/foods?id=2

*

Điều này tức là khi ta gửi các request đến các node vào swarm. Các node này hoàn toàn có thể chứa một hoặc các replicas của các service hoặc không hề chứa cái replicas nào cả thì Routing mesh của swarm sẽ đưa tiếp những request đó đi qua ingress network cho tới Swarm Load Balancer, bộ balancer này sẽ phân bổ request tới các container của các service ở các machine( host/vps của manager với worker) cùng phổ biến một mạng swarm. Chúng ta có thể xem hình sau để hiểu rõ hơn:

*

Thử lại với những request khác:

*

Bây giờ đồng hồ ta test shutdown bé machine worker1 ( như trên thực tế khi 1 server bị die ) xem bao gồm điều mớ lạ và độc đáo gì ko nhé !

$ docker-machine stop Ở trên đây :

= worker1

*

Kiểm tra lại các mục node và service bên trên node manager

*
Chưa thấy gì mới lạ ngoài bài toán worker1 bị Down
*

Tại đây ta đang thấy điều mới mẻ đó. Lúc worker1 bị Shutdown thì lúc này swarm manager sẽ tiến hành tạo thêm 1 replicas new để cố gắng để cho một replicas đã biết thành Shutdown đó và triển khai chuyển 1 replicas mới này cho các worker sẽ run (cụ thể là worker3). Đây cũng chính là tính năng Desired state reconciliation, Scaling đã làm được nói rõ trong phần Tính năng Docker Swarm.

Vậy sự việc nảy sinh ở chỗ này khi toàn thể node worker bị die thì điều gì vẫn xảy ra tiếp đến ?

Trong trường phù hợp này node manager cũng sẽ tiến hành thêm các replicas để bảo vệ đủ số replicas mà ta đã config (mong muốn) và chạy trên chính con manager này ( nghĩa là node manager vẫn đóng sứ mệnh là node worker luôn). Với nếu nhỏ manager này die luôn luôn thì hầu như chuyện coi như ngã ngũ !!.

Xem thêm: Fainting Là Gì ? Nghĩa Của Từ Faint Trong Tiếng Việt Fainting Tiếng Anh Là Gì

Trường hợp trái lại nếu những node worker đã run nhưng nhỏ node manager bị die thì external storage sẽ ghi nhận điều ấy và thông báo đến những manager node sót lại trong cluster. Cùng external storage sẽ chọn 1 node manager bất kỳ để làm Leader tiếp theo của cluster.

*
Hiện nay song hành với Docker Swarm ta còn có thêm một người bạn khác đó là Kubernetes (K8S). Cùng nó được triển khai rộng rãi hơn Docker Swarm. Vào phần sau ta sẽ mày mò những điều thú vị về nó nhé !!

Nếu bạn có nhu cầu xem được những bài viết chất lượng, hay bàn luận những kiến thức, chia sẻ hiểu biết của chúng ta đến đều người, hãy tham gia group của bầy mình bên trên Facebook nhé: ^^