Tìm hiểu Docker Swarm có dí dụ cơ bản

😄

Tại sao cần Docker Swarm ?

Trong quy trình phát triển thành, quản lý, scale cũng như deploy mission của bạn có việc dùng lệnh của Docker để deploy thì ban đầu mission bé chỉ cần chạy 1 host(vps) nên ko có vấn đề gì cả. Tuy nhiên lúc mission ấy vì 1 số đề nghị hoặc nguyên nhân gì ấy bắt buộc cần thêm nhiều host hoặc siêu nhiều host(vps). Lúc này bạn khó có thể quản lý, scale và cũng ko thể nào dùng lệnh để đi deploy lên từng con host(vps) điều ấy siêu vật vã. Biết được nỗi lòng ấy Docker đã phát triển thành thêm cho ta chiếc gọi là Docker Swarm.

Docker Swarm là gì ?

Docker Swarm là công cụ native clustering cho Docker. Cho phép ta có thể gom 1 số Docker host lại có nhau thành dạng cụm (cluster) và ta có xem nó như 1 máy chủ Docker ảo (digital Docker host) duy nhất. Và 1 Swarm là 1 cluster của 1 hoặc nhiều Docker Engine đang chạy. Và Swarm mode phân phối cho ta những tính năng để quản lý và điều phối cluster.

Tính năng Docker Swarm

  • Cluster administration built-in with Docker Engine: Quản lý cluster có Docker Engine bằng việc dùng Docker CLI để tạo swarm.
  • Decentralized design: Docker Swarm được thiết kế dạng phân cấp. Thay đổi vì xử lý sự khác biệt giữa những roles của node tại thời điểm triển khai, Docker Engine xử lý bất kỳ chuyên môn hoá nào lúc runtime. Bạn có thể triển khai cả 2 loại node: managers và employee bằng Docker Engine.
  • Declarative service mannequin: Docker Engine dùng phương thức khai báo để cho phép bạn outline trạng thái mong muốn của những dịch vụ khác nhau trong stack ứng dụng của bạn. VD: Bạn có thể mô tả ứng dụng bao gồm: net front-end có service message queueing và database back-end.
  • Scaling: Đối có từng service bạn có thể khai báo số lượng job mà bạn muốn run. Lúc bạn scale up hoặc down thì swarm supervisor sẽ tự động động thêm hoặc xoá job để duy trì trạng thái mong muốn.
  • Desired state reconciliation: Hãy hình dung bạn thiết lập 1 service run 10 replicas của 1 container và 1 employee machine (host/vps) đang giữ 2 trong số 10 replicas ấy gặp sự cố bị crash, lúc này swarm supervisor sẽ tiến hành tạo thêm 2 replicas new để thay thế để cho 2 replicas đã bị crash ấy và tiến hành chuyển 2 replicas new này cho những employee đang run.
  • Multi-host networking: Bạn có thể chỉ định 1 overlay community cho những providers của mình. Swarm supervisor sẽ tự động động gán liên hệ IP cho những container trên overlay community lúc nó khởi tạo và cập nhật software.
  • Service discovery: Swarm supervisor node gán từng service trong swarm 1 DNS duy nhất và bạn có thể truy vấn được thông qua DNS này.
  • Load balancing: Có thể expose những port cho những providers tới load steadiness để giao tiếp có bên bên cạnh.
  • Safe by default: Những service giao tiếp có nhau thông qua giao thức bảo mật TLS. Bạn có thể tuỳ chỉnh dùng chứng chỉ ký tự động root hoặc chứng chỉ từ 1 customized root CA.
  • Rolling updates: Swarm giúp bạn replace picture của service 1 bí quyết hoàn toàn tự động động. Swarm supervisor giúp bạn kiểm soát độ trễ giữa service deploy tới những node khác nhau và bạn có thể rolling again bất cứ lúc nào.
Xem Thêm  Nhận xét airpay là gì | Sen Tây Hồ

Kiến trúc Swarm

Bao gồm những Supervisor và những Employee. Khách hàng có thể khai báo trạng thái mong muốn của nhiều service để chạy trong Swarm dùng YAML recordsdata.

  • Swarm: là 1 cluster của 1 hoặc nhiều Docker Engine đang run (cụ thể trên đây là những node) trong chế độ Swarm, thay thế vì bắt buộc chạy những container bằng câu lệnh thì ta sẽ thiết lập những providers để phân bổ những bản replicas tới những node.
  • Node: 1 node là 1 máy cơ vật lý hay máy ảo đang run phiên bản Docker Engine trong chế độ Swarm. Node sẽ gồm 2 loại: Supervisor NodeEmployee Node.
  • Supervisor Node: Là node nhận những outline service từ consumer, nó quản lý và điều phối những job tới những node Employee. Theo mặc định node Supervisor cũng được coi là node Employee.
  • Employee Node: là node nhận và thực thi những job từ node Supervisor.
  • Service: 1 service xác định picture của container và số lượng những replicas (bản sao) mong muốn khởi chạy trong swarm.
  • Process: là 1 tác vụ mà node employee bắt buộc thực hành. Tác vụ này sẽ do node Supervisor phân bổ xuống. 1 job mang trong mình 1 Docker Container và những lệnh để chạy bên container.

Khiến việc có Docker Swarm

Trong phần này ta sẽ tiến hành thực hành có Docker Swarm thông qua demo bé. Trước tiên ta cần 4 máy ảo (vps ảo) để tạo những máy ảo ta dùng câu lệnh sau:

$ docker-machine create <machine-name>

Trong ấy:

  • <machine-name>: tên máy ảo bạn muốn đặt.

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

$ docker-machine create supervisor

Tiếp tới là những machine cho swarm employee lần lượt là : worker1, worker2, worker3.

$ docker-machine create worker1 $ docker-machine create worker2 $ docker-machine create worker3

Sau thời điểm tạo xong ta đánh giá record machine:

$ docker-machine ls

Ngay bây giờ} ta dùng lệnh examine thử xem thông tin của 1 machine

$ docker-machine examine supervisor

Dễ thấy 1 số thông tin cơ bản về machine như: liên hệ IP, MachineName (tên do ta đặt), SSHKey để có thể truy cập vào machine thông qua SSHKey này, thông tin về CPU ( 1 CPU), Reminiscence ( 1GB), ….

Việc setup những machine đã hoàn thành giờ ta tiến hành khởi tạo swarm trên con supervisor nhé và để truy cập vào con supervisor hay những con employee thì ta dùng thông qua SSH cụ thể như sau:

$ docker-machine ssh <name-machine>

Trên đây:

  • <name-machine> = supervisor

Và để quay lại host native:

$ exit

Khởi tạo swarm

$ docker swarm init -advertise-addr <IP Machine>

Ví dụ bạn đang dùng Docker Desktop for Mac hoặc Docker Desktop for Home windows thì chỉ cần docker swarm init . Nhưng trên đây Working SystemBoot2Docker nên buộc bắt buộc có flag -advertise-addr.

Đánh giá record node hiện đang có trong swarm

$ docker node ls

Những node (machine/vps) là supervisor thì new có xem record này và dấu * cho biết bạn đang trên node supervisor nào trong swarm. Trên đây ta chỉ có 1 node supervisor và node này đang trên standing Prepared. OK ! vậy là xong nhiệm vụ trên con supervisor.

Xem Thêm  In proof là gì? Những thông tin cơ bản về khoa học in proof

Giờ ta chuyển qua làm cho việc trên con worker1 nhé. Tại worker1 ta tiến hành be a part of nó vào swarm như 1 employee:

$ docker swarm be a part of -token <token> <host>:<port>

Trong ấy:

  • host: Liên hệ ip của con supervisor.
  • port: Cổng port của con supervisor.

Để lấy thông tin về token thì trên con supervisor của swarm ấy ta dùng lệnh

$ docker swarm join-token <employee|supervisor>

Trên 2 con worker2worker3 ta cũng làm cho tương tự động

Lưu ý: 1 node employee chỉ có thể be a part of vào 1 swarm.

Trên node supervisor ta đánh giá lại record node Dễ thấy 3 node employee kia có chung 1 standing là rỗng tại cột MANAGER STATUS. Điều này cho ta biết chúng là node employee.

Vậy là ta đã tạo thành công 3 con employee và 1 con supervisor và gom chúng thành 1 swarm (cluster).

1 câu hỏi được đặt ra trên đây là tại sao trên đây ta ko tận dụng chiếc swarm mà ta đã tạo ra trên Phần 3 tại máy host native (Docker Desktop for Mac) và coi nó như 1 node supervisor để be a part of những node khác vào swarm này mà lại tạo ra thêm 1 machine để làm cho node supervisor chi cho phí tổn tài nguyên như thế ? Thì câu trả lời nằm trên Phần 3 (đã có nói siêu rõ) trên phiên bản Docker Desktop for Mac ko thể mở luồng định tuyến tới những machine nên việc ta cố gắng be a part of những node (machine/vps) vào swarm có supervisor swarm là host native là vô tác dụng. Đây cũng chính là điểm yếu lúc triển khai networking trên OSX.

Ngay bây giờ} ta tiếp tục tạo ra service và những replicas cũng như deploy trên node supervisor.

Để làm cho được điều này ta cần config file sentayho.com.vn:

model: ‘3’ providers: webreactjs: picture: quanphamptit/docker-swarm-demo:webreactjs_1 construct: . ports: – 3000:3000 restart: all the time networks: – my-net deploy: mode: replicated replicas: 3 servergo: picture: quanphamptit/docker-swarm-demo:servergo_1 construct: . ports: – 8080:8080 restart: all the time networks: – my-net deploy: mode: replicated replicas: 3 networks: my-net: driver: overlay

và copy file sentayho.com.vn mà ta đã config qua bên con supervisor:

$ docker-machine scp filesource name-machine:/path-docker-machine/

Trong demo này:

$ docker-machine scp ~/Workspace/gocode/docker-swarm-demo/sentayho.com.vn supervisor:/dwelling/docker/sentayho.com.vn

Tiếp theo ta cần push 2 picture mà trên Phần 2 ta đã dùng lên repository trên sentayho.com.vn nhé:

$ docker tag <picture> <username>/<repository-name>:<tag-name> $ docker push <username>/<repository-name>

Trong ấy:

  • <picture> : Id picture bạn muốn push

  • <username>: là username trên sentayho.com.vn của bạn.

  • <repository-name>: tên repository bạn muốn đặt.

  • <tag-name>: tên tag bạn muốn đặt cho picture được push lên ấy.

Trên Docker Hub

Vậy là ta đã push thành công 2 picture và giờ ta cần deploy stack :

$ docker stack deploy -c /dwelling/docker/sentayho.com.vn swarm-demo-app

Đánh giá record providers:

Ta thử xem những bản replicas này đang chạy trên những node nào nhé:

Bên cạnh ra bạn có thể tạo service dùng lệnh có cú pháp như sau:

$ docker service create -replicas <task-number> -name <service-name> <ID-Picture> <command>

Trong ấy:

  • <task-number>: số job bạn muốn tạo ra ( hay nói bí quyết khác là số bản sao của picture/container).
  • <service-name>: tên service bạn muốn đặt.
  • <ID-Picture>: ID của picture/container.
  • <command>: lệnh muốn chạy.
Xem Thêm  Lưu Ý Quan Trọng Lúc Sắm Album Rỗng Là Gì, Album Rỗng Persona Bts Và Poster

Và ta có thể thay thế đổi số container của cluster 1 bí quyết nhanh chóng bằng câu lệnh sau:

$ docker service scale <service-name>=<quantity>

Trong ấy :

  • <service-name>: tên service mà ta muốn đổi số container.
  • <quantity>: Số container mong muốn.

Tiếp theo ta sẽ xem thử liệu tính năng load balancing hoạt động thế nào nhé ?

Ta thấy trên con node worker3 ko có 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 con worker3 này xem sao nhé !

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

Điều này có nghĩa là lúc ta gửi những request tới những node trong swarm. Những node này có thể chứa 1 hoặc nhiều replicas của những service hoặc ko hề chứa chiếc replicas nào cả thì Routing mesh của swarm sẽ chuyển tiếp những request ấy đi qua ingress community tới Swarm Load Balancer, bộ balancer này sẽ phân bổ request tới những container của những service trên những machine( host/vps của supervisor và employee) cùng chung 1 mạng swarm. Bạn có thể xem hình sau để hiểu rõ hơn:

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

Ngay bây giờ} ta thử shutdown con machine worker1 ( như trên thực tế lúc 1 server bị die ) xem có điều new lạ gì ko nhé !

$ docker-machine cease <machine-name>

Trên đây :

  • <machine-name> = worker1

Đánh giá lại record node và service trên node supervisor Chưa thấy gì new lạ bên cạnh việc worker1 bị Down Tìm hiểu Docker Swarm với ví dụ cơ bản

Tiếp tục đánh giá trên từng service

Tại đây ta đã thấy điều new lạ ấy. Lúc worker1 bị Shutdown thì lúc này swarm supervisor sẽ tiến hành tạo thêm 1 replicas new để thay thế để cho 1 replicas đã bị Shutdown ấy và tiến hành chuyển 1 replicas new này cho những employee đang 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 đề phát sinh trên đây lúc toàn bộ node employee bị die thì điều gì sẽ xảy ra tiếp tục ?

Trong trường hợp này node supervisor cũng sẽ tiến hành thêm những replicas để đảm bảo đủ số replicas mà ta đã config (mong muốn) và chạy trên chính con supervisor này ( nghĩa là node supervisor sẽ đóng vai trò là node employee luôn). Và ví dụ con supervisor này die luôn thì mọi chuyện coi như chấm hết !!.

Trường hợp ngược lại ví dụ những node employee đang run nhưng con node supervisor bị die thì exterior storage sẽ ghi nhận điều ấy và thông tin tới những supervisor node còn lại trong cluster. Và exterior storage sẽ chọn 1 node supervisor bất kỳ để làm cho Chief tiếp theo của cluster. Hiện nay music hành có Docker Swarm ta còn có thêm 1 người bạn khác ấy là Kubernetes (K8S). Và nó được triển khai đa dạng hơn Docker Swarm. Trong phần sau ta sẽ khám phá những điều thú vị về nó nhé !!

Ví dụ bạn muốn xem được những bài viết chất lượng, hay thảo luận những tri thức, chia sẻ hiểu biết của bạn tới mọi người, hãy tham dự group của bọn mình trên Fb nhé: ^^