Cách cài đặt Docker Swarm trên Debian 11

theanh

Administrator
Nhân viên
Docker Swarm là một công cụ điều phối container được xây dựng trên Docker Engine. Công cụ này cho phép bạn tạo và triển khai một cụm các nút Docker với nhiều máy chủ. Docker Swarm đơn giản hóa việc triển khai ứng dụng được chứa trong container của bạn trong một dịch vụ. Docker Swarm cung cấp một cách đơn giản và dễ hiểu để quản lý và điều phối các container.

Docker Swarm cung cấp mức độ khả dụng cao cho các ứng dụng. Trong Docker Swarm, bạn có thể chạy một ứng dụng hoặc dịch vụ duy nhất trên nhiều nút được gọi là "nút công nhân". Ngoài ra còn có một nút được gọi là "Swarm Manager" cung cấp khả năng quản lý và điều phối tập trung của Docker Swarm.

Hướng dẫn này chỉ cho bạn cách thiết lập Docker Swarm trên máy chủ Debian 11. Bạn sẽ cài đặt Docker, thiết lập UFW (Uncomplicated Firewall), khởi tạo "Swarm Manager" và thêm "Nodes". Bạn cũng sẽ học cách sử dụng Docker Swarm cơ bản để triển khai ứng dụng.

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

Để hoàn thành hướng dẫn này, bạn sẽ cần nhiều máy chủ Debian 11 và một người dùng không phải root có quyền quản trị viên sudo/root.

Trong phần trình diễn này, chúng tôi sẽ sử dụng ba máy chủ Debian 11 với các thông tin chi tiết sau:
Mã:
Tên máy chủ Địa chỉ IP được sử dụng làm
-------------------------------------
người quản lý 192.168.5.100 Swarm Manager
node1 192.168.5.120 Node
node2 192.168.5.121 Node
Với tất cả các yêu cầu này, bạn đã sẵn sàng để bắt đầu.

Cài đặt Docker​

Kho lưu trữ Debian mặc định cung cấp một gói cho Docker. Tuy nhiên, để đảm bảo rằng bạn đang cài đặt phiên bản Docker mới nhất, bạn sẽ cài đặt Docker thông qua kho lưu trữ Docker chính thức.

Ngoài ra, bạn phải cài đặt Docker trên tất cả các máy chủ Debian của mình.

Trước khi thêm kho lưu trữ, hãy chạy lệnh apt sau để cài đặt một số gói cơ bản. Khi được nhắc xác nhận cài đặt, hãy nhập Y và nhấn ENTER.
Mã:
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y


Sau khi cài đặt các gói cơ bản, hãy thêm khóa GPG cho kho lưu trữ Docker bằng lệnh sau. Với lệnh này, bạn sẽ tạo một thư mục mới "/etc/apt/keyrings" và lưu trữ khóa GPG của kho lưu trữ Docker trong đó.
Mã:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Tiếp theo, thêm kho lưu trữ Docker cho hệ thống Debian Linux bằng lệnh bên dưới.
Mã:
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Bây giờ, hãy cập nhật và làm mới chỉ mục gói của bạn thông qua lệnh apt bên dưới.
Mã:
sudo apt update
Bạn sẽ thấy kho lưu trữ Docker mới đang được cập nhật.



Tiếp theo, cài đặt các gói Docker bằng lệnh apt sau. Bạn sẽ được yêu cầu xác nhận cài đặt, nhập Y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin


Sau khi cài đặt Docker, hãy chạy lệnh sau để bắt đầu và kích hoạt dịch vụ 'docker'. Điều này cho phép 'docker' chạy tự động khi khởi động hệ thống.
Mã:
sudo systemctl start docker
sudo systemctl enable docker
Cuối cùng, hãy xác minh dịch vụ 'docker' thông qua lệnh systemctl bên dưới.
Mã:
sudo systemctl status docker
Nếu dịch vụ 'docker' đang chạy, bạn sẽ thấy đầu ra giống như ảnh chụp màn hình sau:



Ngoài ra, nếu bạn định sử dụng người dùng không phải root cho triển khai của mình, bạn phải thêm người dùng của mình vào 'docker' và cho phép người dùng chạy các vùng chứa Docker.
Mã:
sudo usermod -aG docker user

Thiết lập tường lửa​

Nếu bạn đang triển khai Docker Swarm cho mục đích sản xuất, bạn phải thiết lập tường lửa giữa tất cả các nút. Trong ví dụ này, bạn sẽ sử dụng UFW làm tường lửa mặc định cho máy chủ Debian của mình.

Dưới đây là một số cổng mà bạn phải mở để Docker Swarm hoạt động bình thường:
  • Cổng TCP 2377 để liên lạc quản lý cụm - cổng này được sử dụng nếu bạn có nhiều Swarm Manager.
  • Cổng TCP và UDP 7946 để liên lạc giữa các nút - cho tất cả các nút trên môi trường Swarm.
  • Cổng UDP 4789 để lưu lượng mạng lớp phủ
Cài đặt UFW vào hệ thống Debian của bạn bằng lệnh apt sau.
Mã:
sudo apt install ufw -y
Sau khi UFW được cài đặt, hãy chạy lệnh 'ufw' sau để thêm hồ sơ ứng dụng "OpenSSH". Sau đó, khởi động và bật UFW.

Trong quá trình này, bạn sẽ được yêu cầu xác nhận có chạy và bật tường lửa UFW hay không. Nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo ufw allow "OpenSSH"
sudo ufw enable


Bây giờ hãy chạy lệnh ufw sau để mở một số cổng cho Docker Swarm.
Mã:
sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp
Cuối cùng, hãy xác minh danh sách các quy tắc UFW đã bật trên máy chủ của bạn thông qua lệnh ufw sau. Đảm bảo rằng tất cả các cổng cho Docker Swarm đều được bật và khả dụng trên UFW.
Mã:
sudo ufw status


Lúc này, bạn đã cài đặt Docker và định cấu hình UFW. Tiếp theo, hãy khởi tạo Swarm Manager.

Khởi tạo Swarm Manager​

Swarm Manager là trung tâm của triển khai Docker Swarm. Nó tự quản lý trạng thái của swarm và không giới hạn số lượng các nút quản lý. Triển khai nhiều Swarm Manager sẽ tạo ra một môi trường chịu lỗi.

Swarm Manager là quản lý cụm được tích hợp với docker Engine. Nó cung cấp một mô hình dịch vụ khai báo, khả năng mở rộng dịch vụ, trạng thái mong muốn của các dịch vụ, cân bằng tải và cập nhật liên tục.

Trong ví dụ này, bạn sẽ khởi tạo một nút làm Swarm Manager.

Để khởi tạo Swarm Manager, hãy chạy lệnh docker sau. Trong ví dụ này, Swarm Manager sẽ chạy trên địa chỉ IP 192.168.5.30. Và mạng cho các container trên môi trường Docker Swarm sẽ là 10.20.0.0/16.
Mã:
docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16
Khi Swarm Manager được khởi tạo, bạn sẽ thấy đầu ra sau. Ngoài ra, bạn có thể thấy mã thông báo chi tiết để tham gia Nodes vào trình quản lý Swarm.



Bây giờ, hãy chạy lệnh docker sau để xác minh chế độ Swarm đã được bật.
Mã:
docker info
Trong ảnh chụp màn hình sau, bạn có thể thấy chế độ Swarm là "hoạt động" với nhóm địa chỉ IP là "10.20.0.0/16". Ngoài ra, nút hiện tại có sẵn trên Docker Swarm là "1".



Bạn có thể xác minh danh sách các nút trên Docker Swarm thông qua lệnh docker bên dưới. Bạn sẽ thấy chỉ có một nút trên Docker Swarm hiện tại, đó là Swarm Manager.
Mã:
docker node ls

Thêm Worker Node vào Swarm​

Worker node là nơi các container được thực thi và chạy. Trên nút worker, Docker Engine phải được cài đặt trên mỗi máy chủ và nút worker cũng có thể được thăng cấp thành Swarm Manager.

Để thêm một nút worker, bạn có thể sử dụng lệnh "docker swarm join" theo sau là mã thông báo được tạo khi bạn khởi tạo Swarm Manager.

Thêm cả máy chủ 'node1' và 'node2' vào Docker Swarm thông qua lệnh "docker swarm join" bên dưới. Bạn có thể thay thế mã thông báo bằng mã thông báo đã tạo của mình trong quá trình khởi tạo Trình quản lý bầy đàn.
Mã:
docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377
Khi nút được thêm vào, bạn sẽ nhận được thông báo đầu ra như sau "Nút này đã tham gia bầy đàn với tư cách là một công nhân".

Dưới đây là đầu ra mà bạn sẽ thấy trên cả máy chủ 'node1' và 'node2'.



Ngoài ra, nếu bạn bị mất mã thông báo bầy đàn để tham gia nút công nhân, bạn có thể hiển thị bằng lệnh sau.
Mã:
docker swarm join-token worker
Cuối cùng, quay lại máy chủ "manager" và xác minh danh sách các nút trên môi trường Docker Swarm của bạn thông qua lệnh "docker" bên dưới.
Mã:
docker node ls
Trong ảnh chụp màn hình sau, bạn có thể thấy cả "node1" và "node2" đều được thêm vào Docker Swarm với trạng thái "Ready" và docker engine "20.10.18".



Việc triển khai Docker Swarm đã hoàn tất, giờ bạn có thể triển khai ứng dụng được chứa trong vùng chứa của mình vào Swarm.

Quản lý dịch vụ trên Docker Swarm​

Dịch vụ là thuật ngữ triển khai ứng dụng trên Docker Swarm. Đây là hình ảnh cho các dịch vụ siêu nhỏ của bạn, có thể là máy chủ HTTP, máy chủ cơ sở dữ liệu hoặc các ứng dụng khác sẽ chạy trên Docker Swarm của bạn.

Để thiết lập dịch vụ trong Docker Swarm, bạn phải chỉ định hình ảnh sẽ sử dụng, cổng sẽ được hiển thị và số lượng bản sao.

Sau khi bạn triển khai Docker Swarm, bây giờ bạn sẽ tìm hiểu cách triển khai cơ bản các dịch vụ của mình lên Docker Swarm.

Tạo một dịch vụ mới "test-httpd" thông qua lệnh "docker service create" như bên dưới.

Trong ví dụ này, bạn sẽ tạo một dịch vụ mới "test-httpd" với 1 bản sao và hiển thị cổng "8000" trên nút Swarm. Hình ảnh mà bạn sẽ sử dụng là "httpd:alpine".
Mã:
docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine


Sau khi dịch vụ "test-httpd" đang chạy, hãy xác minh bằng lệnh sau. Bạn sẽ thấy dịch vụ "test-httpd" đang chạy với 1 bản sao và hiển thị cổng TCP 8000.
Mã:
docker service ls


Bây giờ, hãy chạy lệnh sau để kiểm tra chi tiết dịch vụ "test-httpd".
Mã:
docker service inspect test-httpd
docker service inspect --pretty test-httpd
Dưới đây, bạn có thể thấy dịch vụ chi tiết của "test-httpd", bao gồm số lượng bản sao, cổng ngoài, ảnh cơ sở mà bạn đang sử dụng, v.v.



Bạn cũng có thể kiểm tra vùng chứa đang chạy trên dịch vụ "test-httpd" thông qua lệnh "docker service ps" như bên dưới.
Mã:
docker service ps test-httpd
Bạn có thể thấy vùng chứa "test-httpd.1" đang chạy trên máy chủ "manager".



Bây giờ hãy mở cổng "8000" trên tất cả các máy chủ thông qua lệnh ufw bên dưới.
Mã:
sudo ufw allow 8000/tcp
Sau đó, xác minh dịch vụ "test-httpd" bằng lệnh curl như bên dưới. "192.168.5.30" là địa chỉ IP của Swarm Manager và dịch vụ "test-httpd" đang chạy trên cổng 8000.
Mã:
curl 192.168.5.30:8000
curl -I 192.168.5.30:8000
Bạn sẽ thấy trang index.html mặc định của dịch vụ "test-httpd".


Mở rộng dịch vụ trên Docker Swarm​

Bây giờ bạn sẽ tìm hiểu cách mở rộng dịch vụ của mình trên Docker Swarm.

Chạy lệnh sau để mở rộng dịch vụ "test-httpd" thành 3 bản sao.
Mã:
docker service scale test-httpd=3


Bây giờ hãy xác minh vùng chứa đang chạy trên dịch vụ "test-httpd" bằng cách sử dụng lệnh bên dưới. Bạn sẽ thấy ba container khác nhau trên dịch vụ "test-http", đang chạy trên trình quản lý máy chủ, node1 và node2.
Mã:
docker service ps test-httpd


Cuối cùng, hãy chạy lệnh docker sau để xác minh container đang chạy trên máy chủ node1 và node2. Bạn sẽ thấy container có tên "test-httpd.random name" đang chạy trên cả hai máy chủ. Ngoài ra, bạn có thể thấy rằng có thể truy cập container thông qua cổng TCP 8000.

Kiểm tra container trên node1.
Mã:
docker ps
curl node1:8000


Kiểm tra container trên node2.
Mã:
docker ps
curl node2:8000

Xóa dịch vụ trên Docker Swarm​

Bây giờ là lúc dọn dẹp môi trường của bạn bằng cách xóa các dịch vụ bạn đã triển khai lên Docker Swarm.

Chạy lệnh sau để xóa và xóa dịch vụ "test-httpd" khỏi Docker Swarm.
Mã:
docker service rm test-httpd
Sau đó, xác minh dịch vụ "test-httpd" thông qua lệnh "docker service inspect" bên dưới. Bạn sẽ thấy dịch vụ đã bị xóa.
Mã:
docker service inspect test-httpd


Ngoài ra, bạn cũng có thể xác minh thông qua lệnh docker bên dưới để kiểm tra danh sách các container và hình ảnh đang chạy trên Swarm của bạn.

Bạn sẽ thấy container đã bị xóa và hình ảnh httpd:alpine có sẵn trên tất cả các máy chủ.
Mã:
docker ps
docker images

Kết luận​

Trong hướng dẫn này, bạn đã triển khai Docker Swarm với ba máy chủ Debian 11. Bạn cũng đã tìm hiểu về cài đặt cơ bản của Docker Engine trên máy chủ Linux và cấu hình cơ bản của tường lửa UFW trên hệ thống Debian. Và cuối cùng, bạn cũng đã tìm hiểu về triển khai ứng dụng cơ bản lên Docker Swarm thông qua lệnh "docker service".

Từ đây, giờ bạn có thể triển khai các ứng dụng được chứa trong container của mình với tất cả các phụ thuộc vào Docker Swarm. Bạn cũng có thể thêm Swarm Manager để thiết lập tính khả dụng cao cho môi trường Docker Swarm của mình.
 
Back
Bên trên