Giới thiệu cơ bản về Docker Swarm
Docker Swarm là gì? Đây là một trong những câu hỏi mà hầu hết những người làm lập trình web tìm tòi. Nếu bạn cũng đang gặp phải vướng mắc này cùngBizfly Cloud tìm hiểu những thông tin chi tiết về Docker Swarm ngay tại bài viết này nhé.
Khái niệm Docker Swarm là gì?
Docker Swarm là một nhóm các máy chạy Docker và tập hợp lại với nhau thành một cluster. Không như docker engine, sau khi các máy này tập hợp vào Swarm, mọi câu lệnh Docker sẽ được thực thi trên Swarm manager.
Các máy tham gia vào swarm được gọi là worker node. Các node này chỉ có khả năng cung cấp khả năng hoạt động chứ không có quyền quản lý các node khác.
Docker Swarm có khả năng khởi chạy các container trên nhiều máy (cluster - máy ảo hoặc máy vật lý) hoặc trên một máy duy nhất (standalone)
Docker Swarm là một phần mềm hỗ trợ việc tạo và quản lý các container hoặc các hệ thống Container Orchestration. Nó là một cluster nơi mà người dùng quản lý các Docker Engines hoặc các node nơi mà các service được deploy và chạy.
Ngoài ra Docker Swarm có những tính năng để hỗ trợ việc quản lý các container khi chạy trên môi trường phân tán và để chắc chắn các container trong một cluster hoạt động ổn định.
Tính năng nổi bật của Docker Swarm
Docker Swarm cung cấp cho chúng ta rất nhiều tính năng nổi bật. Dưới đây là một số tình năng nổi bật nhất của Docker Swarm:
Service Discovery
Service discovery là một cơ chế mà Docker sử dụng để định tuyến lại request từ một client bên ngoài đến một node riêng lẻ bên trong swarm mà client không cần biết có bao nhiêu node đang tham gia vào service or hoặc IP hoặc port.
Service Discovery có thể hoạt động theo 2 cách khác nhau, sử dụng V-IP hoặc DNS round robin (DNSRR).
Mặc định docker swarm sẽ sử dụng VIP.
Service discovery trong Docker Swarm được thực hiện như sau.
- Bước 1: Tạo một overlay network.
- Bước 2: Tạo một service gán nó vào network vừa được tạo.
- Bước 3: Swarm gán VIP và DNS entry cho mỗi service.
- Bước 4: VIP sẽ map đến DNS dựa theo service name.
- Bước 5: Container chia sẻ DNS mapping cho service thông qua. GOSSIPBước 6: Bất kỳ container nào trong network cũng có thể kết nối đến service thông qua service name.
Load Balancing
Swarm manager sử dụng network ingress load balancing để đưa các service ra bên ngoài swarm. Swarm manager có thể tự động đưa các service lên các Port chưa được sử dụng trong khoảng 30000-32767. Hoặc người dùng cũng có thể tự động xác định port mà service sẽ được gán vào.
Các ứng dụng bên ngoài có thể truy cập vào service thông qua các Published Port ở bất kỳ node nào trong cluster kể cả node đó có service này hay không.
Tất cả các node trong Swarm đều sẽ kết nối đến route ingress để kết nối đến các task đang hoạt động.
Bên trong Swarm mode, mỗi một service đều sẽ được gán cho một DNS nội bộ để truy cập. Swarm manager sẽ sử dụng khả năng load balancing nội bộ để gửi các yêu cầu đến các service trong cluster dựa theo DNS của service đó.
High Avability
Chức năng này tăng tính chịu lỗi cho cluster và cũng để đảm bảo rằng mọi thứ hoạt động bình thưởng kể cả khi có một manager trong cluster bị down bằng cách tăng số lượng Swarm manager.
Ngoài ra nó cũng đảm bảo rằng các worker node bên dưới chỉ hoạt động với một schedule duy nhất với một nguồn duy nhất, cũng như đảm bảo rằng các network không kết nối được sẽ không ảnh hưởng đến cluster.
Chức năng này hoạt động thông qua một external storage bên ngoài chứa key để xác định Leader cho cluster.
Nếu như node Leader trong nhóm các manager node bị down, external storage sẽ ghi nhận điều đó và thông báo đến các manager node còn lại trong cluster. Sau đó các manager này sẽ được external storage chọn một làm Leader tiếp theo của cluster.
Các node manager còn lại sẽ tiếp tục forward các request đến Leader mới đó thông qua notify message từ external storage
Điều này đảm bảo khả năng chịu lỗi và tính sẵn sàng cao cho cluster.
Scheduling
Docker Swarm Manager có khả năng đặt kế hoạch để đảm bảo chắc chắn rằng các nguồn lực hoạt động cho các container.
Swarm manager sẽ xây dựng kế hoạch cho các container trong cluster dựa theo các tài nguyên mà nó có như CPU, memory, etc,... và các constraints, affinities.
Scheduling là chức năng cho phép swarm manager khả năng quản lý thêm các container đã có hoặc được thêm mới vào cluster và hỗ trợ khả năng mở rộng cluster.
Docker Swarm Schedule Strategies:
- SPREAD: Đây là default setting được dùng để cân bằng các container qua các nodes trong cluster dựa theo tài nguyên CPU, RAM cũng như các container đang chạy. Lợi ích của Spread là nếu node chứa các container bị fails thì sẽ có ít container bị mất.
- Random: Strategies này sẽ chọn ngẫu nhiên các node chứa container
Kiến trúc Docker Swarm
Kiến trúc của Docker Swarm bao gồm Manager và Worker, qua đây người dùng có thể dễ dàng khai báo trạng thái của nhiều service dùng chạy trong Swarm sử dụng YAML files.
- Manager Node: Quản lý và điều phối các task đến các node Worker theo như mặc định node Manager và cũng được coi là node Worker.
- Worker Node: Đây là node nhận và thực thi các task từ node Manager.
- Task: Được biết đến là các con tainers giúp thực thi các lệnh đã được định nghĩa trong service. Tác vụ này một phần do Manager phân bổ, sau việc phân bổ này task không thể chuyển tới một Worker khác. Khi task thất bại, node Manager sẽ có một phiên bản mới cho một node khác sẵn có trong Swam.
Service: Khi một service xác định được image của container cùng với số lượng replicas mong muốn và khởi chạy được trong Swarm.
Swarm: Là một cluster của node ở trong chế độ Swarm, thiết lập các services giúp phân bổ bản replicas tới node thay vì phải chạy các container bằng câu lệnh.
Hoạt động của Docker Swarm
Dưới đây là một số hoạt động của Docker Swarm:
- Manage node được hiểu một cách đơn giản là trạng thái hoạt động của các Worker node có trong cụm.
- Worker node giúp chấp nhận các task gửi từ phía Manage node.
- Worker node được ví giống như một agent, báo cáo các trạng thái task của node đến Manage node.
- Tất cả các Worker node muốn giao tiếp với Manager node cần sử dụng API qua hình thức HTTP.
Các node trong swarm là gì? Cách thức làm việc của các node?
Các node trong Docker Swarm là các máy chạy Docker Engine được join vào swarm. Các node này có thể được gọi là một Docker Node.
Để có thể deploy một ứng dụng trên Swarm, người dùng cần phải định nghĩa các service đến manager node. Manager node này sẽ chuyển *service* này thành các *task* và đưa xuống cho các node bên dưới để thực thi
Docker Swarm còn được coi là một dạng native cluster do các node trong cluster kể cả là manager node cũng sẽ hoạt động như một worker node. Các worker node được giao task từ manager node sẽ thông báo về cho manager node tình trạng hiện tại của task đang chạy trên node đó thông qua một *agent* ở mỗi node để cho manager node có thể đảm bảo trạng thái của mỗi node bên dưới nó.
Các service và task trong Docker Swarm
Service trong Docker Swarm đảm nhận chức năng định danh các task hoạt động cho manager node hoặc các worker node.
Ngoài docker-CLI thì các service này cũng có thể được deploy bằng Docker-Compose
Khi khởi tạo một service trong swarm mode, người dùng sẽ xác định container imager nào sẽ được sử dụng và câu lệnh nào sẽ chạy bên trong container đó. Nó khả năng sắp xếp, quản lý container của swarm.
Các container images được chia sẻ và upload trên dockerhub
Một task có nhiệm vụ xác định Docker container và câu lệnh sẽ được chạy bên trong container đó.
Node manager sẽ đưa các task này cho các worker node theo số lượng replicas được set trong service scale. Khi một task được đưa cho một worker node, nó sẽ không thể chuyển sang node khác, nó chỉ có thể trên node được manager node chỉ định hoặc FAIL.
Có 2 kiểu service là:
- Replicated Service: ở chế độ này thì swarm manager sẽ xác định số lượng các bản sao mà một task của một service sẽ được chạy trên các nodes dựa theo sự mong muốn của người dùng.
- Global Services: ở chế độ này swarm manager sẽ chạy một task cho một service trên tất cả các node có khả năng chạy được trong cluster
Ngoài ra, nếu người dùng tạo một service mà trong cluster hiện tại chưa có node nào có khả năng chạy service đó thì service đó sẽ được đưa về chế độ Pending Service
Service có thể bị Pending mãi mãi nếu không có node nào trong cluster có khả năng thỏa mãn yêu cầu sử dụng của service.
Trên đây là những thông tin chi tiết về docker swarm và có thể áp dụng được vào dự án của mình. Hy vọng bài viết này giúp các bạn có thể hiểu được rõ hơn về docker swarm hơn.
Theo Bizfly Cloud chia sẻ
>> Tìm hiểu thêm: Cài đặt Odoo sử dụng Docker
BizFly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.
BizFly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.
Độc giả quan tâm đến các giải pháp của BizFly Cloud có thể truy cập tại đây.
DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud