SuperAPI AI 工具集

gitops-workflow

部署与运维

查看项目

更新于 10-16 10:09

技能介绍

GitOps Workflow 是一份完整指南,用于使用 ArgoCD 和 Flux 实现自动化的 Kubernetes 部署,遵循 OpenGitOps 原则。

用途 使用 ArgoCD 或 Flux CD 为 Kubernetes 实现声明式、基于 Git 的持续交付,遵循 OpenGitOps 原则。

适用场景 为 Kubernetes 集群搭建 GitOps;从 Git 自动化应用部署;实施渐进式交付策略;管理多集群部署;配置自动同步策略;在 GitOps 中设置密钥管理。

不适用场景 需要一次性手动部署;无法管理集群访问或仓库权限;并非部署到 Kubernetes。

操作步骤 定义仓库布局与期望状态约定;安装 ArgoCD 或 Flux 并连接集群;配置同步策略、环境与发布流程;验证回滚与密钥处理。

安全 避免未经审批即自动同步到生产环境;将密钥排除在 Git 之外,使用 sealed 或外部密钥管理器。

OpenGitOps 原则 声明式——整个系统以声明方式描述;版本化且不可变——期望状态存储在 Git;自动拉取——软件代理拉取期望状态;持续协调——代理对实际状态与期望状态进行协调。

ArgoCD 设置

  1. 安装:创建命名空间 kubectl create namespace argocd;安装 ArgoCD kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml;获取管理员密码 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d。详细设置见 references/argocd-setup.md。
  2. 仓库结构:gitops-repo/ 下包含 apps/(production、staging 等环境下的应用)、infrastructure/(ingress-nginx、cert-manager、monitoring)以及 argocd/(applications、projects)。
  3. 创建 Application:通过 argocd/applications/my-app.yaml 定义 Application 资源,包含 project、source(repoURL、targetRevision、path)、destination(server、namespace)以及 syncPolicy(automated: prune、selfHeal;syncOptions: CreateNamespace=true)。
  4. App of Apps 模式:定义一个名为 applications 的 Application,其 source 指向 argocd/applications 路径,用于组织管理多个应用。

Flux CD 设置

  1. 安装:安装 Flux CLI curl -s https://fluxcd.io/install.sh | sudo bash;引导 Flux flux bootstrap github --owner=org --repository=gitops-repo --branch=main --path=clusters/production --personal。
  2. 创建 GitRepository:定义 source.toolkit.fluxcd.io/v1 类型的 GitRepository,包含 interval、url、ref(branch)。
  3. 创建 Kustomization:定义 kustomize.toolkit.fluxcd.io/v1 类型的 Kustomization,包含 interval、path、prune、sourceRef。

同步策略 ArgoCD 自动同步可配置 prune(删除 Git 中不存在的资源)、selfHeal(协调手动更改)、allowEmpty,以及 retry(limit、backoff 的 duration、factor、maxDuration)。Flux 可配置 interval、prune、wait、timeout。详见 references/sync-policies.md。

渐进式交付 ArgoCD Rollouts 金丝雀部署:定义 Rollout 资源,replicas 与 strategy.canary.steps(setWeight 20、pause 1m、setWeight 50、pause 2m、setWeight 100)。蓝绿部署:strategy.blueGreen 配置 activeService、previewService、autoPromotionEnabled。

密钥管理 External Secrets Operator:定义 ExternalSecret,包含 refreshInterval、secretStoreRef、target、data 及 remoteRef.key。Sealed Secrets:使用 kubeseal --format yaml < secret.yaml > sealed-secret.yaml 加密密钥,并将 sealed-secret.yaml 提交到 Git。

最佳实践 为不同环境使用独立仓库或分支;为 Git 仓库实施 RBAC;启用同步失败通知;为自定义资源使用健康检查;为生产环境实施审批门禁;将密钥排除在 Git 之外(使用 External Secrets);使用 App of Apps 模式进行组织;为发布打标签以便回滚;通过告警监控同步状态;先在 staging 中测试变更。

故障排查 同步失败:argocd app get my-app;argocd app sync my-app --prune。Out of sync 状态:argocd app diff my-app;argocd app sync my-app --force。

相关技能 k8s-manifest-generator(用于创建清单);helm-chart-scaffolding(用于打包应用)。