Argo CD 是什么
Argo CD 是 Kubernetes 上的 GitOps 持续部署控制器:把集群期望状态放进 Git 仓库,它持续对比期望与实际,并按策略同步。发布等价于合并 Git 变更,回滚等价于回到上一个提交。与 CI 解耦:CI 只负责产出镜像并更新清单仓库里的版本号,集群侧由 Argo CD 写入。清单本身可以是 Helm Chart、Kustomize 或纯 YAML 目录。
基本信息
| 模型 | Git 仓库为期望状态的唯一来源 |
|---|---|
| 同步 | 手动或自动(automated,含 selfHeal 与 prune) |
| 回滚 | 选历史版本回退或 revert 提交 |
| 观察 | 应用树展示资源层级、同步与健康状态 |
| 健康 | 聚合各资源的健康状态供值班一眼判断 |
典型使用场景
- 清单仓库模式:应用清单与代码仓分离,环境差异用 overlays 表达
- 自动纠偏:手工改集群被 selfHeal 还原,集群状态回归 Git
- 多环境多集群:同一套清单按目录部署到 dev/prod 等目标
- 回滚:history 选择历史版本回退,或回退 Git 提交再同步
- 权限收敛:集群只允许 Argo CD 写入,人走 Git 评审流程
Application 资源
Application 资源
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata: {name: web, namespace: argocd}
spec:
project: default
source:
repoURL: https://git.example.com/ops/web.git
targetRevision: main # 跟踪分支或标签
path: overlays/prod # 环境对应目录
destination:
server: https://kubernetes.default.svc
namespace: prod
syncPolicy:
automated:
prune: true # 删除已从 Git 移除的资源
selfHeal: true # 偏差自动纠偏同步状态读法
| 状态 | 含义 | 处理 |
|---|---|---|
| Synced | 集群与 Git 一致 | 无需动作 |
| OutOfSync | 存在偏差 | 先看 diff 再决定同步或改 Git |
| Progressing | 正在同步中 | 观察是否推进,卡住查资源事件 |
| Degraded | 资源不健康 | 看应用树定位到具体对象 |
| Unknown | 无法获取状态 | 检查集群连通与权限 |
开启自动同步与 prune 后直接改集群会被纠偏:紧急手工修改要回写 Git 或临时停止自动同步,否则改动会被还原甚至被 prune 删除。
CI 与 CD 分工写清楚:CI 只推镜像并更新清单仓库,部署动作全部交给 Argo CD,避免两边同时写集群。
清单仓库同样走 PR 评审:targetRevision 跟踪分支或标签都行,关键是把「谁能改清单」与代码仓同等管控。