同步、健康检查与漂移治理
同步策略决定 Argo CD 如何把 Git 期望状态变成集群状态。生产环境应先用手工同步验证,再将自动化能力按风险分级启用;Prune、Self Heal 和级联删除都可能造成真实资源变更。
1. 手工同步与状态验证
# 查看 Git revision、OutOfSync 资源和健康状态
argocd app get user-center-prod
# 同步并显示具体资源操作;首次发布建议在变更窗口执行
argocd app sync user-center-prod
# 等待同步完成且资源健康
argocd app wait user-center-prod --sync --health --timeout 600
Synced 只表示声明差异已消除;Deployment、Job、Ingress 或自定义资源仍可能不健康,因此发布流水线必须同时等待 --health。
2. 自动同步、Prune 与 Self Heal
spec:
syncPolicy:
automated:
# Git 删除受管资源后,允许 Argo CD 删除集群中的对应资源
prune: true
# 集群中的手工修改会被恢复为 Git 声明
selfHeal: true
syncOptions:
# 仅在 Project 已限制目标 Namespace 后使用
- CreateNamespace=true
prune: true适合资源归属清晰的应用;共享资源、PVC、CRD 和数据库迁移需要单独评估。selfHeal: true能减少配置漂移,但会覆盖紧急手工调整;止血流程必须包含“写回 Git”。CreateNamespace=true仅创建 Namespace,不能替代 NetworkPolicy、Quota、RBAC 等基线。
3. Hooks 与 Sync Waves
Hook 用于迁移、预检和清理,Sync Wave 用于声明资源间顺序。二者只处理明确的依赖,不应代替应用自身的重试与幂等设计。
apiVersion: batch/v1
kind: Job
metadata:
name: schema-migrate
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/sync-wave: "-1"
argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
template:
spec:
restartPolicy: Never
containers:
- name: migrate
image: registry.example.com/platform/migrate:1.2.0
迁移 Job 必须可重试、可观测且支持失败停止。不要让 PreSync Hook 在失败后继续执行会破坏兼容性的部分迁移。
4. 回滚与漂移处置
优先回退 Git 提交或环境目录中的镜像版本,再同步 Application。argocd app rollback 依赖 Argo CD 的历史记录,适合紧急恢复,但事后仍要让 Git 回到一致状态。
# 查看 Argo CD 记录的部署历史
argocd app history user-center-prod
# 紧急回滚到指定历史 ID,随后应提交等效的 Git 回退
argocd app rollback user-center-prod <history-id>