SuperAPI AI 工具集

argocd-gitops

部署与运维

查看项目

更新于 10-15 12:43

技能介绍

用途

本技能用于在 Kubernetes 上实现声明式持续交付(GitOps),通过 ArgoCD 将 Git 仓库中的清单作为期望状态,自动同步到集群。适用于以下场景:

  • 为 Kubernetes 实现 GitOps 工作流
  • 从 Git 仓库自动化部署
  • 以声明式方式管理多个环境
  • 实现渐进式交付策略
  • 使集群状态与 Git 保持同步

前置条件

  • 已安装 ArgoCD 的 Kubernetes 集群
  • 已配置 kubectl
  • 用于存放清单的 Git 仓库
  • ArgoCD CLI(可选)

安装

# 创建命名空间
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

# 端口转发以访问 UI
kubectl port-forward svc/argocd-server -n argocd 8080:443

# 使用 CLI 登录
argocd login localhost:8080

主要能力

Application 定义

支持三种来源类型:

  • 基础 Application:直接引用 Git 仓库中的清单路径,配置目标集群与命名空间,并设置自动同步策略(prune、selfHeal、CreateNamespace)。
  • Helm Application:在 source 中指定 helm 字段,可引用多个 valueFiles 并通过 parameters 覆盖副本数、镜像标签等。
  • Kustomize Application:在 source 中指定 kustomize 字段,可通过 images 覆盖镜像。

Projects(AppProject)

用于隔离应用,可限制 sourceRepos、destinations、clusterResourceWhitelist、namespaceResourceWhitelist,并定义基于角色的访问策略(roles),支持按组授权。

ApplicationSets

用于批量生成 Application,支持多种生成器:

  • Git 生成器:根据仓库目录结构生成,如 environments/*。
  • List 生成器:根据列表元素(集群、环境等)生成。
  • Matrix 生成器:组合多个生成器,如 Git 目录 × 环境列表。

同步策略

  • 自动同步:可配置 prune(删除 Git 中不存在的资源)、selfHeal(回滚手动更改)、allowEmpty、syncOptions(如 CreateNamespace、PrunePropagationPolicy、PruneLast)以及重试策略(limit、backoff)。
  • Sync Waves:通过注解 argocd.argoproj.io/sync-wave 控制资源同步顺序。
  • Sync Hooks:通过注解 argocd.argoproj.io/hook 定义 PreSync 等钩子,并可设置 hook-delete-policy。

CLI 命令

常用命令包括:app list、app get、app sync(支持 --force)、app diff、app rollback、app delete、app logs、app get --hard-refresh。

仓库配置

通过 Secret 配置私有仓库,支持用户名密码或 SSH 私钥,需打上标签 argocd.argoproj.io/secret-type: repository。

通知

通过 ConfigMap argocd-notifications-cm 配置 Slack 等服务、消息模板和触发器。

使用方式

  1. 安装 ArgoCD 并获取管理员密码。
  2. 准备 Git 仓库存放 Kubernetes 清单(原生、Helm 或 Kustomize)。
  3. 创建 Application 或 ApplicationSet 资源,指定 source、destination 和 syncPolicy。
  4. 通过 UI 或 CLI 查看、同步、回滚应用。
  5. 按需配置项目隔离、通知和私有仓库凭据。

适用场景

  • 多环境(staging、production)的声明式部署管理
  • 需要从 Git 自动同步集群状态的团队
  • 使用 Helm 或 Kustomize 管理清单的项目
  • 需要按顺序部署(sync waves)或执行迁移钩子(sync hooks)的场景
  • 需要 RBAC 隔离和部署通知的团队

限制与常见问题

  • 同步因差异失败:资源显示差异但实际正确时,可通过 ignoreDifferences 忽略特定字段(如 /spec/replicas)。
  • 仓库不可访问:检查仓库 Secret,验证 URL 和凭据。
  • 应用卡在 OutOfSync:检查资源状态、事件和清单。
  • 健康检查失败:检查自定义健康检查与探针配置。

最佳实践

  • 使用 ApplicationSets 进行多环境部署
  • 使用 sync waves 实现有序部署
  • 使用 projects 隔离应用
  • 为部署事件配置通知
  • 通过 projects 实现适当的 RBAC
  • 使用健康检查验证部署
  • 启用自动修剪以删除已删除的资源
  • 将清单保存在专用仓库中

相关技能

  • kubernetes-ops:K8s 基础
  • helm-charts:Helm 部署
  • kustomize:Kustomize 覆盖