ArcLibrary

Argo CD(GitOps 部署)

把 K8s 集群状态绑到 git 仓库 —— 改 yaml 即改集群。

Argo CDGitOpsK8s
核心 · Key Idea

一句话:Argo CD 监听 git 仓库里的 K8s manifest(裸 yaml / Helm / Kustomize),持续同步到集群。git push 即部署,集群手改的会被检测到 / 自动恢复 —— 声明式 GitOps 范式。

是什么#

# Application 自身也是一份 yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/me/infra
    path: apps/web
    targetRevision: main
    helm:
      valueFiles: [values-prod.yaml]
  destination:
    server: https://kubernetes.default.svc
    namespace: prod
  syncPolicy:
    automated: { prune: true, selfHeal: true }
    syncOptions: ["CreateNamespace=true"]

之后 git push 改 values → Argo CD 几秒内同步到集群。

打个比方#

打个比方 · Analogy

没有 Argo CD = 部署像带锤子上集群:人工敲 kubectl,手感全凭运气。
有 Argo CD = 集群自带搬运机器人,盯着 git 仓库,仓库一变就整理出和仓库一致的状态

关键概念#

Application应用
一组 K8s 资源 + 来源 git 路径 + 目标集群命名空间。
AppProject项目
一组应用 + RBAC + 允许的源仓 / 目标集群限制。
Sync Policy同步策略
manual / automated;automated 又分 prune(删除不在 git 的资源)和 selfHeal(手改自动恢复)。
Drift漂移
集群与 git 不一致。Argo 用 OutOfSync 标识。
Hook同步钩子
PreSync / PostSync / SyncFail —— 用于跑迁移、通知等。
ApplicationSet动态生成应用
用 Generators(Git / List / Cluster)一次声明出多套 Application。
Argo Rollouts渐进式发布
扩展项目,支持 Canary / 蓝绿 / 流量切换 —— 替代 Deployment。

工作流#

实操要点#

  • GitOps 黄金法则集群是只读的。所有改动都从 git 进 → CI 校验 → ArgoCD apply。
  • 结构推荐:一个仓库管 platform(CRD / 集群级),另一个仓管 apps;或 monorepo 用目录隔离。
  • Helm + Kustomize 都支持:复杂场景 helmfile / helm-include / kustomize 选你顺手的。
  • App of Apps:一个 Application 引用 N 个 Application,根 yaml 引导整个集群。
  • 多集群:一个 ArgoCD 管多个目标集群(destination.server 不同 secret)。
  • 审批 / 上线门:用 ApplicationSet + sync windows 限定生产部署时间。
  • 机密:sealed-secrets / external-secrets / SOPS —— git 里只放密文。
  • 回滚argocd app rollback web 或直接 git revert。

易混点#

Argo CD(GitOps)
集群拉,**永远以 git 为准**。
自动检测漂移、自愈。
GitHub Actions deploy 步骤
流水线 push,**事件驱动**。
一次性,没了状态守恒概念。

延伸阅读#