Fleet多集群灰度发布准入与权限治理 - 第1节

1.1 Fleet 是什么

Fleet 是 Rancher 生态中面向大规模 Kubernetes 多集群环境的持续交付与 GitOps 引擎。它并非简单的应用分发工具,而是一套以“声明式管理”为核心、以“集群舰队”为管理单元的平台级组件。

Fleet 的核心设计理念可以概括为:

  • GitOps 驱动:所有集群状态、应用版本、配置变更都以 Git 仓库为单一事实来源。
  • 多集群统一:将成百上千个 Kubernetes 集群抽象为“舰队(Fleet)”,实现批量管理。
  • 差异化部署:支持按集群标签、环境、区域等维度定义不同的部署策略。
  • 准入与门禁:内置健康检查、资源验证、灰度发布准入控制,确保变更安全可控。
关键认知:Fleet 不是 CI/CD 工具链的替代品,而是位于 Git 仓库与多集群之间的“调度与准入层”。它负责将 CI 产出的制品安全、可控地分发到不同集群,并持续保证集群状态与 Git 一致。

1.2 Fleet 在云原生多集群管理中的角色

在云原生多集群管理体系中,Fleet 处于控制面与工作负载面之间的枢纽位置。下表清晰展示了 Fleet 与周边组件的关系:

层级 组件/工具 Fleet 的角色
源码与 CI GitHub / GitLab / Jenkins / Argo Workflows Fleet 监听 Git 仓库变更,拉取最新 manifests
制品仓库 Harbor / Docker Hub / OCI Registry Fleet 通过 Helm / Kustomize 引用制品,不直接存储
多集群控制面 Rancher Manager / Fleet Controller Fleet 是核心控制引擎,负责策略解析、准入检查、分发调度
工作集群 Kubernetes 集群(生产/预发/测试/边缘) Fleet Agent 在目标集群执行资源同步与状态上报
可观测性 Prometheus / Grafana / Rancher Monitoring Fleet 暴露集群状态、部署进度、健康指标

Fleet 在以下典型场景中扮演关键角色:

  • 多环境灰度发布:从开发 → 测试 → 预发 → 生产,Fleet 按标签逐批推送。
  • 边缘集群批量管理:数百个边缘站点统一纳管,Fleet 自动处理网络中断后的重试与回滚。
  • 多租户隔离部署:不同团队共享同一套 Fleet 控制面,通过命名空间与 RBAC 实现隔离。
  • 合规与准入门禁:在应用部署前执行 OPA/Kyverno 策略检查,不符合策略的变更被拒绝。

1.3 Fleet 核心组件与架构

Fleet 采用控制面 + Agent 的经典分布式架构。控制面运行在“管理中心集群”,Agent 运行在每个“工作集群”中。下面通过架构图直观展示各组件及其交互关系:

Fleet 核心组件架构图 Fleet 核心组件架构图 Fleet 控制面(管理中心集群) Git 仓库 Fleet Controller 策略引擎 准入检查 集群状态存储 Fleet API Server Controller 协调策略引擎与准入检查,结果写入集群状态存储 工作集群(多个) Fleet Agent 资源同步器 本地状态缓存 健康检查 Agent 定期向控制面上报状态,接收部署指令 gRPC / WebSocket 状态上报 Fleet 控制面通过 GitOps 模式驱动,Agent 在工作集群执行并反馈状态 支持数百个集群的并发管理与灰度准入控制

1.3.1 控制面组件详解

组件 职责 关键技术
Fleet Controller 核心协调器,监听 Git 仓库变更,解析 Fleet 资源定义(Bundle、ClusterGroup),驱动部署流程 Kubernetes Controller 模式、Informer、WorkQueue
策略引擎 加载 OPA/Kyverno 策略,对即将部署的资源进行合规性检查 Rego 策略、Kyverno ClusterPolicy
准入检查 在资源下发到工作集群前执行门禁检查(镜像签名、命名空间白名单、资源配额等) Admission Webhook、ValidatingAdmissionPolicy
集群状态存储 维护所有工作集群的实时状态、部署进度、健康度 CRD(Cluster、ClusterGroup、Bundle)、Etcd
Fleet API Server 对外暴露 REST API,供 Rancher UI、CLI、第三方系统集成 Kubernetes API 扩展、Aggregation Layer

1.3.2 工作集群组件详解

组件 职责 关键技术
Fleet Agent 与控制面建立长连接,接收部署指令,执行资源同步,上报状态 gRPC Stream、WebSocket、Client-go
资源同步器 将控制面下发的 manifests 应用到工作集群,处理 Helm Chart、Kustomize 等 Helm SDK、Kustomize、Server-Side Apply
本地状态缓存 缓存当前集群已部署的资源版本与状态,减少与控制面的频繁通信 Local Informer、ConfigMap 存储
健康检查 定期检查工作集群节点、系统组件、关键应用的运行状态 Node Health、Pod Ready、自定义 Probe

1.3.3 核心资源模型

Fleet 通过以下 CRD 资源定义多集群部署模型:

  • Cluster:代表一个注册到 Fleet 的工作集群,包含连接信息、标签、状态。
  • ClusterGroup:将多个 Cluster 按标签选择器分组,用于批量部署。
  • Bundle:定义要部署的应用内容(Helm Chart / 原生 YAML / Kustomize),以及目标集群组。
  • BundleDeployment:Bundle 在单个集群上的实际部署实例,记录部署状态与历史。
架构要点:Fleet 的 CRD 设计遵循 Kubernetes 声明式 API 规范,所有资源都可以通过 kubectl apply 管理。这意味着你可以将 Fleet 资源本身也纳入 GitOps 流程,实现“管理平台的管理平台”。

1.4 Fleet 工作流程概览

下面通过第二个 SVG 图展示一次完整的部署流程,从 Git 提交到多集群生效:

Fleet 部署工作流程 Fleet 部署工作流程(Git → 多集群) 1. Git 提交 开发者推送 manifests 2. Controller 检测 监听 Git 仓库变更 3. 准入检查 策略验证 / 门禁 4. 分发到集群组 按标签匹配目标 5. 执行 Agent 同步 工作集群组 集群 A(生产) 集群 B(预发) 集群 C(测试) 集群 D(边缘) 集群 E(开发) 批量分发 状态反馈(Agent → Controller) 整个流程由 Git 事件触发,Fleet Controller 协调准入检查与分发,Agent 在工作集群执行并持续反馈状态 支持灰度发布:先推送 10% 集群,验证通过后再逐步扩大范围
重要提示:Fleet 的准入检查发生在步骤 3,即在资源分发到工作集群之前。这意味着不符合策略的变更会被拦截在控制面,不会污染任何工作集群。这是实现“门禁灰度发布”的关键机制,后续章节将深入讲解如何配置自定义准入规则。

1.5 本章小结

  • Fleet 是 Rancher 生态的多集群 GitOps 引擎,以声明式方式管理大规模 Kubernetes 集群。
  • 在云原生多集群管理体系中,Fleet 充当控制面与工作负载面之间的调度与准入层。
  • 核心架构分为控制面(Controller、策略引擎、准入检查、状态存储、API Server)和工作集群(Agent、资源同步器、本地缓存、健康检查)两部分。
  • 核心资源模型包括 Cluster、ClusterGroup、Bundle、BundleDeployment,全部以 CRD 形式管理。
  • 部署流程为:Git 提交 → Controller 检测 → 准入检查 → 分发到集群组 → Agent 执行 → 状态反馈。