4. Argo CD 基础:架构、核心组件与安装部署

Argo CD 是 Kubernetes 生态中最主流的声明式 GitOps 交付工具,遵循“应用定义、配置和环境都应存储在 Git 仓库中,并由集群自动同步”的核心原则。本章从架构设计、核心组件职责到生产级安装部署,建立对 Argo CD 的完整认知。

4.1 Argo CD 整体架构

Argo CD 采用控制面与工作负载分离的架构,由三个核心组件构成:API Server、Repo Server 和 Application Controller。它们协作完成从 Git 仓库读取配置、对比集群实际状态、执行同步操作的全流程。

Argo CD 核心架构与数据流 Argo CD 核心架构与数据流 API Server REST/gRPC 接口 认证 · RBAC · Web UI Repo Server Git 仓库缓存 Manifest 生成 Application Controller 状态对比 · 同步 健康评估 · 自愈 Git 仓库 应用清单 · Kustomize · Helm Kubernetes 集群 Deploy · Service · ConfigMap 用户 / CI 系统 CLI · API · Web 浏览器 数据流说明: ① 用户/CI 通过 API Server 创建 Application 资源 ② API Server 将请求写入 Kubernetes 的 Application CRD ③ Application Controller 监听 CRD 变化,通知 Repo Server 拉取 Git 仓库 ④ Repo Server 生成最终 Manifest,Controller 对比并同步到集群

4.2 核心组件详解

组件 职责 关键行为 安全关注点
API Server 对外暴露 REST/gRPC 接口,提供 Web UI、CLI 和 CI 集成入口 认证(OIDC/LDAP/SAML)、RBAC 鉴权、Application CRUD、项目(Project)管理 管理、TLS 证书、SSO 集成、审计日志
Repo Server 与 Git 仓库交互,缓存仓库内容,生成 Kubernetes Manifest Git clone/fetch、Helm chart 渲染、Kustomize overlay、Jsonnet 编译 SSH/GPG 密钥存储、仓库访问凭证、Manifest 注入防护
Application Controller 持续对比 Git 中声明的期望状态与集群实际状态,执行同步 状态差异计算、自动/手动同步、健康检查、Prune 资源、自愈回滚 最小 RBAC 权限、资源配额校验、同步钩子(Sync Hook)安全
设计原则: Repo Server 是唯一直接访问 Git 仓库的组件,API Server 和 Application Controller 均通过 Repo Server 获取 Manifest。这种隔离设计降低了凭证泄露面,也便于对 Manifest 生成过程进行审计和缓存。

4.3 安装部署 Argo CD

以下步骤演示在 Kubernetes 集群中安装 Argo CD 的推荐方式,包含高可用部署要点和初始安全配置。

4.3.1 创建命名空间并安装

# 创建专用命名空间
kubectl create namespace argocd

# 使用官方清单安装(生产环境建议指定版本号)
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 验证所有 Pod 处于 Running 状态
kubectl get pods -n argocd

4.3.2 核心组件 Pod 清单

Pod 名称 所属组件 默认副本数 说明
argocd-server-xxx API Server 1(建议 ≥2) Web UI + API 入口
argocd-repo-server-xxx Repo Server 1(建议 ≥2) Git 操作与 Manifest 生成
argocd-application-controller-xxx Application Controller 1(建议 ≥2) 状态对比与同步
argocd-redis-xxx Redis 缓存 1(建议 HA) 缓存 Repo Server 结果
argocd-dex-server-xxx Dex(可选) 1 SSO 身份代理

4.3.3 获取初始密码并登录

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

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

# 使用 CLI 登录
argocd login localhost:8080 --username admin --password <初始密码>
安全警告: 初始密码仅用于首次登录,登录后必须立即修改。生产环境应禁用 admin 本地账号,改用 OIDC/LDAP 集成,并启用 TLS 证书。切勿将初始密码暴露在 CI 日志或公开文档中。

4.4 生产部署关键配置

  • 高可用: 将 argocd-server、argocd-repo-server、argocd-application-controller 的副本数设置为 ≥2,并配置 PodAntiAffinity 分散到不同节点。
  • 持久化缓存: 为 Redis 配置 PersistentVolume,避免 Pod 重启后缓存丢失导致 Repo Server 频繁拉取 Git。
  • 资源限制: 为每个组件设置 requests/limits,防止突发同步操作耗尽集群资源。
  • 网络策略: 限制 Repo Server 仅可出站访问 Git 仓库地址,禁止不必要的入站连接。
  • 审计日志: 启用 API Server 的审计日志,记录所有 Application 创建、更新、同步操作。
Argo CD 安装部署流程 Argo CD 安装部署流程 ① 创建命名空间 kubectl create ns argocd ② 安装清单 kubectl apply -f install.yaml ③ 验证 Pod kubectl get pods -n argocd ④ 获取密码 secret 解码 ⑤ 端口转发 / 配置 Ingress kubectl port-forward ... ⑥ CLI 登录 & 修改密码 argocd login && argocd account update-password ⑦ 配置 SSO / RBAC argocd-cm / argocd-rbac-cm 💡 生产环境建议:使用 Helm Chart 安装(argocd-helm),支持更精细的 values 配置和版本管理。

4.5 验证安装与基础配置

# 检查所有组件健康状态
argocd version
argocd cluster list

# 查看当前配置的集群(默认是安装 Argo CD 的集群)
argocd cluster add <context-name>

# 创建一个测试 Application 验证端到端流程
argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

# 同步应用
argocd app sync guestbook
关键检查项:
  • argocd-server 的 Service 类型(ClusterIP / LoadBalancer / NodePort)是否符合网络规划
  • Repo Server 能否正常访问 Git 仓库(测试 SSH 或 HTTPS 连接)
  • Application Controller 的 ServiceAccount 是否具有操作目标命名空间的权限
  • Redis 缓存是否正常工作(argocd-repo-server 日志无连接错误)

4.6 本章小结