Docker Swarm Là Gì?
Docker Swarm là một công cụ tích hợp trong Docker, được thiết kế để quản lý và điều phối các container trên nhiều máy chủ (host) nhằm tạo thành một cụm (cluster) hiểu đơn giản nó giúp bạn đồng bộ hóa cụm docker trên nhiều máy một cách dễ dàng. Cho phép bạn triển khai, quản lý và mở rộng các ứng dụng container hóa đơn giản, hoạt động như một máy chủ ảo duy nhất.
Docker Swarm giúp đơn giản hóa việc triển khai ứng dụng phân tán, cung cấp các tính năng như cân bằng tải, khám phá dịch vụ, và khả năng mở rộng tự động, phù hợp cho các hệ thống cần tính sẵn sàng cao và khả năng chịu lỗi.
Tại Sao Chọn Docker Swarm?
Docker Swarm được chọn vì những lý do sau:
- Liên kết chặt chẽ với Docker: Swarm là một phần của Docker Engine, không yêu cầu cài đặt phần mềm bổ sung, giúp việc triển khai cài đặt nhanh chóng.
- Dễ sử dụng: So với các giải pháp điều phối khác như Kubernetes, Docker Swarm có phần đơn giản hơn, phù hợp với các nhóm phát triển nhỏ hoặc các dự án không quá phức tạp.
- Hỗ trợ mở rộng nhanh chóng: Swarm cho phép mở rộng số lượng container chỉ bằng một vài lệnh, giúp đáp ứng nhanh nhu cầu.
- Tính sẵn sàng cao: Swarm tự động quản lý các node, đảm bảo ứng dụng luôn hoạt động ngay cả khi một số node gặp sự cố.
- Bảo mật mặc định: Swarm tích hợp các cơ chế bảo mật như mã hóa TLS giữa các node, đảm bảo an toàn trong giao tiếp.
Lợi Ích Của Docker Swarm
- Tự động hóa quản lý cụm: Swarm tự động phân phối các container (tasks) đến các node phù hợp, giảm thiểu công việc thủ công.
- Khả năng chịu lỗi: Nếu một node thất bại, Swarm sẽ tự động chuyển các tác vụ sang node khác để duy trì hoạt động.
- Cân bằng tải tích hợp: Swarm tự động phân phối lưu lượng giữa các container, tối ưu hóa hiệu suất.
- Dễ dàng triển khai và mở rộng: Các dịch vụ có thể được triển khai hoặc mở rộng chỉ với một lệnh duy nhất.
- Hỗ trợ mạng đa máy chủ: Swarm cung cấp mạng overlay, cho phép các container trên các máy chủ khác nhau giao tiếp dễ dàng.
Kiến Trúc Docker Swarm
Docker Swarm hoạt động dựa trên một kiến trúc phân tán với các thành phần chính sau:
- Node: Mỗi máy chủ trong cụm Swarm là một node. Có hai loại node:
- Manager Node: Chịu trách nhiệm quản lý cụm, điều phối các tác vụ, và lưu trữ trạng thái cụm. Manager node sử dụng thuật toán Raft để đảm bảo tính nhất quán.
- Worker Node: Chỉ chạy các tác vụ được giao từ manager node.
- Leader và Releader: Trong số các manager node, một node được bầu làm leader để thực hiện các quyết định điều phối. Các manager node khác hoạt động như releader để dự phòng nếu leader thất bại.
- Service: Là định nghĩa của một ứng dụng hoặc một phần của ứng dụng chạy trong cụm. Một service bao gồm các container (tasks) được triển khai trên các node.
- Task: Là đơn vị thực thi nhỏ nhất trong Swarm, thường là một container chạy một phần của service.
Ảnh minh họa:
Leader: uat-core-22
Manager phụ: uat-tiktok-225, uat-web-223, uat-youtube-224
Worker: backenduat226, facebook-233
Mạng Overlay Trong Docker Swarm
Mạng overlay là một loại mạng ảo cho phép các container trên các node khác nhau giao tiếp với nhau như thể chúng ở trên cùng một máy chủ. Mạng overlay sử dụng công nghệ VXLAN để tạo ra một mạng ảo, mã hóa lưu lượng và đảm bảo bảo mật. Các tính năng chính của mạng overlay bao gồm:
- Giao tiếp đa máy chủ: Các container trên các node khác nhau có thể giao tiếp thông qua mạng overlay mà không cần cấu hình phức tạp.
- Khám phá dịch vụ: Mỗi service trong Swarm được gán một tên DNS nội bộ, giúp các container dễ dàng tìm và giao tiếp với nhau.
- Cân bằng tải nội bộ: Mạng overlay tích hợp cơ chế cân bằng tải, tự động phân phối lưu lượng giữa các container trong một service.
Hiểu Biết Về Service trong Docker Swarm
Trong Docker Swarm, service là một khái niệm trung tâm, đại diện cho một ứng dụng hoặc một phần của ứng dụng được chạy trong cụm. Một service bao gồm:
- Hình ảnh container (image): Xác định ứng dụng sẽ chạy.
- Số lượng bản sao (replicas): Số lượng container cần chạy để đảm bảo khả năng mở rộng và chịu lỗi.
- Cấu hình mạng: Xác định cách service giao tiếp với các service khác hoặc với thế giới bên ngoài.
- Cập nhật chính sách (update policy): Quy định cách Swarm triển khai các bản cập nhật cho service mà không làm gián đoạn hoạt động.
Cấu Hình Service
Để cấu hình một service, bạn cần sử dụng lệnh docker service create
với các tham số như:
--name
: Đặt tên cho service.--replicas
: Chỉ định số lượng bản sao (container) của service.--network
: Kết nối service với một mạng cụ thể (thường là overlay).--publish
: Ánh xạ cổng từ container ra ngoài để truy cập từ bên ngoài.
Ví dụ lệnh tạo service:
docker service create --name my-web --replicas 3 --publish 8080:80 nginx
Lệnh này tạo một service tên my-web
với 3 bản sao, sử dụng image nginx
, và ánh xạ cổng 8080 của host tới cổng 80 của container.
Trạng Thái Trên Từng Docker Swarm
- Desired State: Trạng thái mong muốn của service, được định nghĩa bởi người dùng (ví dụ: số lượng bản sao, cấu hình mạng).
- Actual State: Trạng thái thực tế của service trên cụm, được Swarm cố gắng duy trì khớp với Desired State.
- Reconciliation: Swarm liên tục theo dõi và điều chỉnh Actual State để khớp với Desired State, đảm bảo tính nhất quán.
Ví dụ: Nếu một node thất bại, Swarm sẽ tự động triển khai lại các task trên node khác để duy trì số lượng bản sao mong muốn.
Một Số Tính Chất Cốt Lõi Của Docker Swarm
- Desired State Reconciliation:
- Swarm liên tục so sánh trạng thái thực tế với trạng thái mong muốn và thực hiện các điều chỉnh cần thiết, như tái tạo container nếu chúng thất bại.
- Multi-host Networking:
- Mạng overlay cho phép giao tiếp liền mạch giữa các container trên các node khác nhau.
- Service Discovery:
- Swarm tự động gán tên DNS cho các service, giúp các container dễ dàng tìm nhau mà không cần cấu hình thủ công.
- Load Balancing:
- Swarm tích hợp cơ chế cân bằng tải, tự động phân phối lưu lượng giữa các container trong một service.
- Secure by Default:
- Swarm sử dụng TLS để mã hóa giao tiếp giữa các node, đảm bảo an toàn dữ liệu. Các chứng chỉ được tự động quản lý và làm mới.
Một Số Lệnh Tương Tác
Dưới đây là các lệnh phổ biến để quản lý Docker Swarm:
-
Khởi tạo cụm Swarm:
docker swarm init
Khởi tạo một cụm Swarm, biến node hiện tại thành manager node.
-
Thêm node vào cụm:
docker swarm join --token <token> <manager-ip>:<port>
Sử dụng token được cung cấp bởi manager để thêm worker node.
-
Tạo service:
docker service create --name <service-name> --replicas <n> <image>
Tạo một service với số lượng bản sao và image chỉ định.
-
Danh sách service:
docker service ls
Hiển thị tất cả các service đang chạy trong cụm.
-
Mở rộng hoặc thu hẹp service:
docker service scale <service-name>=<n>
Thay đổi số lượng bản sao của service.
-
Xóa service:
docker service rm <service-name>
Xóa một service khỏi cụm.
-
Kiểm tra trạng thái node:
docker node ls
Hiển thị danh sách các node trong cụm và trạng thái của chúng.
-
Cập nhật service:
docker service update --image <new-image> <service-name>
Cập nhật image hoặc cấu hình của service.
Hoàn thành
Chúng ta đã đi một vòng để hiểu Docker Swarm tính chất khái niệm tổng thể là một giải pháp mạnh mẽ dễ sử dụng, dễ quản lý các ứng dụng container docker, đây là sẽ là công cụ hữu ích cho bạn để làm việc trong môi trường có nhiều host và cần động bộ hóa hiệu quả liên kết mạnh mẽ dễ dàng.