3. Argo CD 安装与配置

本章将带领你完成 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
Argo CD 安装架构与组件交互 Kubernetes 集群 (argocd 命名空间) Helm Install argocd-server argocd-repo-server application-controller Redis (缓存) Web UI / CLI 核心交互:Server 接收请求 → Repo Server 拉取 Git → Controller 对比状态 → Redis 缓存加速

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
Argo CD RBAC 权限模型与访问控制流程 用户: alice (只读) 用户: bob (DevOps) Casbin 策略引擎 argocd-rbac-cm policy.csv Project: default Project: production 决策: Allow / Deny 策略匹配顺序:用户 → 角色 → 资源 (Project/Application) → 动作 (get/list/sync/update/delete) 默认策略 (policy.default) 应用于所有未匹配的用户,建议设为 readonly

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 证书配置错误。