Trang chủ Sys-Ops

Giới thiệu cơ bản về Docker Swarm

Docker Swarm là gì?

Khái niệm

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 ví dụ như :

- Quản lý Cluster với Docker Engine

- Thiết kế phân cấp

- Scaling

- Multi-host networking

- Service Discovery

- Load balancing

- Bảo mật

- Rolling updates

Mô hình của Docker Swarm

Giới thiệu cơ bản về Docker Swarm - Ảnh 1.


Giới thiệu cơ bản về Docker Swarm - Ảnh 2.


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ó.

Giới thiệu cơ bản về Docker Swarm - Ảnh 3.

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.

Giới thiệu cơ bản về Docker Swarm - Ảnh 4.

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.

Tính năng nổi bật

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 đó.

Giới thiệu cơ bản về Docker Swarm - Ảnh 5.

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.

Giới thiệu cơ bản về Docker Swarm - Ảnh 6.

Giới thiệu cơ bản về Docker Swarm - Ảnh 7.

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.

Giới thiệu cơ bản về Docker Swarm - Ảnh 8.

- Random: Strategies này sẽ chọn ngẫu nhiên các node chứa container

Giới thiệu cơ bản về Docker Swarm - Ảnh 9.

Docker Swarm Network

Trong Docker Swarm có 2 kiểu traffice khác nhau là:

- Control and management plane traffic: Đây là traffic luôn luôn bị được mã hóa vì nó chứa các swarm managerment message ví dụ như các request tham gia hoặc rời bỏ swarm.

- Application data plane traffic: Đây là traffic của các container và các giao thức kết nối ra các clients bên ngoài.

Docker Swarm sử dụng 3 loại network là user define network, docker_gwbridge, ingress

Schedule Filter

Swarm manager sẽ dựa theo 5 filter dưới đây để đặt schedule cho container. Nó cũng sẽ xóa bỏ các node bị fails Filter cũng như không tuân theo các constraints.

NODE FILTER

- Constraint: Cũng được biết đến như node tags, constraint là một cặp key/values thuộc về một node. Người dùng có thể chọn một hoặc nhiều cặp key/value khi xây dựng một container.

- Health: filter sẽ ngăn cản việc scheduling container trên node mà function này không chạy được.

CONTAINER FILTER

- Affinity: Đảm bảo container chạy trên các node cùng một network, filter này sẽ nói với container chạy theo giá trị tiếp theo dựa vào identifier, image, label.

- Port: Với filter này, port được coi như là một nguồn tài nguyên độc nhất. Khi container cố gắng kết nối đến port đã được sử dụng, nó sẽ chuyển sang node tiếp theo trong cluster.

- Dependency: Khi container dựa trên một container khác, filter này sẽ schedules chúng trên cùng một node.

- Trong swarm mode, Docker Swarm sử dụng một dạng network khác của bridge là docker_gwbridge.

Network này là một bridge network kết nối overlay networks bao gồm cả ingress network đến mạng vật lý của Docker Daemon. Mặc định là các container, service đang chạy đều kết nối đến docker_gwbridge network của Docker Daemon host.

docker_gwbridge là mạng được tạo tự động khi người dùng sử dụng swarm mode. Network này được Docker cho phép người dùng chỉnh sửa.

Docker Swarm mode sử dụng Overlay Network để quản lý việc giao tiếp giữa các Docker daemons trong swarm.

Người dùng có thể tạo ra overlay network bằng câu lệnh

docker network create --drive overlay

Giới thiệu cơ bản về Docker Swarm - Ảnh 10.

Các overlay network này hoạt động theo cơ chế của VXLAN tạo ra IPSEC tunnel giữa các container nơi mà các service, container đang hoạt động. Tunnel sử dụng AES để mã hóa tự động thay đổi key sau 12 tiếng.

ingress network là một overlay network đặc biệt có nhiệm vụ cân bằng tải giữa các service node. Khi swarm node nhận được request từ một published port, nó sẽ chuyển request này đến module IPVS, module này sẽ kiểm tra các IP tham gia vào hoạt động của service đó, chọn một trong các IP này rồi điều hướng request đến IP đó qua ingress network.

ingress network này cũng được tự động tạo ra mỗi khi người dùng khởi tạo swarm mode. Từ bản Docker17.05 người dùng có thể cấu hình network này.

Hiện nay, Docker Swarm còn hỗ trợ việc các container có thể có nhiều interfaces và nằm trên 2 mạng khác nhau

Giới thiệu cơ bản về Docker Swarm - Ảnh 11.

Docker Swarm Volume

Docker Swarm Volume là nơi chứa tập hợp các data trong cluster và sử dụng nó cho Swarm Cluster thông qua việc bind-mount volume. Tất cả các task sẽ sử dụng data trong volume được mount.

Mặc định thì các volume trong swarm sẽ được đặt ở local. Do vậy các volume trong các node là hoàn toàn tách biệt và Docker hỗ trợ sử dụng các volume plugins sử dụng các phần mềm như GFS, Ceph, NFS nếu người dùng muốn sync data giữa các node. Tất cả các data ở trong local volume sẽ bị mất nếu container hoặc node bị reset.

Giới thiệu cơ bản về Docker Swarm - Ảnh 12.

Giới thiệu cơ bản về Docker Swarm - Ảnh 13.

Nguồn: tech.vcccloud.vn

>> Tìm hiểu thêm: Cài đặt Odoo sử dụng Docker

Kể từ ngày 05/11/2018, VCCloud chính thức đổi tên thành BizFly Cloud - là nhà cung cấp các dịch vụ đám mây hàng đầu tại Việt Nam hiện nay với các dịch vụ nổi bật như: BizFly Cloud Server, BizFly CDN, BizFly Load Balancer, BizFly Pre-built Application, BizFly Business Mail, BizFly Simple Storage. Hãy tăng tốc thích nghi cho doanh nghiệp cùng các giải pháp công nghệ của BizFly Cloud tại đây.