Application 应用声明与交付
Application 是 Argo CD 的核心交付对象:它声明从哪里读取期望状态、如何渲染、部署到哪个集群和 Namespace,以及允许采取哪些同步动作。将 Application YAML 自身也纳入 Git,才能让应用登记过程可审阅和可重建。
1. 最小生产示例
以下示例先使用手工同步。确认仓库、Namespace、健康检查都符合预期后,再评估是否开启自动同步。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: user-center-prod
namespace: argocd
# 仅在明确需要删除应用时级联删除其资源时才保留此 finalizer
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: production
source:
repoURL: https://git.example.com/platform/app-config.git
targetRevision: main
path: apps/user-center/overlays/prod
destination:
server: https://kubernetes.default.svc
namespace: user-center
# 提交前先在 Git 中审核 Application;应用到 Argo CD 控制面
kubectl apply -n argocd -f user-center-prod.yaml
# 查看同步、健康、仓库 revision 与目标地址
argocd app get user-center-prod
targetRevision: main 适用于持续交付分支;若需要更强可追溯性,可使用不可变 Git tag 或提交 SHA。生产环境不要把开发分支直接作为生产目标。
2. 目标与路径边界
source.path 只应指向当前环境的清单根目录,避免一个 Application 意外接管仓库中无关资源。destination.namespace 是默认 Namespace,不会阻止清单显式写入其它 Namespace;必须通过 AppProject 的 destination 和资源白名单建立真正边界。
# 手工同步,适合首次发布与变更窗口
argocd app sync user-center-prod
# 等待同步完成且资源达到 Healthy;超时视为发布失败
argocd app wait user-center-prod --sync --health --timeout 600
3. 删除与 finalizer
带 resources-finalizer.argocd.argoproj.io 的 Application 被删除时,会级联删除它管理的工作负载。对于生产数据库、共享 Namespace 或迁移中的应用,删除前必须确认资源归属与数据备份。
# 先预览该应用管理的资源,再决定是否允许删除
argocd app resources user-center-prod
# 生产删除应由 Git PR 移除 Application,再按变更流程确认同步结果