3. Argo CD 安装与配置:使用 Helm 在 Kubernetes 集群中安装 Argo CD,配置初始管理员密码

本章将指导你使用 Helm 包管理器在 Kubernetes 集群中完成 Argo CD 的安装,并配置初始管理员密码。Argo CD 作为声明式 GitOps 工具,其安装过程涉及多个组件(API Server、Repository Server、Application Controller、Redis),通过 Helm Chart 可以统一管理这些组件的版本与配置。

3.1 安装前提与环境准备

在开始安装前,请确保满足以下条件:

前提条件 版本/要求 说明
Kubernetes 集群 v1.23+ 建议使用生产级集群(如 K3s、RKE2、EKS、AKS)
Helm CLI v3.8+ 支持 OCI 仓库和 Chart 依赖管理
kubectl 与集群版本匹配 已配置正确的 kubeconfig 上下文
集群资源 至少 2 核 CPU / 4 GB 内存 Argo CD 各组件默认资源请求总和约 1.5 核 / 2.5 GB
网络策略 允许 Ingress / LoadBalancer API Server 需要对外暴露(或使用 kubectl port-forward)
💡 提示: 如果你在本地开发环境(如 minikube、kind)安装,建议分配至少 4 GB 内存给集群,避免因资源不足导致 Pod 启动失败。

3.2 添加 Helm 仓库并安装 Argo CD

Argo CD 官方维护的 Helm Chart 位于 argo-cd 仓库。以下是标准安装步骤:

  1. 添加 Helm 仓库
helm repo add argo-cd https://argoproj.github.io/argo-helm
helm repo update
  1. 创建命名空间
kubectl create namespace argocd
  1. 使用 Helm 安装 Argo CD
helm install argocd argo-cd/argo-cd \
  --namespace argocd \
  --create-namespace \
  --version 7.7.0 \
  --set server.service.type=LoadBalancer \
  --set configs.params."server\.insecure"=true
📌 关键参数说明:
  • server.service.type=LoadBalancer:自动创建云厂商负载均衡器暴露 API Server(本地环境可改用 ClusterIP + port-forward)。
  • configs.params."server\.insecure"=true:允许 HTTP 访问(生产环境应配置 TLS)。
  • --version 7.7.0:锁定 Chart 版本,避免意外升级导致配置不兼容。

3.3 验证安装状态

安装完成后,检查所有 Pod 是否处于 Running 状态:

kubectl get pods -n argocd

预期输出应包含以下 5 个核心组件:

Pod 名称前缀 组件角色 默认副本数
argocd-server-* API Server(Web UI + gRPC) 1
argocd-repo-server-* 仓库服务器(Git 操作) 1
argocd-application-controller-* 应用控制器(状态同步) 1
argocd-redis-* 缓存与会话存储 1
argocd-dex-server-* SSO / OIDC 身份代理(可选) 1
⚠️ 常见问题: 如果 argocd-server 或 argocd-application-controller 反复 CrashLoopBackOff,请检查集群资源是否充足,或使用 kubectl describe pod <pod-name> -n argocd 查看事件日志。

3.4 Argo CD 组件架构与通信关系

下图展示了 Argo CD 各组件之间的核心通信路径,理解此架构有助于后续配置网络策略和故障排查。

Argo CD 组件架构与通信关系 Argo CD 组件架构与通信关系 用户 / 开发者 API Server (Web UI + gRPC) Repo Server (Git 仓库操作) Application Controller (状态同步) Redis (缓存 / 会话) Git 仓库 Kubernetes 集群 📌 通信说明: 实线 = 直接通信;虚线 = Repo Server 通过 API Server 间接向 Controller 传递清单。 Redis 为所有组件提供缓存和会话共享,是架构中的关键中间件。

3.5 获取并配置初始管理员密码

Argo CD 安装后会自动生成一个初始管理员密码,存储在 Secret 中。以下是获取和配置密码的完整流程:

3.5.1 获取初始密码

kubectl get secret argocd-initial-admin-secret \
  -n argocd \
  -o jsonpath="{.data.password}" | base64 -d

该命令会输出一个随机生成的字符串,例如 abc123def456。默认用户名为 admin。

3.5.2 登录 Web UI 或 CLI

方式一:通过 CLI 登录

argocd login <ARGOCD_SERVER>:443 \
  --username admin \
  --password <INITIAL_PASSWORD> \
  --insecure

方式二:通过 Web UI 登录

先获取 API Server 的外部地址:

kubectl get svc argocd-server -n argocd -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

然后在浏览器中访问 http://<EXTERNAL-IP>:80,使用 admin 和初始密码登录。

3.5.3 修改管理员密码(推荐)

使用 argocd CLI 修改密码:

argocd account update-password \
  --current-password <INITIAL_PASSWORD> \
  --new-password <NEW_PASSWORD>

或者直接更新 Secret:

kubectl patch secret argocd-secret \
  -n argocd \
  -p '{"data":{"admin.password":"'$(echo -n 'NEW_PASSWORD' | base64)'"}}'
⚠️ 安全警告: 初始密码存储在 Secret 中,默认不加密。生产环境务必:
  • 安装后立即修改密码。
  • 启用 TLS(配置 Ingress 并设置 server.insecure: false)。
  • 考虑集成外部 SSO(如 Dex、Keycloak)替代本地密码认证。

3.6 配置持久化与高可用(可选但推荐)

对于生产环境,建议调整以下 Helm 参数以提升稳定性:

配置项 推荐值 作用
redis.enabled true 启用内置 Redis(默认)
redis.persistence.enabled true Redis 数据持久化,避免重启丢失会话
server.replicas 2 API Server 多副本,提升可用性
applicationController.replicas 2 应用控制器多副本,加速同步
configs.params."server\.insecure" false 生产环境必须关闭 insecure 模式

使用以下命令升级安装:

helm upgrade argocd argo-cd/argo-cd \
  --namespace argocd \
  --reuse-values \
  --set server.replicas=2 \
  --set applicationController.replicas=2 \
  --set redis.persistence.enabled=true

3.7 安装后验证清单

完成安装和密码配置后,建议执行以下验证步骤:

  • ✅ Pod 状态:所有 Pod 均为 Running,无 CrashLoopBackOff。
  • ✅ 服务可达:curl http://<ARGOCD_SERVER>/api/version 返回 JSON 版本信息。
  • ✅ CLI 登录:argocd account get-user-info 显示当前用户信息。
  • ✅ 密码已修改:初始密码不再有效,新密码可正常登录。
  • ✅ 资源配额:集群资源使用率未超过 80%(避免后续应用部署时资源不足)。