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 建立信任关系。分三步完成:
- 下载 CLI 二进制:从 GitHub Releases 下载对应平台版本,并放入
/usr/local/bin。 - 获取初始密码:
kubectl get secret argocd-initial-admin-secret \
-n argocd \
-o jsonpath="{.data.password}" | base64 -d
- 登录并修改密码:
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 模式的核心架构变化如下图所示:
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 定义与同步策略配置。