3. Argo CD 安装与配置:Helm 安装、CLI 配置、Web UI 登录、RBAC 基础设置
本章将带领你完成 Argo CD 的完整安装与初始化配置。我们将采用 Helm 作为包管理工具进行部署,随后配置 CLI 命令行工具、完成 Web UI 登录,并设置基础的 RBAC 权限模型。这是后续所有 GitOps 调度策略调优的基石。
前置条件:确保你已拥有一个运行中的 Kubernetes 集群(v1.20+),并已安装 Helm v3.8+ 和 kubectl。建议集群至少有 2 个 Worker 节点,4 核 8G 内存以上。
3.1 使用 Helm 安装 Argo CD
Helm 是部署 Argo CD 到生产环境的首选方式,它提供了灵活的 Values 覆盖机制,便于后续的配置管理和版本回滚。
3.1.1 添加 Helm 仓库并创建命名空间
# 添加 Argo CD 官方 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
# 更新本地仓库索引
helm repo update
# 创建独立的命名空间
kubectl create namespace argocd
3.1.2 使用 Values 文件进行生产级安装
以下是一个经过调优的 values.yaml 示例,包含了高可用、资源限制和 Ingress 配置:
# values.yaml
global:
# 关闭默认的 ClusterRole 聚合,避免 RBAC 冲突
aggregateRoles: false
controller:
replicas: 2
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1024Mi"
server:
replicas: 2
# 启用 gRPC 和 HTTPS
extraArgs:
- --insecure
ingress:
enabled: true
ingressClassName: nginx
hosts:
- argocd.example.com
tls:
- secretName: argocd-tls
hosts:
- argocd.example.com
repoServer:
replicas: 2
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
redis:
enabled: true
architecture: standalone
# 执行安装
helm install argocd argo/argo-cd \
--namespace argocd \
--values values.yaml \
--version 7.7.0 \
--create-namespace
# 验证 Pod 状态
kubectl get pods -n argocd -w
关键组件说明:
- argocd-server:API 服务 + Web UI,负责认证、应用管理和 Git 仓库交互。
- argocd-repo-server:仓库服务器,负责克隆、缓存 Git 仓库并生成 Manifests。
- argocd-application-controller:核心控制器,持续对比 Git 中的期望状态与集群中的实际状态。
- argocd-redis:缓存层,用于存储应用状态和 Git 仓库缓存。
3.2 配置 Argo CD CLI
CLI 是日常运维和调试的核心工具,支持应用同步、回滚、参数覆盖等高级操作。
3.2.1 安装 CLI 工具
# Linux / macOS (使用 Homebrew)
brew install argocd
# Linux (使用 curl 下载最新版本)
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
3.2.2 登录并获取初始密码
# 获取初始 admin 密码(自动生成)
kubectl get secret argocd-initial-admin-secret \
-n argocd \
-o jsonpath="{.data.password}" | base64 -d
# 使用 CLI 登录(端口转发方式)
kubectl port-forward svc/argocd-server -n argocd 8080:443 &
argocd login localhost:8080 \
--username admin \
--password <初始密码> \
--insecure
# 修改密码
argocd account update-password
安全提示:生产环境中请勿使用
--insecure 参数。应配置有效的 TLS 证书(如 cert-manager + Let's Encrypt),并通过 Ingress 或 LoadBalancer 暴露服务。
3.3 Web UI 登录与界面导航
Argo CD 的 Web UI 提供了可视化的应用管理面板,支持实时状态监控、同步操作和资源拓扑查看。
3.3.1 访问 Web UI
通过 Ingress 或端口转发访问:
# 端口转发方式
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 浏览器访问
# https://localhost:8080
3.3.2 界面核心功能区
| 区域 | 功能描述 | 操作要点 |
|---|---|---|
| Applications | 应用列表视图,展示同步状态、健康状态和资源树 | 支持按项目、集群、状态过滤 |
| Settings | 全局配置,包括仓库、证书、SSH 密钥、Webhook | 仓库凭证建议使用 Secret 管理 |
| User Info | 当前用户信息、 管理和权限范围 | 可生成长期有效的 API |
| Projects | 项目级隔离,控制应用归属和资源配额 | 每个业务线建议独立 Project |
3.4 RBAC 基础设置
Argo CD 的 RBAC 基于 Project 和 Policy 两层模型。默认安装后仅有一个 admin 超级管理员账号,我们需要为团队创建不同权限的角色。
3.4.1 RBAC 配置结构
RBAC 配置存储在 argocd-rbac-cm ConfigMap 中,核心是 policy.csv 字段,使用 Casbin 语法:
# policy.csv 示例
p, role:readonly, applications, get, */*, allow
p, role:readonly, applications, list, */*, allow
p, role:devops, applications, sync, */*, allow
p, role:devops, applications, update, */*, allow
p, role:devops, applications, delete, */*, allow
g, alice, role:readonly
g, bob, role:devops
3.4.2 配置本地用户与角色绑定
通过 argocd-cm ConfigMap 配置本地用户:
# argocd-cm 配置片段
data:
accounts.alice: login
accounts.bob: , login
accounts.bob.enabled: "true"
然后更新 argocd-rbac-cm 应用策略:
# 使用 kubectl 编辑 ConfigMap
kubectl edit configmap argocd-rbac-cm -n argocd
# 添加以下内容
data:
policy.csv: |
p, role:readonly, applications, get, */*, allow
p, role:readonly, applications, list, */*, allow
p, role:devops, applications, *, */*, allow
g, alice, role:readonly
g, bob, role:devops
policy.default: role:readonly
RBAC 最佳实践:
- 最小权限原则:默认角色设为
role:readonly,仅赋予必要的操作权限。 - Project 隔离:每个业务线创建独立 Project,在 Policy 中限定
proj/<project-name>/*。 - SSO 集成:生产环境建议对接 LDAP/OIDC,避免使用本地密码。
- 审计日志:开启
argocd-server的审计日志,记录所有 API 调用。
3.4.3 验证 RBAC 配置
# 以 alice 身份登录(只读)
argocd login localhost:8080 --username alice --password <password>
# 尝试同步应用(应被拒绝)
argocd app sync guestbook
# 输出: ERROR rpc error: permission denied
# 以 bob 身份登录(DevOps 角色)
argocd login localhost:8080 --username bob --password <password>
# 同步应用(应成功)
argocd app sync guestbook
3.5 安装后验证清单
完成上述步骤后,请对照以下清单进行验证:
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| Pod 状态 | kubectl get pods -n argocd |
所有 Pod 处于 Running 状态,Ready 为 1/1 |
| CLI 登录 | argocd account get-user-info |
返回当前用户信息和角色 |
| Web UI 访问 | 浏览器打开 https://argocd.example.com | 正常显示登录页面,登录后进入应用列表 |
| RBAC 权限 | 使用只读用户尝试同步应用 | 返回 permission denied 错误 |
| 仓库连接 | argocd repo add https://github.com/example/repo.git |
成功添加,状态为 Successful |
排障提示:如果 Pod 启动失败,请检查
argocd-server 的日志:kubectl logs -n argocd deployment/argocd-server --tail=50。常见问题包括:Redis 连接超时(检查网络策略)、RBAC ConfigMap 格式错误(YAML 缩进问题)、Ingress 证书配置错误。