3. Argo CD 安装与配置:Helm安装、CLI配置、Ingress配置、高可用部署模式

本章聚焦于生产级 Argo CD 的部署实践。我们将采用 Helm Chart 作为安装载体,依次完成核心组件部署、CLI 工具链配置、Ingress 网关暴露以及高可用模式切换。每一步都附带资源配额校准要点,为后续章节的瓶颈诊断奠定基础。

3.1 环境准备与 Helm 仓库配置

在安装前,请确保目标 Kubernetes 集群满足以下最低要求:

资源项 最低要求 生产建议
Kubernetes 版本 v1.22+ v1.26+
集群节点数 1 (单节点测试) 3+ (控制面高可用)
总 CPU 预留 1 核 4 核
总内存预留 2 GiB 8 GiB
存储 (etcd + Redis) 10 GiB 50 GiB (SSD)
资源校准提示: 如果集群节点 CPU 低于 2 核,建议在 Helm values 中将 controller.replicas 和 server.replicas 强制设为 1,避免因资源竞争导致 Pod 反复 OOMKill。

执行以下命令添加官方 Helm 仓库并更新索引:

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

3.2 Helm 安装 Argo CD(基础模式)

使用 Helm 安装时,推荐将自定义 values 保存为独立文件 argo-cd-values.yaml,便于版本管理和审计。以下是一个面向生产的最小化配置:

# argo-cd-values.yaml
global:
  image:
    tag: "v2.10.3"

controller:
  replicas: 2
  resources:
    requests:
      cpu: "500m"
      memory: "512Mi"
    limits:
      cpu: "1"
      memory: "1Gi"

server:
  replicas: 2
  resources:
    requests:
      cpu: "250m"
      memory: "256Mi"
    limits:
      cpu: "500m"
      memory: "512Mi"

repoServer:
  replicas: 2
  resources:
    requests:
      cpu: "250m"
      memory: "256Mi"
    limits:
      cpu: "500m"
      memory: "512Mi"

redis:
  enabled: true
  resources:
    requests:
      cpu: "100m"
      memory: "128Mi"
    limits:
      cpu: "200m"
      memory: "256Mi"

执行安装命令:

helm install argocd argo/argo-cd \
  --namespace argocd \
  --create-namespace \
  -f argo-cd-values.yaml
避坑: 不要省略 --create-namespace 参数,否则 Helm 会在命名空间不存在时直接报错退出。生产环境中建议提前用 kubectl create ns argocd 创建并打上标签 pod-security.kubernetes.io/enforce=baseline。

3.3 CLI 配置与初始密码获取

安装完成后,需要配置 argocd CLI 并与 API Server 建立信任关系。分三步完成:

  1. 下载 CLI 二进制:从 GitHub Releases 下载对应平台版本,并放入 /usr/local/bin。
  2. 获取初始密码:
kubectl get secret argocd-initial-admin-secret \
  -n argocd \
  -o jsonpath="{.data.password}" | base64 -d
  1. 登录并修改密码:
argocd login <ARGOCD_SERVER>:443 --grpc-web
argocd account update-password
CLI 配置要点: 如果 Argo CD Server 通过 Ingress 暴露且启用了 TLS,务必在 argocd login 时加上 --grpc-web 标志,否则 gRPC 连接会因 HTTP/2 协商失败而超时。

3.4 Ingress 配置:暴露 Argo CD Web UI 与 API

Argo CD 同时提供 Web UI(HTTP/HTTPS)和 gRPC API 端点。Ingress 配置需要同时支持两种协议。以下是一个基于 nginx-ingress 的完整示例:

# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/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: 443
关键注解说明:
  • ssl-passthrough: "true" — 允许 TLS 直通到 Argo CD Server Pod,避免 Ingress 二次解密导致 gRPC 流中断。
  • backend-protocol: "HTTPS" — 告知 Ingress 后端服务使用 HTTPS 协议。
  • 如果使用 AWS ALB Ingress Controller,需要改用 alb.ingress.kubernetes.io/backend-protocol-version: GRPC 注解。

应用配置后,通过 https://argocd.example.com 即可访问 Web UI。CLI 登录时使用同一域名:

argocd login argocd.example.com:443 --grpc-web

3.5 高可用部署模式

生产环境必须启用高可用模式。Argo CD 官方 Helm Chart 提供了 ha 子 chart,通过以下 values 启用:

# argo-cd-ha-values.yaml
# 继承基础 values,额外启用 HA 组件
redis:
  enabled: false   # 禁用单机 Redis

ha:
  enabled: true
  redis:
    enabled: true
    replicas: 3
    resources:
      requests:
        cpu: "200m"
        memory: "256Mi"
      limits:
        cpu: "500m"
        memory: "512Mi"

controller:
  replicas: 3
  # 启用 leader election
  metrics:
    enabled: true

server:
  replicas: 3
  # 启用会话亲和性
  service:
    sessionAffinity: ClientIP

repoServer:
  replicas: 3
  # 启用自动扩缩
  autoscaling:
    enabled: true
    minReplicas: 3
    maxReplicas: 10
    targetCPUUtilizationPercentage: 70

HA 模式的核心架构变化如下图所示:

Argo CD 高可用部署架构 用户 / CLI / Web UI Ingress (SSL Passthrough) argocd-server (3 副本) argocd-server (3 副本) argocd-server (3 副本) controller (3 副本) controller (3 副本) controller (3 副本) Redis Sentinel (3 节点) Redis Sentinel (3 节点) Redis Sentinel (3 节点) repo-server (3 副本) repo-server (3 副本) repo-server (3 副本) SSL 直通 会话亲和 Leader 选举
HA 模式关键差异对比:
组件 基础模式 HA 模式
Redis 单实例 Sentinel 集群 (3 节点)
argocd-server 1-2 副本 3+ 副本 + 会话亲和性
controller 1-2 副本 3+ 副本 + Leader 选举
repo-server 1-2 副本 3+ 副本 + HPA 自动扩缩
故障恢复时间 分钟级 (手动干预) 秒级 (自动故障转移)

3.6 安装后验证清单

完成部署后,执行以下命令验证所有组件健康状态:

# 检查所有 Pod 状态
kubectl get pods -n argocd

# 检查 Service 端点
kubectl get svc -n argocd

# 检查 Ingress 是否正确路由
curl -k -I https://argocd.example.com

# 验证 CLI 连接
argocd version --grpc-web

# 检查 Redis Sentinel 集群状态
kubectl exec -n argocd -it statefulset/argocd-redis-ha-server-0 -- redis-cli -p 26379 SENTINEL MASTERS
资源校准检查点: 如果 argocd-server Pod 频繁重启,请检查 kubectl top pod -n argocd 的 CPU/Memory 使用率是否接近 limits。建议将 resources.requests 设置为实际使用量的 1.2 倍,limits 设置为 2 倍,避免因突发流量导致 OOM。

至此,Argo CD 已完成生产级安装与配置。下一阶段将进入 GitOps 工作流设计,届时会基于本章部署的集群进行 Application 定义与同步策略配置。