Argo CD 基础回顾:核心概念、安装与配置
Argo CD 是 Kubernetes 生态中最主流的声明式 GitOps 持续交付工具。它通过将应用声明(Deployment、Service、ConfigMap 等)存储在 Git 仓库中,并自动同步到目标集群,实现“Git 仓库即真相来源”。在质量门禁与事故响应体系中,Argo CD 既是部署执行引擎,也是回滚与策略卡点的关键载体。
2.1 核心概念
理解 Argo CD 的三个核心抽象——Application、Project 和 Repo Server——是掌握其架构与配置的基础。
| 概念 | 角色 | 关键职责 |
|---|---|---|
| Application | 应用实例 | 定义 Git 源、目标集群/命名空间、同步策略与健康检查 |
| Project | 逻辑分组与权限边界 | 限制可访问的 Git 仓库、目标集群、资源类型及同步行为 |
| Repo Server | 仓库缓存与清单生成 | 克隆 Git 仓库、渲染 Helm/Kustomize/Jsonnet 模板、生成最终 Kubernetes 清单 |
质量门禁视角: Project 是租户隔离与策略卡点的第一道防线。通过 Project 级别的 Sync Windows、Source Repos 白名单和 Cluster 白名单,可以强制团队只能从经过审批的 Git 仓库部署到合规集群。
2.1.1 Application 深度解析
一个 Application 资源包含以下核心字段:
- source:Git 仓库 URL、目标路径、分支/标签、Helm Values 文件路径或 Kustomize overlay 目录。
- destination:目标集群(可通过 API Server URL 或 name 指定)和命名空间。
- syncPolicy:自动同步开关、自动创建命名空间、Prune(删除集群中已不在 Git 中的资源)策略。
- health:自定义健康检查,用于判断应用是否真正就绪。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: guestbook
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
2.1.2 Project 权限模型
Project 是 Argo CD 中实现多租户与安全卡点的核心单元。以下是一个典型的生产级 Project 配置:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production
namespace: argocd
spec:
sourceRepos:
- 'https://github.com/team-a/*'
- 'https://github.com/team-b/*'
destinations:
- namespace: 'prod-*'
server: https://kubernetes.default.svc
clusterResourceWhitelist:
- group: ''
kind: Namespace
syncWindows:
- kind: deny
schedule: '0 22 * * *'
duration: 8h
applications:
- '*-canary'
事故响应注意: Sync Windows 可以阻止非工作时间自动同步,避免夜间因错误配置引发大规模故障。在质量门禁体系中,建议为生产环境 Project 开启强制手动同步 + 审批流程。
2.1.3 Repo Server 缓存机制
Repo Server 是 Argo CD 的“清单生成引擎”。它负责:
- 从 Git 仓库拉取代码并缓存到本地。
- 根据 Application 定义的 source 类型(原生 YAML、Helm Chart、Kustomize、Jsonnet)渲染最终 Kubernetes 清单。
- 将生成的清单返回给 Application Controller 进行 diff 与同步。
Repo Server 的缓存策略直接影响同步性能与 Git 仓库的访问频率。生产环境建议配置持久化卷(PVC)并启用 --repo-cache-expiration 参数。
2.2 安装与配置
Argo CD 支持多种安装方式:Helm Chart、Kustomize 覆盖、Operator 或官方 Manifest。生产环境推荐使用 Helm Chart 进行安装,便于参数化配置与版本管理。
2.2.1 快速安装(Helm)
# 添加 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
# 创建命名空间
kubectl create namespace argocd
# 安装 Argo CD(生产建议使用固定版本)
helm install argocd argo/argo-cd \
--namespace argocd \
--version 7.1.1 \
--set server.service.type=LoadBalancer \
--set configs.params."server\.insecure"=true \
--set controller.replicas=2 \
--set repoServer.replicas=2
高可用建议: 生产环境至少部署 2 个 Application Controller 副本和 2 个 Repo Server 副本。Repo Server 建议挂载持久卷(PVC)以加速缓存重建。
2.2.2 关键配置参数
| 参数路径 | 默认值 | 生产推荐值 | 说明 |
|---|---|---|---|
server.service.type |
ClusterIP | LoadBalancer / Ingress | 对外暴露 API Server |
configs.params.server.insecure |
false | true(配合反向代理 TLS) | 关闭内置 TLS,由 Ingress 统一管理证书 |
controller.replicas |
1 | 2 | Application Controller 高可用 |
repoServer.replicas |
1 | 2 | Repo Server 高可用 |
configs.params.accounts.admin.enabled |
true | true | 启用 admin 本地账号(配合 RBAC) |
configs.rbac.policy.csv |
空 | 自定义 RBAC 策略 | 控制团队权限 |
2.2.3 获取初始密码与登录
# 获取 admin 初始密码
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
# 端口转发(本地调试)
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 通过 CLI 登录
argocd login localhost:8080 --username admin --password <密码>
2.2.4 配置 Git 仓库连接
Argo CD 支持通过 SSH 或 HTTPS 连接 Git 仓库。生产环境建议使用 Deploy Keys(SSH)或 GitHub App 进行认证,避免使用长期有效的个人 。
# 添加 SSH 私钥到 Argo CD
argocd repo add git@github.com:team-a/deployment.git \
--ssh-private-key-path ~/.ssh/argocd_deploy_key \
--name team-a-deploy
# 验证仓库连接状态
argocd repo list
2.3 生产环境配置清单
在将 Argo CD 接入质量门禁体系前,请逐项确认以下配置:
- 高可用:Controller、Repo Server、API Server 至少 2 副本。
- 持久化:Repo Server 挂载 PVC,避免重启后重新克隆所有仓库。
- 安全:禁用 admin 默认密码,集成 SSO(OIDC / Dex);启用 TLS。
- 审计:开启 Argo CD 审计日志,输出到集中式日志系统(如 ELK / Loki)。
- 备份:定期备份 Argo CD 的 CRD 资源(Application、Project、ConfigMap)。
- 监控:暴露 Prometheus 指标,配置告警规则(如 Sync 失败、OutOfSync 状态)。
事故响应前置: 建议在 Argo CD 中为每个生产 Application 配置
syncPolicy.retry 和 syncPolicy.automated.selfHeal,并设置 healthCheck 自定义 Liveness/Readiness 探针。当质量门禁检测到异常指标时,可以自动触发回滚或暂停同步。