3. Argo CD 安装部署:使用 Helm Chart 在 Kubernetes 集群中安装 Argo CD

在生产环境中,推荐使用 Helm Chart 来安装 Argo CD,因为它提供了参数化配置、版本管理和声明式升级能力。本章将演示从环境准备到验证部署的完整流程。

3.1 环境前提条件

在安装之前,请确保你的环境满足以下要求:

组件 最低版本 说明
Kubernetes 集群 v1.23+ 支持 Argo CD 所需的 CRD 和 API 版本
Helm CLI v3.8+ 用于执行 Chart 安装与升级
kubectl v1.23+ 与集群版本匹配
集群资源 2 vCPU / 4 GB 内存 Argo CD 控制平面最低建议
💡 提示: 如果你使用 Minikube 或 Kind 进行本地测试,请确保分配足够的内存(建议 --memory=4096)。

3.2 添加 Helm 仓库并获取 Chart

Argo CD 官方维护的 Helm Chart 位于 argo-cd 仓库。执行以下命令添加并更新:

# 添加 Argo CD 官方 Helm 仓库
helm repo add argo-cd https://argoproj.github.io/argo-helm

# 更新仓库索引
helm repo update

# 查看可用的 Chart 版本
helm search repo argo-cd/argo-cd --versions --devel | head -5

输出示例:

NAME                    CHART VERSION   APP VERSION     DESCRIPTION
argo-cd/argo-cd         7.8.15          v2.14.8         A Helm chart for Argo CD...
argo-cd/argo-cd         7.8.14          v2.14.7         A Helm chart for Argo CD...
...

3.3 创建命名空间与自定义 values 文件

建议将 Argo CD 部署在独立的命名空间 argocd 中,并通过自定义 values 文件覆盖默认配置。

# 创建命名空间
kubectl create namespace argocd

# 创建自定义 values 文件:argocd-values.yaml
cat << 'EOF' > argocd-values.yaml
# 全局配置
global:
  # 使用稳定的镜像版本
  image:
    tag: "v2.14.8"

# 服务配置
server:
  # 使用 NodePort 暴露 UI(生产环境建议 Ingress)
  service:
    type: NodePort
    nodePortHttp: 30080
    nodePortHttps: 30443

# 配置初始管理员密码(可选,不设置则自动生成)
configs:
  secret:
    argocdServerAdminPassword: "$2a$10$..."  # bcrypt 加密后的密码

# 启用 Dex 作为 SSO 集成(可选)
dex:
  enabled: false

# 资源限制(生产环境建议调整)
controller:
  resources:
    limits:
      cpu: "1"
      memory: "1Gi"
    requests:
      cpu: "500m"
      memory: "512Mi"
EOF
⚠️ 安全警告: 切勿在 values 文件中使用明文密码。建议使用 htpasswd 或 Argo CD 官方工具生成 bcrypt 哈希。生产环境应启用 Ingress + TLS 并集成 OIDC。

3.4 使用 Helm 安装 Argo CD

执行以下命令完成安装:

# 安装 Argo CD
helm install argocd argo-cd/argo-cd \
  --namespace argocd \
  --values argocd-values.yaml \
  --create-namespace \
  --wait \
  --timeout 10m

安装成功后,输出应包含:

NAME: argocd
LAST DEPLOYED: ...
NAMESPACE: argocd
STATUS: deployed
REVISION: 1

3.5 验证部署状态

使用以下命令检查 Pod 和 Service 是否正常运行:

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

# 查看 Service 暴露端口
kubectl get svc -n argocd

# 查看 CRD 是否注册
kubectl get crd | grep argoproj.io

预期输出示例:

NAME                                        READY   STATUS    RESTARTS   AGE
argocd-application-controller-0             1/1     Running   0          2m
argocd-applicationset-controller-6f8d...    1/1     Running   0          2m
argocd-dex-server-7b9c...                   1/1     Running   0          2m
argocd-notifications-controller-5c4b...     1/1     Running   0          2m
argocd-redis-7f8d...                        1/1     Running   0          2m
argocd-repo-server-6d4b...                  1/1     Running   0          2m
argocd-server-5c8b...                       1/1     Running   0          2m
✅ 关键检查点: 所有 Pod 应处于 Running 状态,且 argocd-server 和 argocd-application-controller 必须就绪。如果 Pod 处于 CrashLoopBackOff,请检查 kubectl logs -n argocd <pod-name>。

3.6 访问 Argo CD UI

安装完成后,通过 NodePort 或端口转发访问 UI:

# 方式一:端口转发(推荐本地测试)
kubectl port-forward svc/argocd-server -n argocd 8080:443

# 方式二:直接使用 NodePort(需知道节点 IP)
# 浏览器访问 https://<node-ip>:30443

获取初始管理员密码:

# 自动生成的密码存储在 Secret 中
kubectl get secret argocd-initial-admin-secret \
  -n argocd \
  -o jsonpath="{.data.password}" | base64 -d

使用用户名 admin 和上述密码登录。

3.7 安装架构总览

下图展示了 Helm 安装后 Argo CD 各组件的逻辑关系与通信路径:

Argo CD Helm 安装架构图 用户 / CI 系统 argocd-server argocd-repo-server argocd-application-controller argocd-applicationset-controller argocd-redis argocd-dex-server argocd-notifications-controller Git 仓库 目标 Kubernetes 集群 📌 说明 Helm 一次性部署所有组件 CRD 自动注册,无需手动创建

3.8 常见安装问题排查

  • Pod 启动失败: 检查镜像拉取策略,确保集群可以访问 quay.io/argoproj/argocd。私有环境可配置 imagePullSecrets。
  • CRD 冲突: 如果之前安装过旧版本,先执行 helm uninstall argocd -n argocd 并手动清理残留 CRD。
  • RBAC 权限不足: 确保执行安装的账号拥有集群级别的 cluster-admin 权限。
  • Helm 超时: 增加 --timeout 15m 参数,或在 values 中降低资源请求量。

3.9 升级与卸载

# 升级到新版本
helm upgrade argocd argo-cd/argo-cd \
  --namespace argocd \
  --values argocd-values.yaml \
  --version 7.9.0 \
  --wait

# 卸载(保留 CRD)
helm uninstall argocd -n argocd

# 完全清理(包括 CRD 和命名空间)
kubectl delete namespace argocd
kubectl delete crd applications.argoproj.io applicationsets.argoproj.io appprojects.argoproj.io
📘 最佳实践: 始终将 values 文件纳入 Git 仓库管理。升级前使用 helm diff upgrade 插件预览变更,避免意外配置漂移。