Docker Swarm Mode là gì và nó hoạt động như thế nào?

Nếu bạn đang chứa đựng quy trình phát triển của mình, bạn sẽ đồng ý rằng Docker là một trong những lựa chọn tốt nhất để kiểm soát phiên bản. Tuy nhiên, Docker Swarm là một trong những tính năng của Docker được sử dụng để sắp xếp các ứng dụng phức tạp.

Cơ chế hoạt động của Docker Swarm có thể khó bị bẻ khóa lúc đầu. Nhưng đừng lo lắng, chúng tôi sẽ chia nhỏ nó trong bài viết này. Vậy Docker Swarm là gì? Tại sao sử dụng nó? Và làm như thế nào?

LÀM VIDEO TRONG NGÀY

Docker Swarm là gì và nó hoạt động như thế nào?

Docker Swarm đề cập đến một nhóm các máy chủ Docker (máy tính) được nối mạng như một cụm để cung cấp các tác vụ được chỉ định. Mỗi máy chủ Docker trong cụm này là một nút, còn được gọi là nút công nhân.

Để đảm bảo phân phối hiệu quả các nhiệm vụ, bạn cần có một nút quản lý. Lý tưởng nhất là khởi tạo chế độ Docker Swarm bắt đầu với nút người quản lý và các nút tiếp theo trở thành công nhân.

Với tư cách là người điều hành, bạn chỉ cần tương tác với nút người quản lý, nút này sẽ chuyển hướng dẫn cho nhân viên. Luôn luôn, các nút công nhân nhận phân bổ nhiệm vụ từ nút người quản lý và thực thi chúng tương ứng.

Tuy nhiên, nút quản lý cũng có thể tham gia vào việc thực thi nhiệm vụ (với tư cách là một nhân viên) hoặc quản lý trực diện. Bạn có thể ngăn lập lịch tác vụ trên trình quản lý bằng cách chuyển trạng thái của nó từ tích cực đến làm khô hạn. Nhưng quyết định của bạn để chỉ định chức năng kép này có thể phụ thuộc vào một số yếu tố. Về cơ bản, bạn muốn chắc chắn rằng nó có đủ tài nguyên để xử lý một số vai trò trước khi thực hiện.

Các nút không thành công. Vì vậy, nút quản lý chủ động theo dõi trạng thái của từng nút công nhân và kích hoạt cơ chế chịu lỗi để lên lịch lại nhiệm vụ từ nút bị lỗi sang nút khác.

Nhưng điều gì sẽ xảy ra nếu nút quản lý cũng bị treo? Điều thú vị là bầy đàn vẫn tiếp tục chạy. Cạm bẫy duy nhất là bạn sẽ không thể giao tiếp với nút quản lý để kiểm soát cụm nữa.

Cách tiếp cận không an toàn phổ biến để ngăn chặn điều này là chỉ định vai trò người quản lý cho nhiều nút (Docker khuyến nghị tối đa bảy nút cho mỗi cụm). Sau đó, bạn có thể chọn nút người quản lý chính từ chúng. Khi người quản lý chính gặp sự cố, một trong những người quản lý dự phòng sẽ đảm nhận vai trò.

Tuy nhiên, bạn không phải lo lắng về việc chuyển đổi vai trò giữa các nút hoặc bảo trì trạng thái trong một cụm. Thuật toán đồng thuận bè (một phương pháp chịu lỗi) được tích hợp trong Docker SwarmKit sẽ giải quyết vấn đề này.

Tại sao sử dụng Docker Swarm?

Docker Swarm rất tiện lợi để triển khai các ứng dụng phức tạp với triển vọng khả năng mở rộng cao. Một trong những trường hợp sử dụng chính của nó là phân quyền microservices. Sau đó, mỗi microservice chia sẻ một vùng chứa tương tự với những vùng chứa trên các nút công nhân khác.

Một lý do khác để sử dụng Docker Swarm là nhiều máy chủ chạy các tác vụ đồng thời trong một cụm. Điều này trái ngược với Docker Compose, chỉ cho phép bạn chạy nhiều vùng chứa trên một công cụ Docker.

Thuộc tính có thể mở rộng này của Docker Swarm cho phép các ứng dụng luôn có sẵn với độ trễ bằng không. Đó thậm chí là một trong những lý do bạn muốn chọn Docker hơn các công cụ ảo hóa khác.

Và hơn thế nữa? Không giống như các Vùng chứa Docker đơn lẻ, nơi một vùng chứa dừng lại khi nó bị lỗi, Docker Swarm tự động phân phối lại các nhiệm vụ giữa các nút công nhân có sẵn bất cứ khi nào một nút bị lỗi.

Docker Swarm cũng giữ một bản sao lưu của mỗi trạng thái. Vì vậy, bạn luôn có thể hoàn nguyên cấu hình bầy đàn mới về trạng thái của cấu hình cũ. Giả sử nút người quản lý trên một nhóm trước đó không thành công; bạn có thể bắt đầu một cụm mới với nhiều nút trình quản lý hơn và hoàn nguyên nó để điều chỉnh cấu hình của cụm trước đó.

Điều quan trọng cần đề cập là sự tương tác giữa nút quản lý và các nút công nhân là an toàn.

Docker có nhiều lựa chọn thay thế, và một trong những lựa chọn gần nhất là Kubernetes. Tuy nhiên, Docker Swarm dễ sử dụng và tự động hơn. Ví dụ: trong khi bạn có thể cần cân bằng tải theo cách thủ công trong một số công cụ điều phối khác như Kubernetes, Docker Swarm có tính năng cân bằng tải tự động, giúp DevOps dễ dàng thực hiện.

Kiến trúc bầy đàn Docker

Kiến trúc Docker Swarm xoay quanh các dịch vụ, nút và nhiệm vụ. Tuy nhiên, mỗi thứ đều có vai trò trong việc chạy ngăn xếp thành công.

Dịch vụ

Dịch vụ Docker Swarm nêu chi tiết cấu hình của hình ảnh Docker chạy tất cả các vùng chứa trong một bầy. Nó bao gồm thông tin về các nhiệm vụ trong một cụm. Ví dụ: một dịch vụ có thể mô tả thiết lập máy chủ SQL được Dockerized.

Khi bạn chạy một dịch vụ, nó buộc nút người quản lý phải đồng bộ hóa với các cấu hình của nó. Sau đó, nút quản lý sẽ chạy phần còn lại của các nút công nhân dựa trên các cài đặt được chỉ định trong dịch vụ.

Các dịch vụ trong Docker Swarm có thể là toàn cầu hoặc nhân rộng.

Sự khác biệt giữa chúng là trong khi các dịch vụ toàn cầu chỉ xác định một nhiệm vụ cho tất cả các nút trong một cụm, các dịch vụ sao chép chỉ định số lượng tác vụ trên mỗi nút.

Điểm giao

Một nút trong Docker Swarm là một ví dụ của toàn bộ thời gian chạy Docker, còn được gọi là công cụ Docker. Các nút Swarm có thể là máy vật lý hoặc máy ảo. Hãy coi đây là một mạng gồm các máy tính chạy các tiến trình tương tự (vùng chứa).

Mặc dù vậy, thông thường, các nút trải dài trên một số máy tính và máy chủ chạy công cụ Docker trong các ứng dụng đời thực. Và như đã đề cập trước đó, một nút có thể là một nút quản lý hoặc nút công nhân, tùy thuộc vào vai trò.

Nút người quản lý lắng nghe nhịp tim của bầy đàn và điều khiển các nút công nhân, các nút này thực thi các nhiệm vụ được giao cho chúng bởi nút người quản lý. Như đã nói trước đó, bạn có thể có nhiều hơn một nút quản lý trong một nhóm. Nhưng lý tưởng nhất, hãy cố gắng giới hạn số lượng dưới bảy, vì việc thêm quá nhiều nút quản lý có thể làm giảm hiệu suất của bầy đàn.

Nhiệm vụ

Một nhiệm vụ xác định công việc được giao cho mỗi nút trong Docker Swarm. Ở chế độ nền, lập lịch tác vụ trong Docker Swarm bắt đầu khi người điều phối tạo các tác vụ và chuyển chúng cho bộ lập lịch, bộ này khởi tạo một vùng chứa cho mỗi tác vụ.

Sau đó, nút người quản lý sử dụng bộ lập lịch để gán và chỉ định lại nhiệm vụ cho các nút theo yêu cầu và được chỉ định trong dịch vụ Docker.

Docker Swarm so với Docker Soạn: Sự khác biệt là gì?

Mọi người thường sử dụng Docker Compose và Docker Swarm thay thế cho nhau. Mặc dù cả hai đều liên quan đến việc chạy nhiều vùng chứa, chúng khác nhau.

Trong khi Docker Compose cho phép bạn chạy nhiều vùng chứa trên một máy chủ duy nhất, Docker Swarm phân phối chúng qua một số công cụ Docker trong một cụm.

Bạn sử dụng Docker Compose khi cần tạo các vùng chứa riêng biệt cho từng dịch vụ trong ứng dụng của mình. Do đó, khi một thành phần gặp sự cố, nó sẽ không ảnh hưởng đến các thành phần khác. Tuy nhiên, khi máy chủ bị lỗi, toàn bộ ứng dụng cũng bị treo.

Tuy nhiên, Docker Swarm giúp bạn chạy nhiều vùng chứa trên các nút được phân cụm. Vì vậy, mỗi thành phần của ứng dụng của bạn nằm trên một số nút. Và khi một nút xử lý một thành phần ứng dụng gặp sự cố, nhóm sẽ phân bổ nhiệm vụ của nó cho một nút khác trong cụm và lên lịch lại các tác vụ đang chạy, ngăn chặn thời gian chết.

Do đó, mặc dù bạn có thể có thời gian chết trên Docker Compose, nhưng Docker Swarm đảm bảo rằng ứng dụng của bạn tiếp tục chạy với sự trợ giúp của các máy chủ dự phòng (các nút công nhân). Tuy nhiên, Docker 1.13 hỗ trợ triển khai Docker Compose sang chế độ Swarm bằng cách sử dụng triển khai ngăn xếp docker yêu cầu.

Docker Swarm giúp bạn triển khai các ứng dụng phức tạp

Containerization đã vượt trội các máy ảo trong việc tích hợp liên tục và thiết kế phần mềm phân phối liên tục (CI / CD). Do đó, hiểu được thực chất của cơ chế Docker Swarm là một kỹ năng bổ sung nếu bạn đang muốn trở thành một chuyên gia DevOps vô giá.

Bạn có thể biết cách quay một vùng chứa Docker hoặc thậm chí chạy Docker Compose cho nhiều vùng chứa trong một máy chủ lưu trữ. Nhưng Docker Swarm thuận tiện hơn cho việc triển khai các ứng dụng có kiến ​​trúc phức tạp. Nó chia nhỏ các quy trình thành các đơn vị, cải thiện khả năng truy cập thời gian chạy và giảm hoặc thậm chí loại bỏ cơ hội thời gian chết.


Previous Post
Next Post

post written by: