Quay lại danh sách
Tin tức công nghệ

Cấu hình GitOps cho hạ tầng Docker Swarm sử dụng ArgoCD và Vault để tự động hóa đồng bộ ứng dụng

3 tháng 6, 2026

Đặt vấn đề: Thách thức quản lý hạ tầng Docker Swarm truyền thống

Trong kỷ nguyên Cloud Native, Docker Swarm vẫn là một lựa chọn phổ biến cho các doanh nghiệp vừa và nhỏ nhờ vào tính đơn giản, dễ vận hành và hiệu năng cao. Tuy nhiên, khi hệ thống mở rộng, việc quản lý cấu hình và triển khai ứng dụng bằng các câu lệnh thủ công như docker stack deploy bắt đầu bộc lộ nhiều hạn chế. Rủi ro sai lệch cấu hình (configuration drift), thiếu cơ chế kiểm toán (audit trail) và khó khăn trong việc khôi phục hệ thống (disaster recovery) là những thách thức lớn đối với đội ngũ vận hành.

Để giải quyết bài toán này, mô hình GitOps nổi lên như một tiêu chuẩn vàng, biến Git thành nguồn thông tin đáng tin cậy duy nhất (Single Source of Truth) cho cả mã nguồn và hạ tầng. Bài viết này sẽ hướng dẫn bạn cách thiết lập một luồng GitOps hoàn chỉnh cho Docker Swarm bằng cách kết hợp ArgoCD (để đồng bộ trạng thái) và HashiCorp Vault (để quản lý bảo mật thông tin nhạy cảm).

Kiến trúc tổng quan: Khi GitOps gặp gỡ Docker Swarm

Mặc dù ArgoCD vốn được thiết kế riêng cho môi trường Kubernetes, chúng ta hoàn toàn có thể tận dụng sức mạnh của nó để quản lý hạ tầng Docker Swarm thông qua cơ chế Agent hoặc các Custom Controller (như argocd-vault-plugin kết hợp với các bộ chuyển đổi API). Kiến trúc hệ thống bao gồm ba thành phần cốt lõi:

  • Git Repository (Source of Truth): Nơi lưu trữ toàn bộ các file định nghĩa dịch vụ (Docker Compose, Stack files) và cấu hình môi trường.
  • ArgoCD (GitOps Controller): Liên tục giám sát kho lưu trữ Git. Khi phát hiện thay đổi, ArgoCD sẽ tự động tính toán sự khác biệt và kích hoạt quy trình đồng bộ hóa xuống cụm Docker Swarm.
  • HashiCorp Vault (Secret Management): Lưu trữ tập trung các thông tin nhạy cảm như Database Credentials, API Keys, SSL Certificates. Các thông tin này sẽ được tiêm (inject) vào ứng dụng một cách an toàn trong quá trình đồng bộ mà không bao giờ bị lộ trên Git.

Bước 1: Chuẩn bị kho lưu trữ Git và cấu hình Docker Swarm

Để bắt đầu, bạn cần tổ chức cấu trúc thư mục Git một cách khoa học để quản lý nhiều môi trường (Staging, Production). Một cấu trúc chuẩn hóa thường có dạng:

my-swarm-gitops/
├── apps/
│ ├── web-app/
│ │ ├── docker-compose.yml
│ │ └── values.yaml
├── infrastructure/
│ └── ingress-nginx.yml
└── argocd/
└── application.yml

Trong file docker-compose.yml, thay vì fix cứng các giá trị nhạy cảm, chúng ta sẽ sử dụng các biến môi trường dạng placeholder để chuẩn bị cho việc tích hợp với Vault ở bước sau:

version: '3.8'
services:
web:
image: myregistry.azurecr.io/app:v1.2.0
environment:
- DB_PASSWORD=
ports:
- "8080:8080"
deploy:
replicas: 3
restart_policy:
condition: on-failure

Bước 2: Triển khai và cấu hình HashiCorp Vault

Bảo mật luôn là ưu tiên hàng đầu trong môi trường doanh nghiệp. Chúng ta cần khởi tạo một instance Vault độc lập hoặc chạy ngay trong Swarm để lưu trữ secrets. Sau khi khởi tạo, tiến hành tạo một secret kiểm thử bằng Vault CLI:

  1. Bật tính năng lưu trữ Key-Value (KV v2): vault secrets enable -path=secret kv-v2
  2. Ghi dữ liệu bảo mật: vault kv put secret/production/database password="SuperSecretP@ssw0rd"
  3. Tạo một AppRole hoặc Token với quyền hạn hạn chế (Read-only) để ArgoCD có thể truy cập và lấy dữ liệu này ra trong quá trình triển khai.

Bước 3: Thiết lập ArgoCD làm Trung tâm điều phối (GitOps Controller)

Vì ArgoCD chạy trên Kubernetes, bạn có thể thiết lập một cụm K3s/K8s nhỏ làm môi trường quản trị (Management Cluster) chuyên trách điều phối các cụm Docker Swarm vệ tinh, hoặc sử dụng công cụ bắc cầu API. Để tích hợp Vault vào ArgoCD, chúng ta sử dụng ArgoCD Vault Plugin (AVP).

Cấu hình một ConfigManagementPlugin trong ArgoCD để nhận diện các placeholder dạng trong file Compose và tự động thay thế bằng giá trị thật từ Vault trước khi render ra file cấu hình cuối cùng:

apiVersion: argoproj.io/v1alpha1
kind: ConfigManagementPlugin
metadata:
name: argocd-vault-plugin
spec:
generate:
command: ["argocd-vault-plugin", "generate", "."]

Khi có sự thay đổi được commit lên nhánh main của Git, ArgoCD sẽ nhận biết, gọi đến Vault thông qua AppRole để giải mã các secrets, sau đó thông qua Docker SSH hoặc Docker Context API để thực thi lệnh nâng cấp dịch vụ trên cụm Swarm một cách mượt mà mà không làm gián đoạn hệ thống (Zero-downtime rolling update).

Bước 4: Tự động hóa luồng đồng bộ (The Sync Workflow)

Quy trình vận hành chuẩn chỉnh sau khi cấu hình thành công hệ thống GitOps sẽ diễn ra hoàn toàn tự động theo các bước sau:

  • Bước 4.1: Lập trình viên thay đổi mã nguồn, CI pipeline build image mới và push lên Container Registry, đồng thời cập nhật tag image mới vào file docker-compose.yml trên Git.
  • Bước 4.2: ArgoCD phát hiện sự sai lệch giữa Git (Trạng thái mong muốn - Desired State) và Docker Swarm (Trạng thái thực tế - Actual State).
  • Bước 4.3: ArgoCD kích hoạt plugin Vault để lấy mã thông báo và nạp các biến môi trường mật vào cấu hình.
  • Bước 4.4: Hệ thống thực hiện lệnh đồng bộ, áp dụng cấu hình mới xuống Docker Swarm bằng cơ chế cuốn chiếu (Rolling Update). Trạng thái hệ thống trở về mức cân bằng và được giám sát liên tục.

Lợi ích vượt trội cho doanh nghiệp

Việc áp dụng combo Docker Swarm + ArgoCD + Vault mang lại những bước tiến lớn cho năng suất của đội ngũ kỹ sư:

  • Khả năng phục hồi thảm họa tức thì: Nếu cụm Docker Swarm gặp sự cố vật lý, bạn chỉ cần dựng một cụm mới và trỏ ArgoCD về Git, toàn bộ hạ tầng sẽ được tái lập chính xác trong vài phút.
  • Bảo mật tối đa: Loại bỏ hoàn toàn tình trạng lộ lọt secret do vô tình commit file cấu hình chứa mật khẩu lên GitHub/GitLab.
  • Kiểm soát thay đổi (Auditing): Mọi hành động thay đổi hạ tầng đều phải thông qua Pull Request, giúp dễ dàng theo dõi ai đã thay đổi cái gì, vào lúc nào và tại sao.

Lời kết

Xây dựng kiến trúc GitOps cho Docker Swarm bằng ArgoCD và Vault là một giải pháp thông minh, giúp doanh nghiệp tận dụng tối đa hạ tầng hiện có mà vẫn đạt được các tiêu chuẩn vận hành tiên tiến của Kubernetes. Đây là bước đệm hoàn hảo để chuẩn bị cho lộ trình chuyển dịch lên các hệ thống lớn hơn trong tương lai mà không làm đứt gãy luồng công việc của đội ngũ phát triển.

Cấu hình GitOps cho hạ tầng Docker Swarm sử dụng ArgoCD và Vault để tự động hóa đồng bộ ứng dụng | DPTCloud