Bỏ qua

ADR-0001: ArgoCD ApplicationSet theo nhóm runtime, 1 file/service trong envs/

  • Status: Accepted
  • Date: ~2026-06-27 (backfilled 2026-07-25)
  • Supersedes: —
  • Superseded by: —

Bối cảnh

Có 11 service (6 NestJS + 1 chatbot + 4 Go) cần deploy lên cùng namespace football-booking. Quản lý 11 ArgoCD Application CRD riêng lẻ, thủ công tạo từng cái, sẽ tốn công và dễ quên khi thêm service mới.

Quyết định

Dùng 3 ArgoCD ApplicationSet theo nhóm runtime (applicationset-backend.yaml, applicationset-chatbot.yaml, applicationset-go-services.yaml), mỗi ApplicationSet generator quét 1 file YAML/service trong envs/production/<group>/*.yaml. Thêm service mới = thêm 1 file trong envs/, không cần sửa ApplicationSet.

Lựa chọn khác đã cân nhắc

  • 1 Application CRD/service, tạo tay: đơn giản để hiểu lúc mới, nhưng không scale khi thêm service — mỗi lần thêm phải nhớ tạo cả Application lẫn Helm values — loại.
  • 1 ApplicationSet duy nhất cho cả 11 service: giảm số file ApplicationSet, nhưng 3 nhóm runtime dùng 3 chart khác nhau (backend-service/python-service/go-service) với values.yaml schema khác nhau — 1 generator chung sẽ phải xử lý logic rẽ nhánh phức tạp — loại, tách theo runtime cho generator đơn giản hơn.

Hệ quả

  • Được: thêm service mới chỉ cần 1 file YAML mới, không sửa ApplicationSet; rõ ràng nhóm nào dùng chart nào.
  • Đánh đổi: 3 chart dùng chung (charts/backend-service, charts/python-service, charts/go-service) phải giữ tương thích với mọi service trong nhóm — 1 service có nhu cầu đặc thù (vd: availability-engine cần WebSocket ingress riêng) phải thêm field optional vào chart chung thay vì tự do tuỳ biến.

Liên kết

  • Docs liên quan: README.md (mục Repository Structure, How It Works), docs/argocd-guide.md