Cách cài đặt và cấu hình Docker Swarm Cluster trên CentOS 8

theanh

Administrator
Nhân viên
Docker là một công cụ mã nguồn mở có thể được sử dụng để tạo, triển khai và chạy các ứng dụng bằng cách sử dụng một container. Container cho phép bạn đóng gói một ứng dụng với tất cả các phụ thuộc cần thiết và chuyển nó ra ngoài như một gói duy nhất.

Docker Swarm là một công cụ cụm được sử dụng để quản lý máy chủ Docker. Nó cho phép bạn tạo một nhóm các máy chủ Docker thành một máy chủ ảo logic duy nhất. Theo cách này, bạn có thể mở rộng ứng dụng của mình theo chiều ngang và tăng số lượng phiên bản container. Docker swarm cung cấp các tính năng rất hữu ích bao gồm, tự phục hồi container, cân bằng tải, tăng hoặc giảm quy mô container, khám phá dịch vụ và cập nhật liên tục.

Trong bài đăng này, chúng tôi sẽ chỉ cho bạn cách thiết lập cụm Docker Swarm trên CentOS 8.

Điều kiện tiên quyết​

  • Hai máy chủ chạy CentOS 8.
  • Mật khẩu gốc được cấu hình trên mỗi máy chủ.

Cài đặt Docker trên cả hai nút​

Đầu tiên, bạn sẽ cần cài đặt Docker trên cả hai nút. Theo mặc định, phiên bản mới nhất của Docker không được bao gồm trong kho lưu trữ mặc định của CentOS 8. Vì vậy, bạn sẽ cần thêm kho lưu trữ Docker vào hệ thống của mình.

Bạn có thể thêm nó bằng lệnh sau:
Mã:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Sau khi kho lưu trữ Docker được tạo, hãy cài đặt Docker bằng lệnh sau:
Mã:
dnf install docker-ce --nobest
Sau khi cài đặt Docker, hãy khởi động dịch vụ Docker và cho phép nó khởi động khi khởi động lại hệ thống bằng lệnh sau:
Mã:
systemctl start docker
systemctl enable docker
Bạn cũng có thể xác minh trạng thái của Docker bằng lệnh sau:
Mã:
systemctl status docker
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
? docker.service - Docker Application Container Engine Đã tải: đã tải (/usr/lib/systemd/system/docker.service; đã tắt; cài đặt trước của nhà cung cấp: đã tắt) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ sáu 2021-03-12 03:55:24 EST; 6 giây trước Tài liệu: https://docs.docker.com PID chính: 2173 (dockerd) Nhiệm vụ: 8 Bộ nhớ: 44,7M CGroup: /system.slice/docker.service ??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock12-03 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Không thể tích hợp biểu đồ GetDriver btrfs>12-03 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Hạt nhân của bạn không hỗ trợ cgroup bl>12/03 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Hạt nhân của bạn không hỗ trợ cgroup bl>12/03 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Đang tải container: bắt đầu."12/03 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Cầu nối mặc định (docker0) được gán với>12/03 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Đang tải container: xong."12/03 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver>12/03 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon đã hoàn tất khởi tạo"12/03 03:55:24 workernode systemd[1]: Đã khởi động Docker Application Container Engine.12/03 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"
Bây giờ, hãy xác minh phiên bản Docker đã cài đặt bằng lệnh sau:
Mã:
docker --version
Bạn sẽ thấy đầu ra sau:
Mã:
Docker phiên bản 20.10.5, bản dựng 55c4c88

Cấu hình Tường lửa​

Tiếp theo, bạn sẽ cần cho phép các cổng 2376, 2377, 7946 và 80 đi qua tường lửa trên cả hai nút. Bạn có thể cho phép chúng bằng lệnh sau:
Mã:
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp
Tiếp theo, tải lại firewalld để áp dụng các thay đổi:
Mã:
firewall-cmd --reload

Khởi tạo Docker Swarm Cluster​

Tiếp theo, bạn sẽ cần khởi tạo Docker Swarm cluster trên nút quản lý. Bạn có thể thực hiện bằng lệnh sau:
Mã:
docker swarm init --advertise-addr 45.58.32.185
Bạn sẽ nhận được kết quả sau:
Mã:
Bầy đàn đã được khởi tạo: nút hiện tại (cq8xpscsls2ctqhdha8lhdrph) hiện là một trình quản lý.Để thêm một worker vào swarm này, hãy chạy lệnh sau: docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377Để thêm một manager vào swarm này, hãy chạy 'docker swarm join-token manager' và làm theo hướng dẫn.
Bạn có thể sử dụng lệnh hiển thị trong đầu ra ở trên trong nút worker Docker để join nút vào cụm.

Bạn có thể kiểm tra thông tin của cụm Docker Swarm bằng lệnh sau:
Mã:
docker info
Bạn sẽ nhận được đầu ra sau:
Mã:
Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Xây dựng với BuildKit (Docker Inc., v0.5.1-docker)Máy chủ: Container: 0 Đang chạy: 0 Tạm dừng: 0 Đã dừng: 0 Hình ảnh: 0 Phiên bản máy chủ: 20.10.5 Trình điều khiển lưu trữ: overlay2 Hệ thống tệp sao lưu: xfs Hỗ trợ d_type: true Lớp phủ gốc Diff: true Trình điều khiển ghi nhật ký: tệp json Trình điều khiển Cgroup: cgroupfs Phiên bản Cgroup: 1 Plugin: Khối lượng: cục bộ Mạng: cầu nối máy chủ ipvlan macvlan null lớp phủ Nhật ký: awslogs fluentd gcplogs gelf journald tệp json logentries cục bộ splunk syslog Swarm: active NodeID: cq8xpscsls2ctqhdha8lhdrph Is Manager: true ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl Người quản lý: 1 Nút: 1 Nhóm địa chỉ mặc định: 10.0.0.0/8 SubnetSize: 24 Data Path Port: 4789 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 10 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Force Rotate: 0 Autolock Managers: false Root Rotation In Progress: false Node Address: 45.58.32.185 Manager Addresses: 45.58.32.185:2377
Bây giờ bạn có thể xác minh nút Docker Swarm bằng lệnh sau:
Mã:
docker node ls
Bạn sẽ nhận được kết quả sau:
Mã:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE PHIÊN BẢNcq8xpscsls2ctqhdha8lhdrph * masternode Sẵn sàng Hoạt động Leader 20.10.5

Thêm Worker Node vào Docker Swarm Cluster​

Tiếp theo, bạn sẽ cần thêm worker node vào node quản lý Docker Swarm. Bạn có thể thực hiện bằng lệnh sau trên nút worker:
Mã:
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377
Bạn sẽ nhận được kết quả sau:
Mã:
Nút này đã tham gia vào một nhóm với tư cách là một worker.
Trên nút Docker Manager, hãy xác minh nút worker bằng lệnh sau:
Mã:
docker node ls
Bạn sẽ thấy nút worker được thêm vào Docker Swarm:
Mã:
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5bipfv8sfm94a9po0uame5rd1n workernode Sẵn sàng Hoạt động 20.10.5

Khởi chạy dịch vụ trong Docker Swarm​

Tại đây, chúng ta sẽ tạo một dịch vụ web Nginx mới và mở rộng quy mô với hai vùng chứa. Bạn có thể tạo nó bằng cách chạy lệnh sau trên nút Manager:
Mã:
docker service create -p 80:80 --name webservice --replicas 2 nginx
Bạn sẽ nhận được kết quả sau:
Mã:
agyxlaswxakrbboakkyydsh0ktiến độ chung: 2 trong số 2 tác vụ1/2: đang chạy [========================================================>]2/2: đang chạy [=========================================================>]verify: Dịch vụ đã hội tụ
Bây giờ bạn có thể kiểm tra dịch vụ web bằng lệnh sau lệnh:
Mã:
docker service ls
Bạn sẽ thấy kết quả sau:
Mã:
ID NAME MODE REPLICAS IMAGE PORTSagyxlaswxakr webservice replicated 2/2 nginx:latest *:80->80/tcp
Bạn cũng có thể kiểm tra container đang chạy bằng lệnh sau:
Mã:
docker ps
Bạn sẽ thấy kết quả sau:
Mã:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc887cad1df2e nginx:latest "/docker-entrypoint.…" 32 giây trước Lên 30 giây 80/tcp webservice.2.jelyj9gmeb7ikl2scg7mz8yg8
Để biết thông tin chi tiết về webservice, hãy chạy lệnh sau:
Mã:
docker service ps webservice
Bạn sẽ thấy đầu ra sau:
Mã:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSeye9zukwwrkq webservice.1 nginx:latest workernode Đang chạy Đang chạy 3 phút trướcjelyj9gmeb7i webservice.2 nginx:latest masternode Đang chạy Đang chạy 3 phút trước

Xác minh Docker Swarm​

Tại thời điểm này, chúng tôi đã triển khai một vùng chứa Nginx trên các nút cụm bao gồm nút quản lý. Bây giờ bạn có thể truy cập máy chủ web Nginx của mình bằng bất kỳ địa chỉ IP nào của nút Worker hoặc nút Manager:


Kết luận​

Trong hướng dẫn trên, bạn đã học cách thiết lập cụm Docker Swarm trên CentOS 8. Bây giờ bạn có thể thêm bất kỳ số lượng nút công nhân nào vào cụm Docker Swarm và mở rộng ứng dụng của mình.
 
Back
Bên trên