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 各核心组件在集群内的部署关系及数据流向:
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。首次登录将看到以下界面:
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-cmConfigMap 中设置users.anonymous.enabled: false - 配置 RBAC: 通过
argocd-rbac-cm定义角色绑定,遵循最小权限原则 - 启用审计日志: 设置
server.log.level: debug并接入集中式日志系统 - 资源限制: 为每个组件设置 requests/limits,防止资源争抢
- 定期备份: 备份
argocd-secret和argocd-cm中的关键配置
至此,Argo CD 已成功部署并可通过 UI 访问。下一阶段我们将配置 Git 仓库连接,开启第一个 GitOps 应用交付流程。