1. Khái niệm Stack trong Docker Swarm
- Stack: Tập hợp nhiều dịch vụ (services) liên kết với nhau được định nghĩa thông qua file Docker Compose (
docker-compose.yml). - Cho phép quản lý và triển khai ứng dụng đa dịch vụ (multi-service application) trên toàn bộ cụm Docker Swarm Cluster.
- Yêu cầu cấu hình Docker Compose File version 3 trở lên (
version: "3").
2. Mô hình ứng dụng Prometheus Monitoring Stack
Cấu trúc thư mục dự án:
swarm/prometheus/
├── docker-compose.yml
└── prometheus.yml
prometheus.yml: Tệp cấu hình Prometheus (khai báo IP private của các Swarm Node để thu thập metrics).docker-compose.yml: Định nghĩa 4 dịch vụ cốt lõi:- Prometheus: Hệ thống lưu trữ và truy vấn metrics.
- cAdvisor: Thu thập thông số hiệu năng của container.
- Node Exporter: Thu thập thông số tài nguyên hệ điều hành host.
- Grafana: Giao diện trực quan hóa dữ liệu (Dashboard).
3. Các bước triển khai chi tiết
3.1. Tạo thư mục và cấu hình Prometheus
mkdir -p swarm/prometheus
cd swarm/prometheus
vi prometheus.yml
Lưu ý: Cập nhật danh sách địa chỉ IP private của Manager và Worker Node trong file prometheus.yml.
3.2. Cấu hình Docker Compose File
vi docker-compose.yml
Cấu hình Port mappings:
- Prometheus:
8080:9090 - Grafana:
8082:3000 - cAdvisor: Sử dụng cổng mặc định
3.3. Kiểm tra cổng kết nối (Port Conflict)
docker container ls
docker service ls
3.4. Dọn dẹp dịch vụ cũ (nếu có)
docker service rm <service_id>
3.5. Thực thi lệnh triển khai Stack
docker stack deploy --compose-file docker-compose.yml prometheus
3.6. Kiểm tra trạng thái Stack & Service
docker stack ls
docker service ls
4. Xử lý lỗi phân quyền (Permission Issue) với Prometheus
Do container Prometheus chạy mặc định dưới tài khoản nobody, cần cấp quyền sở hữu volume dữ liệu:
sudo chown -R nfsnobody:nfsnobody /var/lib/docker/volumes/prometheus_data
sudo chown nfsnobody:nfsnobody prometheus.yml
5. Truy cập & Kiểm thử Dịch vụ
| Dịch vụ | URL truy cập |
|---|---|
| Prometheus UI | http://<PUBLIC_IP>:8080 |
| Grafana UI | http://<PUBLIC_IP>:8082 |
6. Tổng kết các lệnh quản lý Docker Stack
| Mục đích | Câu lệnh |
|---|---|
| Danh sách Stack | docker stack ls |
| Danh sách Services | docker service ls |
| Xem Tasks trong Stack | docker stack ps <stack_name> |
| Xóa Stack | docker stack rm <stack_name> |
7. Tổng kết
- Docker Stack giúp đơn giản hóa việc quản lý ứng dụng đa dịch vụ trên Swarm Cluster chỉ với một tệp compose.
- Luôn kiểm tra phân quyền sở hữu Volume khi sử dụng các image yêu cầu tài khoản không có quyền root.