3. Argo CD 安装与配置:Helm 安装、Ingress、TLS 与管理员密码获取
本章将使用 Helm Chart 在 Kubernetes 集群中部署 Argo CD,并完成生产环境所需的 Ingress 配置、TLS 证书挂载以及初始管理员密码的获取。这是搭建 GitOps 压测沙盘的基础步骤,所有后续的配额压测与容量预测实验都依赖此环境的正确性。
3.1 环境准备与 Helm 仓库添加
在安装之前,请确保集群已就绪,并且 kubectl 上下文指向目标集群。Argo CD 官方推荐使用 argoproj/argo-cd Helm Chart 进行部署。
前置检查清单:
- Kubernetes 集群版本 ≥ 1.23
- Helm 版本 ≥ 3.8.0
- 集群已配置 StorageClass(用于持久化 Argo CD 数据)
- DNS 解析或本地 hosts 文件已准备(用于 Ingress 域名)
执行以下命令添加官方 Helm 仓库并更新索引:
helm repo add argo-cd https://argoproj.github.io/argo-helm
helm repo update
3.2 使用 Helm 安装 Argo CD
创建一个命名空间 argocd,然后使用 Helm 安装。以下命令包含了生产环境常用的配置参数:
kubectl create namespace argocd
helm install argocd argo-cd/argo-cd \
--namespace argocd \
--set server.service.type=ClusterIP \
--set server.ingress.enabled=true \
--set server.ingress.hosts[0]=argocd.example.com \
--set server.ingress.tls[0].hosts[0]=argocd.example.com \
--set server.ingress.tls[0].secretName=argocd-tls \
--set configs.params."server\.insecure"=true \
--set controller.replicas=1 \
--set server.replicas=1 \
--set repoServer.replicas=1 \
--set applicationSet.replicas=1
参数说明:
server.insecure=true 允许 Argo CD Server 在内部以 HTTP 模式运行,由 Ingress 层统一处理 TLS 终止。这是生产环境的标准做法,避免在 Pod 内部重复管理证书。
安装完成后,检查 Pod 状态:
kubectl get pods -n argocd
预期输出应包含以下核心组件:
| 组件名称 | 默认副本数 | 功能说明 |
|---|---|---|
| argocd-application-controller | 1 | 负责 Application 状态循环与同步 |
| argocd-server | 1 | 提供 API 与 Web UI 服务 |
| argocd-repo-server | 1 | 拉取 Git 仓库并生成 Kubernetes 清单 |
| argocd-redis | 1 | 缓存与状态存储 |
| argocd-applicationset-controller | 1 | 管理 ApplicationSet 资源 |
3.3 Ingress 配置与 TLS 证书挂载
Argo CD 的 Ingress 配置支持多种 Ingress Controller(如 Nginx、Traefik、AWS ALB)。以下以 Nginx Ingress Controller 为例,展示完整的 YAML 配置。
首先,创建 TLS 证书 Secret。如果使用自签名证书用于测试环境:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout argocd-tls.key \
-out argocd-tls.crt \
-subj "/CN=argocd.example.com" \
-addext "subjectAltName=DNS:argocd.example.com"
kubectl create secret tls argocd-tls \
--cert=argocd-tls.crt \
--key=argocd-tls.key \
-n argocd
然后,通过 Helm values 文件或直接编辑 Ingress 对象来配置。以下是完整的 Ingress 资源定义:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
nginx.ingress.kubernetes.io/ssl-passthrough: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls
rules:
- host: argocd.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80
关键注解:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP" 必须设置,因为 Argo CD Server 内部监听 8080(HTTP)端口。如果误设为 HTTPS,会导致 Ingress 与后端之间的通信失败。
验证 Ingress 是否生效:
kubectl get ingress -n argocd
# 预期输出显示 ADDRESS 已分配,且 TLS 状态正常
3.4 初始管理员密码获取
Argo CD 安装完成后,初始管理员密码由系统自动生成并存储在 Secret 中。获取密码的官方方法如下:
kubectl get secret argocd-initial-admin-secret \
-n argocd \
-o jsonpath="{.data.password}" | base64 -d
如果 Secret 不存在(常见于某些 Helm 版本或自定义配置),可以通过以下方式重置密码:
# 方法一:直接修改 admin 用户的密码哈希
kubectl exec -n argocd deploy/argocd-server -- \
argocd account update-password \
--current-password <old-password> \
--new-password <new-password>
# 方法二:通过 argocd CLI 重置(需要先登录)
argocd account update-password
安全建议: 在压测沙盘环境中,建议将初始密码记录在安全位置,并在首次登录后立即修改。对于自动化流水线,可以使用
argocd account generate- 生成 API 替代密码认证。
3.5 安装验证与访问测试
完成上述步骤后,通过浏览器访问 https://argocd.example.com,使用 admin 和获取到的密码登录。验证以下关键功能:
- UI 加载: 页面正常渲染,无证书告警(自签名证书除外)
- CLI 连接:
argocd login argocd.example.com --username admin --password <password> --insecure成功 - 集群状态:
argocd cluster list显示当前集群为in-cluster - 组件健康: 所有 Pod 处于
Running状态,且 Readiness 探测通过
3.6 常见问题与排错
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Ingress 返回 502 | 后端协议配置错误 | 检查 annotation backend-protocol: HTTP |
| 证书告警 | 自签名证书不被信任 | 添加 --insecure 标志或导入 CA 证书 |
| 密码获取为空 | Secret 名称或命名空间错误 | 确认 Secret 名为 argocd-initial-admin-secret |
| Pod CrashLoopBackOff | 资源限制不足或配置错误 | 检查 kubectl describe pod 事件日志 |
压测沙盘提示: 在后续的配额压测实验中,Argo CD 的
argocd-server 和 application-controller 将成为主要负载点。建议在安装阶段就为这两个组件配置资源请求与限制(requests/limits),避免压测时因资源不足导致 Pod 被 OOM Kill。