3. Argo CD 安装与部署:在 Kubernetes 集群中安装 Argo CD

本章将指导你完成 Argo CD 在 Kubernetes 集群中的完整部署流程。我们将对比两种主流的安装方式(Helm Chart 与原生 Manifest),配置 Ingress 实现外部访问,并最终通过 Web UI 验证部署成果。这是 GitOps 工作流的基础设施底座,请确保集群版本 ≥ 1.23 且具备足够的资源(建议 2 vCPU / 4 GB 内存)。

3.1 安装方式对比:Helm vs Manifest

Argo CD 官方提供两种安装途径,下表从运维复杂度、升级灵活性和生产适用性三个维度进行对比:

维度 Helm Chart 原生 Manifest
安装复杂度 低 — 一条 helm install 命令即可 中 — 需手动 apply 多个 YAML 文件
参数化能力 强 — 通过 values.yaml 集中管理 弱 — 需直接编辑 YAML 或使用 Kustomize
升级策略 支持 helm upgrade 回滚 需手动管理版本差异
生产推荐 ✅ 强烈推荐 ⚠️ 仅用于快速验证
最佳实践: 生产环境请始终使用 Helm Chart 安装。它提供了声明式的参数管理、版本锁(Chart.lock)和原子化升级能力,与 GitOps 理念天然契合。

3.2 使用 Helm Chart 安装 Argo CD

以下步骤基于 Argo CD Helm Chart 7.x 版本(对应 Argo CD v2.12+)。

步骤 1:添加 Helm 仓库并更新

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

步骤 2:创建命名空间并安装

kubectl create namespace argocd
helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 7.3.0 \
  --set server.service.type=ClusterIP \
  --set configs.params."server\.insecure"=true
注意: 上述命令中 server.insecure=true 仅用于演示环境。生产环境必须通过 Ingress 或 LoadBalancer 配合 TLS 终止,切勿直接暴露 HTTP 端口。

步骤 3:验证 Pod 状态

kubectl get pods -n argocd
# 预期输出:所有 Pod 处于 Running/Ready 状态
# NAME                                                READY   STATUS    RESTARTS
# argocd-application-controller-0                     1/1     Running   0
# argocd-applicationset-controller-6b9b8f8d6f-abc12   1/1     Running   0
# argocd-dex-server-7d8f9c8b7c-def34                  1/1     Running   0
# argocd-notifications-controller-5c4f4d4f78-ghi56    1/1     Running   0
# argocd-redis-7f6b8c8b7c-jkl78                       1/1     Running   0
# argocd-repo-server-9c8b7c8b7c-mno90                 1/1     Running   0
# argocd-server-8d7c6b5c4b-pqr12                      1/1     Running   0

3.3 安装架构与组件关系

下图展示了 Argo CD 各核心组件在集群内的部署关系及数据流向:

Argo CD 组件架构图 Argo CD 组件架构与数据流 用户 / Ingress argocd-server (API) argocd-repo-server argocd-dex-server Application Controller Redis (缓存) 组件职责说明: • API Server:提供 REST/gRPC 接口和 Web UI,接收用户请求 • Repo Server:克隆 Git 仓库并生成 Kubernetes Manifest;Dex Server:集成 OIDC/SSO 认证

3.4 配置 Ingress 暴露 UI

Argo CD 默认使用 ClusterIP 服务,必须通过 Ingress 对外暴露。以下提供 Nginx Ingress Controller 和 Traefik 两种常见场景的配置示例。

方案 A:Nginx Ingress(推荐)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  ingressClassName: nginx
  rules:
  - host: argocd.your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            port:
              number: 80
  tls:
  - hosts:
    - argocd.your-domain.com
    secretName: argocd-tls

方案 B:Traefik IngressRoute

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: argocd-server
  namespace: argocd
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`argocd.your-domain.com`)
    kind: Rule
    services:
    - name: argocd-server
      port: 80
  tls:
    secretName: argocd-tls
关键配置说明:
  • backend-protocol: HTTP — Argo CD 内部使用 HTTP,由 Ingress 负责 TLS 终止
  • force-ssl-redirect: true — 强制 HTTPS 访问,防止凭证泄露
  • TLS Secret 需提前创建:kubectl create secret tls argocd-tls --cert=cert.pem --key=key.pem -n argocd

3.5 获取初始管理员密码

安装完成后,Argo CD 会自动生成一个随机密码用于首次登录:

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

默认用户名为 admin。登录后请立即修改密码:

argocd account update-password \
  --current-password <初始密码> \
  --new-password <新密码>

3.6 访问 UI 并验证部署

完成 Ingress 配置并等待 DNS 解析生效后,通过浏览器访问 https://argocd.your-domain.com。首次登录将看到以下界面:

Argo CD 登录界面示意 Argo CD Web UI 登录界面 Argo CD GitOps 持续交付 admin •••••••• SIGN IN 登录后进入 Applications 视图,可查看集群状态、同步进度和应用健康度。首次登录建议立即修改默认密码。

3.7 部署验证清单

完成安装后,请逐项确认以下检查点:

检查项 验证方法 预期结果
Pod 健康 kubectl get pods -n argocd 所有 Pod 状态为 Running,READY 列显示 1/1
Service 可达 kubectl get svc -n argocd argocd-server 的 ClusterIP 或 ExternalIP 正常分配
Ingress 路由 curl -I https://argocd.your-domain.com 返回 HTTP 200 或 302(重定向到登录页)
UI 登录 浏览器访问 + 输入 admin/初始密码 成功进入 Applications 主界面
CLI 连接 argocd login argocd.your-domain.com --grpc-web 返回 "logged in successfully"
排障提示: 如果 Ingress 返回 503,请检查 kubectl describe ingress -n argocd 中的 Events 字段,确认后端 Service 和 Endpoint 是否正常。常见原因是 backend-protocol 注解缺失导致协议不匹配。

3.8 生产环境加固建议

完成基础部署后,建议立即执行以下加固操作:

  • 禁用匿名访问: 在 argocd-cm ConfigMap 中设置 users.anonymous.enabled: false
  • 配置 RBAC: 通过 argocd-rbac-cm 定义角色绑定,遵循最小权限原则
  • 启用审计日志: 设置 server.log.level: debug 并接入集中式日志系统
  • 资源限制: 为每个组件设置 requests/limits,防止资源争抢
  • 定期备份: 备份 argocd-secret 和 argocd-cm 中的关键配置

至此,Argo CD 已成功部署并可通过 UI 访问。下一阶段我们将配置 Git 仓库连接,开启第一个 GitOps 应用交付流程。