6.1 Các khái niệm chính của Docker Swarm
Docker Swarm
— là hệ thống orchestration container tích hợp sẵn, được cung cấp bởi Docker. Nó cho phép bạn tạo, quản lý và mở rộng cluster từ các Docker-hosts, biến chúng thành một host logic duy nhất, nơi bạn có thể chạy các container. Swarm tự động phân phối tasks giữa các nodes, mang lại sự tiện lợi và khả năng chịu lỗi. Trong bài giảng này, chúng ta sẽ cùng tìm hiểu các thành phần chính và các lệnh cơ bản để quản lý Docker Swarm
.
Các khái niệm chính của Docker Swarm
:
- Cluster (Swarm): một nhóm Docker-hosts, được gộp lại thành một cluster logic duy nhất.
- Managers: các nodes quản lý cluster và phân phối tasks giữa các nodes làm việc.
- Worker Nodes (Workers): các nodes thực hiện tasks và chạy các container.
- Services: biểu diễn logic của ứng dụng, mô tả các tasks cần thực hiện và số lượng instances container cần chạy.
- Tasks: các container đơn lẻ, là instances của services.
Kiến trúc Docker Swarm
:
Docker Swarm sử dụng kiến trúc dựa trên managers và worker nodes. Managers quản lý trạng thái của cluster, còn các worker nodes chịu trách nhiệm thực hiện các tasks.
Managers:
- Quản lý trạng thái của cluster và cấu hình của nó.
- Phân phối tasks giữa các worker nodes.
- Đảm bảo khả năng chịu lỗi và khả dụng cao (khi có nhiều managers).
Worker Nodes:
- Thực hiện các tasks được giao bởi managers.
- Chạy các container theo chỉ thị.
Các lệnh cơ bản của Docker Swarm
:
-
docker swarm init
: khởi tạo một cluster Swarm mới. -
docker swarm join
: kết nối một node vào cluster hiện có. -
docker node ls
: xem danh sách các nodes trong cluster. -
docker service create
: tạo một service mới. -
docker service ls
: xem danh sách các services đang chạy. -
docker service scale
: mở rộng service tới số lượng instances cụ thể. -
docker service rm
: xóa một service khỏi cluster.
Việc sử dụng Docker Swarm
giúp đơn giản hóa việc quản lý các ứng dụng trong các hệ thống phân tán, cung cấp khả năng chịu lỗi, khả năng mở rộng và tiện lợi trong triển khai.
6.2 Tạo cluster Docker Swarm
Tạo và quản lý cluster Docker Swarm
Bước 1: Khởi tạo cluster
Trên host đầu tiên (manager), chạy lệnh:
docker swarm init --advertise-addr <MANAGER_IP>
Lệnh này khởi tạo một cluster Swarm mới, biến node hiện tại thành manager và xuất lệnh để thêm worker nodes.
Bước 2: Thêm worker nodes
Trên các host khác, chạy lệnh được cung cấp khi chạy docker swarm init
, để thêm chúng vào cluster:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Trong đó:
<SWARM_TOKEN>
: token để kết nối đến cluster (được cung cấp bởi lệnhdocker swarm init
).<MANAGER_IP>
: địa chỉ IP của manager node.
Bước 3: Xem danh sách nodes
Để xem tất cả các nodes trong cluster, sử dụng lệnh:
docker node ls
Lệnh này hiển thị danh sách tất cả các nodes, bao gồm vai trò, trạng thái và mức độ khả dụng của chúng.
Ví dụ kết quả lệnh docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Giải thích các cột:
- ID: ID duy nhất của node.
- HOSTNAME: Tên host nơi node đang chạy.
- STATUS: Trạng thái hiện tại của node (ví dụ: Ready).
- AVAILABILITY: Mức độ khả dụng của node (ví dụ: Active).
- MANAGER STATUS: Hiển thị nếu node là manager (ví dụ: Leader, Reachable) hoặc là worker node (để trống).
Giờ đây, cluster Docker Swarm đã được cấu hình, bạn có thể tạo và mở rộng ứng dụng.
6.3 Quản lý Docker Swarm
Quản lý các dịch vụ trong Docker Swarm
1. Tạo dịch vụ
Tạo một dịch vụ, dịch vụ này sẽ chạy với số bản sao được chỉ định:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
Ví dụ này tạo dịch vụ my_web
, dịch vụ này chạy 3 phiên bản Nginx. Các container công khai cổng 80 trên cổng 8080 của host.
2. Xem các dịch vụ
Để xem tất cả các dịch vụ đang chạy trong cụm, sử dụng lệnh:
docker service ls
Ví dụ xuất lệnh docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Mở rộng dịch vụ
Để thay đổi số lượng bản sao (replicas) của dịch vụ, sử dụng lệnh docker service scale
:
docker service scale my_web=5
Bây giờ dịch vụ my_web
sẽ có 5 phiên bản.
4. Cập nhật dịch vụ
Để cập nhật hình ảnh của dịch vụ lên phiên bản mới, sử dụng lệnh docker service update
:
docker service update --image nginx:latest my_web
Đảm bảo tính sẵn sàng cao
Docker Swarm hỗ trợ tính sẵn sàng cao thông qua:
- Phân phối tác vụ giữa các node trong cụm để tự động khôi phục các container khi có lỗi.
- Hỗ trợ nhiều manager: Khuyến nghị số lượng manager lẻ (ví dụ, 3 hoặc 5) để tránh vấn đề về quorum.
- Sử dụng replicas: Cấu hình nhiều bản sao cho mỗi dịch vụ để tăng khả năng chịu lỗi.
Khái niệm về quorum
Quorum là đa số các node, những node này cần đồng ý với một hành động cụ thể (ví dụ, ghi dữ liệu hoặc chọn leader) để hành động đó được coi là hợp lệ. Ví dụ, trong cụm có 5 node, quorum sẽ là 3 node.
Lời khuyên hữu ích!
Đảm bảo rằng các manager được đặt trên các server vật lý hoặc đám mây khác nhau để giảm thiểu nguy cơ lỗi cùng lúc.
6.4 Ví dụ cấu hình Docker Compose
cho Docker Swarm
Docker Compose
có thể được sử dụng với Docker Swarm
để đơn giản hóa việc quản lý các ứng dụng đa container.
Ví dụ tệp docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Chạy stack Docker Compose
trong Swarm
Để triển khai stack trong Docker Swarm
, sử dụng lệnh:
docker stack deploy -c docker-compose.yml mystack
Xem stack
Xem các stack đã được triển khai:
docker stack ls
Xem các service trong stack
docker stack services mystack
GO TO FULL VERSION