argo cd 实现 gitops 的核心是集群主动拉取 git 变更并自动对齐状态。需安装控制平面、配置 git 仓库与 application cr、启用 automated sync(含 selfheal 和 prune)、通过 ui/cli 验证同步与回滚。

在 Linux 环境中用 Argo CD 实现 GitOps 自动化持续交付,核心是让 Kubernetes 集群“只认 Git”——所有部署、更新、回滚都源于 Git 仓库的变更,集群状态由 Argo CD 持续比对并自动对齐。这不是脚本推送,而是集群主动拉取、判断、修复的过程。
一、安装与初始化 Argocd
Argo CD 本身运行在目标 Kubernetes 集群内,需先部署其控制平面:
- 使用官方 manifest 安装:
kubectl create namespace argocd && kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.5/manifests/install.yaml - 等待所有 Pod 运行就绪(特别是
argocd-server、argocd-application-controller、argocd-repo-server) - 暴露 Web UI:推荐用 port-forward(开发/测试)或 Ingress(生产),例如:
kubectl port-forward svc/argocd-server -n argocd 8080:443 - 首次登录需获取初始密码:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
二、配置 Git 仓库与应用声明
Git 仓库是唯一事实源,结构建议清晰分层,例如:
-
apps/:存放各应用的 Argo CD Application CR(YAML),定义同步路径、目标集群、策略等 -
environments/production/:存放该环境的 Kustomize 基线或 Helm values -
clusters/prod-cluster/:可选,用于多集群场景下隔离资源配置
创建一个 Application 示例(如 apps/my-app-prod.yaml):
Conventional Commits v1.0.0 分支、工作树命名及提交信息规范,适用于 GitHub 与 GitLab 项目,用于创建分支和命名工作树等场景。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-prod
namespace: argocd
spec:
project: default
source:
repoURL: https://git.example.com/my-org/my-app.git
targetRevision: main
path: manifests/prod # 指向集群期望状态的 YAML 目录
destination:
server: https://kubernetes.default.svc # 同集群;跨集群填实际 API Server 地址
namespace: my-app
syncPolicy:
automated:
selfHeal: true # 人为改动集群资源后自动恢复
prune: true # 删除 Git 中已移除的资源
三、启用自动同步与状态对齐
Argo CD 默认不自动同步,需显式开启:
- 通过 CLI:
argocd app set my-app-prod --sync-policy automated - 通过 Web UI:进入应用详情页 → ⚙️ Settings → Sync Policy → 勾选 “Automatically sync when changes detected”
- 关键参数说明:
selfHeal确保集群被手动修改后自动纠正;prune防止资源残留,两者共同保障“Git 即真实状态”
同步触发时机:Repo Server 检测到 Git commit 更新(默认每 3 分钟轮询一次,可调)→ Controller 计算 diff → 执行 kubectl apply 或 delete。
四、验证与可观测性
对齐不是黑盒,所有动作都可查、可溯、可干预:
- Web UI 中每个应用显示 Health(健康)、Sync(同步)状态,点击进入可查看资源树、实时 diff、同步历史
- 命令行快速检查:
argocd app get my-app-prod显示当前状态;argocd app diff my-app-prod查看待同步差异 - 回滚只需一条命令:
argocd app rollback my-app-prod <revision></revision>,本质是 git checkout + sync - 日志与审计:Controller 和 Repo Server 的日志记录每次 sync 的 commit hash、资源变更、执行结果,天然支持安全审计










