4. Argo CD 基础:架构、核心组件与安装部署
Argo CD 是 Kubernetes 生态中最主流的声明式 GitOps 交付工具,遵循“应用定义、配置和环境都应存储在 Git 仓库中,并由集群自动同步”的核心原则。本章从架构设计、核心组件职责到生产级安装部署,建立对 Argo CD 的完整认知。
4.1 Argo CD 整体架构
Argo CD 采用控制面与工作负载分离的架构,由三个核心组件构成:API Server、Repo Server 和 Application Controller。它们协作完成从 Git 仓库读取配置、对比集群实际状态、执行同步操作的全流程。
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 创建、更新、同步操作。
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 日志无连接错误)