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 各组件的逻辑关系与通信路径:
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 插件预览变更,避免意外配置漂移。