Swarm Là Gì
Bao gồm những Manager và các Worker. Bạn dùng có thể khai báo trạng thái mong muốn của khá nhiều service để chạy vào Swarm sử dụng YAML files.
Bạn đang xem: Swarm là gì

Làm vấn đề với Docker Swarm
Trong phần này ta sẽ tiến hành thực hành với Docker Swarm thông qua demo nhỏ.Đầu tiên ta cần 4 thứ ảo (vps ảo) để tạo các máy ảo ta thực hiện câu lệnh sau:
$ docker-machine create vào đó:
: tên máy ả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 đến 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 đánh giá list machine:
$ docker-machine ls

Bây giờ ta thực hiện lệnh inspect test xem tin tức của một machine
$ docker-machine inspect manager

Dễ thấy một số trong những thông tin cơ bản về machine như: add IP, MachineName (tên do ta đặt), SSHKey để hoàn toàn có thể truy cập vào machine thông qua SSHKey này, thông tin về CPU ( 1 CPU), Memory ( 1GB), ….
Việc thiết đặt các machine đang hoàn vớ giờ ta thực hiện khởi sản xuất swarm trên nhỏ manager nhé và để truy vấn vào nhỏ manager hay những con worker thì ta sử dụng thông qua SSH cụ thể như sau:
$ docker-machine ssh Ở đây:
= managerVà để quay trở lại host local:
$ exitKhởi sinh sản swarm
$ docker swarm init --advertise-addr nếu bạn đang sử dụng Docker Desktop for Mac hoặc Docker Desktop for Windows thì chỉ cần docker swarm init . Nhưng ở chỗ này Operating System là Boot2Docker đề xuất buộc phải bao gồm flag --advertise-addr.

Kiểm tra các mục node hiện đang sẵn có trong swarm
$ docker node ls

Những node (machine/vps) là manager thì mới có thể có xem các mục này với dấu * cho thấy bạn sẽ ở node manager như thế nào trong swarm. Ở trên đây ta chỉ có một node manager với node này đang ở status Ready. OK ! vậy là hoàn thành nhiệm vụ ở bé manager.
Giờ ta chuyển hẳn sang làm câu hỏi trên bé worker1 nhé. Tại worker1 ta thực hiện join nó vào swarm như 1 worker:
$ docker swarm join --token :Trong đó:
host: Địa chỉ ip của nhỏ manager.port: Cổng port của nhỏ manager.Xem thêm: Hành Trình Giành Quán Quân Giọng Hát Việt 2013 Của Vũ Thảo My Vòng Giấu Mặt
Để lấy tin tức về token thì trên bé manager của swarm kia ta sử dụng lệnh
$ docker swarm join-token

Trên hai con worker2 và worker3 ta cũng làm cho tương tự
Lưu ý: một node worker chỉ có thể join vào trong 1 swarm.
Trên node manager ta kiểm tra lại list node

Vậy là ta sẽ tạo thành công 3 nhỏ worker với 1 con manager cùng gom bọn chúng thành một swarm (cluster).
Một thắc mắc được đặt ra ở đấy là tại sao ở chỗ này ta không tận dụng dòng swarm mà lại ta đã tạo ra ở Phần 3 tại trang bị host local (Docker Desktop for Mac) cùng coi nó như 1 node manager để join những node khác vào swarm này cơ mà lại tạo thành thêm một machine để gia công node manager đưa ra cho chi phí tài nguyên như vậy ? Thì câu vấn đáp nằm sinh hoạt Phần 3 (đã tất cả nói siêu rõ) trên phiên bạn dạng Docker Desktop for Mac tất yêu mở luồng định tuyến đường tới những machine nên việc ta cố gắng join những node (machine/vps) vào swarm cùng với manager swarm là host local là vô tác dụng. Đây cũng đó là điểm yếu đuối khi thực thi networking trên OSX.
Bây giờ đồng hồ ta liên tiếp tạo ra service và các replicas cũng như deploy trên node manager.
Để làm cho được vấn đề đó ta cần 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 nhưng mà ta vẫn config qua bên nhỏ manager:
$ docker-machine scp filesource name-machine:/path-docker-machine/Trong demo này:
$ docker-machine scp ~/Workspace/gocode/docker-swarm-demo/docker-compose.yml manager:/home/docker/docker-compose.ymlTiếp theo ta đề xuất push 2 image nhưng mà ở Phần 2 ta đã thực hiện lên repository bên trên hub.docker nhé:
$ docker tag /:$ docker push /Trong đó:
: Id image bạn muốn push
: là username bên trên hub.docker của bạn.
: thương hiệu repository bạn muốn đặt.
: tên tag bạn muốn đặt mang lại image được push lên đó.

Trên Docker Hub

Vậy là ta đang push thành công xuất sắc 2 image cùng giờ ta buộc phải deploy stack :
$ docker stack deploy -c /home/docker/docker-compose.yml swarm-demo-appKiểm tra menu services:

Ta demo xem các bạn dạng replicas này đang hoạt động trên mọi node như thế nào nhé:

Ngoài ra bạn có thể tạo service cần sử dụng lệnh cùng với cú pháp như sau:
$ docker service create --replicas --name vào đó:
: số task bạn muốn tạo ra ( hay nói theo một cách khác là số bản sao của image/container).: tên service bạn có nhu cầu đặt.: ID của image/container.: lệnh muốn chạy.Và ta tất 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 đó :
: tên service mà ta mong mỏi đổi số container.: Số container ước ao muốn.Tiếp theo ta đang xem thử liệu thiên tài load balancing chuyển động thế như thế nào nhé ?
Ta thấy trên con node worker3 không tồn tại giữ replicas của service servergo_1 nào cả. Ta tiến hành gửi request thử tới service servergo_1 trên bé worker3 này coi 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 những request đến những node vào swarm. Những node này rất có thể chứa một hoặc nhiều replicas của các service hoặc không hề chứa mẫu replicas như thế nào cả thì Routing mesh của swarm sẽ đưa tiếp các request đó trải qua ingress network tới Swarm Load Balancer, bộ balancer này sẽ phân chia request tới những container của những service ở những machine( host/vps của manager với worker) cùng chung một mạng swarm. Chúng ta cũng có thể xem hình sau để hiểu rõ hơn:

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

Bây giờ ta test shutdown bé machine worker1 ( như trên thực tế khi 1 hệ thống bị die ) xem bao gồm điều mới lạ gì ko nhé !
$ docker-machine stop Ở trên đây :
= worker1
Kiểm tra lại danh mục node cùng service bên trên node manager


Tại đây ta đang thấy điều mới mẻ và lạ mắt đó. Lúc worker1 bị Shutdown thì từ bây giờ swarm manager sẽ thực hiện tạo thêm một replicas new để thế để cho một replicas đã bị Shutdown đó và triển khai chuyển 1 replicas bắt đầu này cho những worker đã run (cụ thể là worker3). Đây cũng chính là tính năng Desired state reconciliation, Scaling đã được nói rõ trong phần Tính năng Docker Swarm.
Vậy vấn đề nảy sinh tại chỗ này khi toàn bộ node worker bị die thì điều gì đã xảy ra tiếp nối ?
Trong trường đúng theo này node manager cũng trở nên tiến hành thêm các replicas để bảo vệ đủ số replicas mà ta vẫn config (mong muốn) cùng chạy trên chủ yếu con manager này ( tức là node manager đang đóng phương châm là node worker luôn). Và nếu bé manager này die luôn thì các chuyện coi như chấm hết !!.
Xem thêm: Tiểu Sử Lý Thái Tổ, Nhà Tiên Phong Của Những Cuộc Cải Cách, Vua Lý Thái Tổ
Trường hợp trái lại nếu các node worker sẽ run nhưng con node manager bị die thì external storage đang ghi nhận điều đó và thông tin đến các manager node còn sót lại trong cluster. Với external storage sẽ chọn 1 node manager ngẫu nhiên để làm Leader tiếp sau của cluster.

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