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ớivalues.yamlschema 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-enginecầ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