Argo CD 实现 GitOps 的核心是集群主动拉取 Git 变更并自动对齐状态。需安装控制平面、配置 Git 仓库与 Application CR、启用 automated sync(含 selfHeal 和 prune)、通过 UI/CLI 验证同步与回滚。
在 Linux 环境中用 Argo CD 实现 GitOps 自动化持续交付,核心是让 Kubernetes 集群“只认 Git”——所有部署、更新、回滚都源于 Git 仓库的变更,集群状态由 Argo CD 持续比对并自动对齐。这不是脚本推送,而是集群主动拉取、判断、修复的过程。
Argo CD 本身运行在目标 Kubernetes 集群内,需先部署其控制平面:
kubectl create namespace argocd && kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.5/manifests/install.yaml
argocd-server、argocd-application-controller、argocd-repo-server)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 仓库是唯一事实源,结构建议清晰分层,例如:
apps/:存放各应用的 Argo CD Application CR(YAML),定义同步路径、目标集群、策略等environments/production/:存放该环境的 Kustomize 基线或 Helm valuesclusters/prod-cluster/:可选,用于多集群场景下隔离资源配置创建一个 Application 示例(如 apps/my-app-prod.yaml):
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:name: my-app-prodnamespace: argocdspec:project: defaultsource:repoURL: https://git.example.com/my-org/my-app.gittargetRevision: mainpath: manifests/prod# 指向集群期望状态的 YAML 目录destination:server: https://kubernetes.default.svc# 同集群;跨集群填实际 API Server 地址namespace: my-appsyncPolicy:automated:selfHeal: true # 人为改动集群资源后自动恢复prune: true# 删除 Git 中已移除的资源
Argo CD 默认不自动同步,需显式开启:
argocd app set my-app-prod --sync-policy automated
selfHeal确保集群被手动修改后自动纠正;prune防止资源残留,两者共同保障“Git 即真实状态”同步触发时机:Repo Server 检测到 Git commit 更新(默认每 3 分钟轮询一次,可调)→ Controller 计算 diff → 执行 kubectl apply 或 delete。
对齐不是黑盒,所有动作都可查、可溯、可干预:
argocd app get my-app-prod 显示当前状态;argocd app diff my-app-prod 查看待同步差异argocd app rollback my-app-prod <revision>,本质是 git checkout + sync