4. Argo CD 安装与配置:在 Kubernetes 集群中安装 Argo CD、CLI 配置、Web UI 初探、RBAC 设置
本章是课程实战的起点。我们将在一套标准的 Kubernetes 集群上完成 Argo CD 的完整部署,并配置 CLI 工具、首次登录 Web UI,以及建立基于角色的访问控制(RBAC)体系。这些步骤是后续所有 Helm 应用交付与压测沙盘的基础设施。
4.1 环境准备与前提条件
在安装 Argo CD 之前,请确认集群满足以下最低要求。建议使用 Kubernetes 1.22+ 版本,并确保集群有足够的资源承载 Argo CD 控制平面组件。
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| Kubernetes 版本 | 1.22 | 1.26+ |
| 控制节点 CPU | 1 核 | 2 核 |
| 控制节点内存 | 2 GB | 4 GB |
| 存储(etcd + 配置) | 10 GB | 20 GB |
| kubectl 权限 | cluster-admin | cluster-admin |
4.2 在 Kubernetes 集群中安装 Argo CD
Argo CD 官方提供了一套标准的安装清单,包含所有必要的 CRD、ServiceAccount、RBAC 规则以及 Deployment。我们使用 kubectl apply 命令直接部署到 argocd 命名空间。
# 创建命名空间
kubectl create namespace argocd
# 安装 Argo CD 核心组件
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
安装完成后,检查 Pod 状态,确保所有组件都处于 Running 状态:
kubectl get pods -n argocd
# 预期输出示例:
# NAME READY STATUS RESTARTS AGE
# argocd-application-controller-0 1/1 Running 0 2m
# argocd-applicationset-controller-6b7b6b8f4f-abc12 1/1 Running 0 2m
# argocd-dex-server-7f8d9c8b9c-def34 1/1 Running 0 2m
# argocd-notifications-controller-5d6c7d8f9e-ghi56 1/1 Running 0 2m
# argocd-redis-7c8d9e0f1a-jkl78 1/1 Running 0 2m
# argocd-repo-server-9a8b7c6d5e-mno90 1/1 Running 0 2m
# argocd-server-8b7c6d5e4f-pqr12 1/1 Running 0 2m
- argocd-server:API 服务与 Web UI 入口,负责认证、授权与应用同步。
- argocd-repo-server:仓库服务,负责拉取 Git 仓库并生成 Kubernetes 清单。
- argocd-application-controller:核心控制器,持续对比 Git 中的期望状态与集群实际状态。
- argocd-redis:缓存层,存储应用状态与配置信息。
4.3 CLI 配置与初始登录
Argo CD 提供强大的命令行工具 argocd,用于管理应用、仓库、项目和用户。首先安装 CLI 并配置与集群的连接。
4.3.1 安装 argocd CLI
# Linux / macOS (使用 Homebrew)
brew install argocd
# 或直接下载二进制
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
4.3.2 获取初始密码并登录
Argo CD 默认使用 admin 用户,初始密码存储在名为 argocd-initial-admin-secret 的 Secret 中。
# 获取初始密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
# 端口转发(本地访问 API 与 UI)
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 使用 CLI 登录
argocd login localhost:8080 --username admin --password <获取到的密码> --insecure
--insecure 参数。应配置有效的 TLS 证书(如 cert-manager 或 Let's Encrypt),并通过 Ingress 暴露服务。
4.4 Web UI 初探
登录成功后,通过浏览器访问 https://localhost:8080 进入 Argo CD Web UI。界面主要分为以下几个功能区:
- Applications 面板:展示所有已管理的应用,支持按项目、状态、健康度筛选。
- Settings 菜单:管理仓库连接、项目配置、集群注册与 SSO 集成。
- User Info:查看当前用户权限、API 生成与密码修改。
- 应用详情视图:以拓扑图形式展示资源关系,支持实时同步与回滚操作。
4.5 RBAC 设置
Argo CD 的 RBAC 基于 argocd-rbac-cm ConfigMap 进行配置。默认情况下,只有 admin 用户拥有完全权限。我们需要为团队中的不同角色(如开发者、运维人员、只读审计)定义细粒度的权限。
4.5.1 RBAC 策略模型
Argo CD RBAC 使用 role, resource, action, scope 四元组进行权限控制。核心概念如下:
| 元素 | 说明 | 示例值 |
|---|---|---|
| role | 用户或组所绑定的角色名称 | role:admin, role:developer |
| resource | 被管理的对象类型 | applications, clusters, projects |
| action | 允许的操作 | get, sync, create, delete |
| scope | 资源的作用域(通常是项目名称) | my-project, *(所有项目) |
4.5.2 配置 RBAC ConfigMap
编辑 argocd-rbac-cm ConfigMap,添加自定义角色与绑定关系。以下示例为开发者角色赋予对 dev-team 项目的同步与查看权限:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly
policy.csv: |
p, role:developer, applications, get, dev-team/*, allow
p, role:developer, applications, sync, dev-team/*, allow
p, role:developer, applications, override, dev-team/*, allow
p, role:developer, logs, get, dev-team/*, allow
p, role:developer, exec, create, dev-team/*, allow
g, alice, role:developer
g, bob, role:developer
g, devops-team, role:admin
policy.default: role:readonly:未匹配到任何策略的用户默认只有只读权限。p, role:developer, applications, sync, dev-team/*, allow:允许 developer 角色对dev-team项目下的所有应用执行同步操作。g, alice, role:developer:将用户 alice 绑定到 developer 角色。
4.5.3 通过 Web UI 验证 RBAC
配置生效后,使用不同用户登录 Web UI 或 CLI 验证权限隔离效果:
- admin 用户:可以看到所有项目与应用,具备完全控制权。
- alice 用户:只能看到
dev-team项目下的应用,可以执行同步与查看日志,但无法删除应用或管理集群。 - 只读用户:只能查看应用状态,无法触发任何变更操作。
4.6 验证安装与配置
完成上述步骤后,执行以下命令验证 Argo CD 是否正常工作:
# 检查 API 版本与服务器状态
argocd version
# 列出当前集群中已注册的集群
argocd cluster list
# 检查当前用户权限
argocd account get-user-info
至此,Argo CD 的安装与基础配置已全部完成。下一阶段我们将深入仓库连接与项目配置,为 Helm 应用的持续交付铺平道路。