跳到主要内容

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,再按变更流程确认同步结果
不要把 default Project 当作生产隔离边界

default Project 通常过于宽松。生产应用应使用专用 AppProject,限制允许的仓库、目标集群、Namespace 与资源类型,详见“项目与 RBAC”章节。