Argo CD 基础回顾:核心概念、安装与配置

Argo CD 是 Kubernetes 生态中最主流的声明式 GitOps 持续交付工具。它通过将应用声明(Deployment、Service、ConfigMap 等)存储在 Git 仓库中,并自动同步到目标集群,实现“Git 仓库即真相来源”。在质量门禁与事故响应体系中,Argo CD 既是部署执行引擎,也是回滚与策略卡点的关键载体。

2.1 核心概念

理解 Argo CD 的三个核心抽象——Application、Project 和 Repo Server——是掌握其架构与配置的基础。

概念 角色 关键职责
Application 应用实例 定义 Git 源、目标集群/命名空间、同步策略与健康检查
Project 逻辑分组与权限边界 限制可访问的 Git 仓库、目标集群、资源类型及同步行为
Repo Server 仓库缓存与清单生成 克隆 Git 仓库、渲染 Helm/Kustomize/Jsonnet 模板、生成最终 Kubernetes 清单
质量门禁视角: Project 是租户隔离与策略卡点的第一道防线。通过 Project 级别的 Sync Windows、Source Repos 白名单和 Cluster 白名单,可以强制团队只能从经过审批的 Git 仓库部署到合规集群。

2.1.1 Application 深度解析

一个 Application 资源包含以下核心字段:

  • source:Git 仓库 URL、目标路径、分支/标签、Helm Values 文件路径或 Kustomize overlay 目录。
  • destination:目标集群(可通过 API Server URL 或 name 指定)和命名空间。
  • syncPolicy:自动同步开关、自动创建命名空间、Prune(删除集群中已不在 Git 中的资源)策略。
  • health:自定义健康检查,用于判断应用是否真正就绪。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

2.1.2 Project 权限模型

Project 是 Argo CD 中实现多租户与安全卡点的核心单元。以下是一个典型的生产级 Project 配置:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/team-a/*'
    - 'https://github.com/team-b/*'
  destinations:
    - namespace: 'prod-*'
      server: https://kubernetes.default.svc
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
  syncWindows:
    - kind: deny
      schedule: '0 22 * * *'
      duration: 8h
      applications:
        - '*-canary'
事故响应注意: Sync Windows 可以阻止非工作时间自动同步,避免夜间因错误配置引发大规模故障。在质量门禁体系中,建议为生产环境 Project 开启强制手动同步 + 审批流程。

2.1.3 Repo Server 缓存机制

Repo Server 是 Argo CD 的“清单生成引擎”。它负责:

  1. 从 Git 仓库拉取代码并缓存到本地。
  2. 根据 Application 定义的 source 类型(原生 YAML、Helm Chart、Kustomize、Jsonnet)渲染最终 Kubernetes 清单。
  3. 将生成的清单返回给 Application Controller 进行 diff 与同步。

Repo Server 的缓存策略直接影响同步性能与 Git 仓库的访问频率。生产环境建议配置持久化卷(PVC)并启用 --repo-cache-expiration 参数。

Argo CD 核心架构与数据流 Argo CD 核心架构与数据流 Git 仓库 应用声明 + Helm/Kustomize Repo Server 缓存 + 清单渲染 Application Controller Diff + Sync + Health 目标 Kubernetes 集群 实际运行状态 API Server / UI 用户交互 + Webhook git clone / pull 渲染后清单 apply / prune 状态回写 同步请求 质量门禁集成点 Project 策略 → Sync Windows → PreSync Hook

2.2 安装与配置

Argo CD 支持多种安装方式:Helm Chart、Kustomize 覆盖、Operator 或官方 Manifest。生产环境推荐使用 Helm Chart 进行安装,便于参数化配置与版本管理。

2.2.1 快速安装(Helm)

# 添加 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

# 创建命名空间
kubectl create namespace argocd

# 安装 Argo CD(生产建议使用固定版本)
helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 7.1.1 \
  --set server.service.type=LoadBalancer \
  --set configs.params."server\.insecure"=true \
  --set controller.replicas=2 \
  --set repoServer.replicas=2
高可用建议: 生产环境至少部署 2 个 Application Controller 副本和 2 个 Repo Server 副本。Repo Server 建议挂载持久卷(PVC)以加速缓存重建。

2.2.2 关键配置参数

参数路径 默认值 生产推荐值 说明
server.service.type ClusterIP LoadBalancer / Ingress 对外暴露 API Server
configs.params.server.insecure false true(配合反向代理 TLS) 关闭内置 TLS,由 Ingress 统一管理证书
controller.replicas 1 2 Application Controller 高可用
repoServer.replicas 1 2 Repo Server 高可用
configs.params.accounts.admin.enabled true true 启用 admin 本地账号(配合 RBAC)
configs.rbac.policy.csv 空 自定义 RBAC 策略 控制团队权限

2.2.3 获取初始密码与登录

# 获取 admin 初始密码
kubectl -n argocd get secret argocd-initial-admin-secret \
  -o jsonpath="{.data.password}" | base64 -d

# 端口转发(本地调试)
kubectl port-forward svc/argocd-server -n argocd 8080:443

# 通过 CLI 登录
argocd login localhost:8080 --username admin --password <密码>

2.2.4 配置 Git 仓库连接

Argo CD 支持通过 SSH 或 HTTPS 连接 Git 仓库。生产环境建议使用 Deploy Keys(SSH)或 GitHub App 进行认证,避免使用长期有效的个人 。

# 添加 SSH 私钥到 Argo CD
argocd repo add git@github.com:team-a/deployment.git \
  --ssh-private-key-path ~/.ssh/argocd_deploy_key \
  --name team-a-deploy

# 验证仓库连接状态
argocd repo list
Argo CD 安装与配置流程 Argo CD 安装与配置流程 1. Helm 安装 helm install argocd 2. 配置参数 HA / TLS / RBAC 3. 获取初始密码 kubectl get secret 4. CLI 登录 argocd login 5. 添加 Git 仓库 argocd repo add 6. 创建 Application argocd app create 质量门禁前置条件 安装完成后,立即配置 Project 级别的 Sync Windows、Source Repos 白名单和 RBAC 策略

2.3 生产环境配置清单

在将 Argo CD 接入质量门禁体系前,请逐项确认以下配置:

  • 高可用:Controller、Repo Server、API Server 至少 2 副本。
  • 持久化:Repo Server 挂载 PVC,避免重启后重新克隆所有仓库。
  • 安全:禁用 admin 默认密码,集成 SSO(OIDC / Dex);启用 TLS。
  • 审计:开启 Argo CD 审计日志,输出到集中式日志系统(如 ELK / Loki)。
  • 备份:定期备份 Argo CD 的 CRD 资源(Application、Project、ConfigMap)。
  • 监控:暴露 Prometheus 指标,配置告警规则(如 Sync 失败、OutOfSync 状态)。
事故响应前置: 建议在 Argo CD 中为每个生产 Application 配置 syncPolicy.retry 和 syncPolicy.automated.selfHeal,并设置 healthCheck 自定义 Liveness/Readiness 探针。当质量门禁检测到异常指标时,可以自动触发回滚或暂停同步。