2. Flux核心概念回顾:Flux架构、GitOps工作流、Kustomize与Helm集成、节点池定义

2.1 Flux架构总览

Flux 是一套面向 Kubernetes 的 GitOps 工具链,采用控制器(Controller)模式运行在集群内部。其核心架构由多个独立、可组合的控制器组成,每个控制器负责一个特定的职责,通过自定义资源(CRD)进行配置。

架构设计原则: 单一职责、声明式配置、可观察性、安全优先(无需集群外直接暴露 API)。
Flux 核心架构图 Flux 核心架构图 Git 仓库 (应用清单 / Helm Chart) 声明式期望状态 Flux 控制器组 (Kubernetes 集群内) Source Controller Kustomize Controller Helm Controller Notification Controller Kubernetes 集群 Deployment Service ConfigMap ... 说明:Flux 通过 Source Controller 从 Git 仓库拉取配置,再由 Kustomize Controller 和 Helm Controller 将配置应用到集群,Notification Controller 负责事件通知。

2.2 GitOps 工作流

GitOps 是一种以 Git 仓库作为单一事实来源(Single Source of Truth)的运维模式。Flux 实现了Pull-based(拉取式)的 GitOps 工作流,与传统的 Push-based(推送式)CI/CD 有本质区别。

特性 Push-based (传统 CI/CD) Pull-based (Flux GitOps)
触发方式 CI 工具主动推送部署到集群 Flux 控制器定期从 Git 拉取状态
集群访问 CI 工具需要集群 API 凭证 集群内控制器主动拉取,无需外部凭证
状态一致性 依赖 CI 工具执行结果 持续调和(Reconcile),自动修复漂移
安全风险 CI 凭证泄露可导致集群被控 集群不对外暴露 API,风险更低
回滚方式 重新运行 CI Pipeline 或手动 kubectl Git revert 提交,Flux 自动回滚
核心工作流步骤:
  1. 开发者在 Git 仓库中修改 Kubernetes 清单或 Helm Chart。
  2. 提交并推送代码到 Git 仓库(通常经过 MR/PR 审查)。
  3. Flux Source Controller 检测到 Git 仓库变更(或按轮询间隔拉取)。
  4. Kustomize Controller / Helm Controller 根据 Git 中的期望状态,对集群进行调和。
  5. 集群状态与 Git 仓库状态保持一致,任何手动修改都会被 Flux 自动还原。

2.3 Kustomize 与 Helm 集成

Flux 原生支持两种主流的 Kubernetes 配置管理方式:Kustomize 和 Helm。两者通过不同的 CRD 进行声明式管理。

2.3.1 Kustomize 集成

Flux 通过 Kustomization CRD 管理 Kustomize 覆盖层。它支持从 Git 仓库或 OCI 制品中读取 Kustomize 项目,并自动应用。

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 5m
  path: ./deploy/overlays/production
  prune: true
  sourceRef:
    kind: GitRepository
    name: my-app-source
  postBuild:
    substitute:
      env: production
      version: "1.2.3"

2.3.2 Helm 集成

Flux 通过 HelmRelease CRD 管理 Helm Release。它支持从 Helm Repository、Git 仓库或 OCI 制品中拉取 Chart。

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 5m
  chart:
    spec:
      chart: my-app
      sourceRef:
        kind: HelmRepository
        name: my-app-charts
        namespace: flux-system
      interval: 1m
  values:
    replicaCount: 3
    image:
      tag: "1.2.3"
特性 Kustomize (Kustomization CRD) Helm (HelmRelease CRD)
配置方式 YAML 覆盖层(Overlay) Chart + Values 文件
模板能力 无模板,纯 YAML 合并 Go 模板引擎,功能强大
版本管理 Git 仓库版本 Chart 版本 + App 版本
依赖管理 无内置依赖 支持 Chart 依赖
适用场景 环境差异化、简单覆盖 复杂应用打包、版本发布

2.4 节点池定义

在 Flux 的上下文中,节点池(Node Pool)并非 Flux 原生 CRD,而是指一组具有相同配置目标的 Kustomization 或 HelmRelease 的逻辑集合。节点池通常用于管理同一集群内的多个环境(如 dev、staging、production)或多个租户的工作负载。

注意: 在《Flux 节点池配置迁移回滚巡检与版本校验》课程中,“节点池”特指一组通过 Flux 管理的、具有相同源(Source)和目标命名空间的配置集合。节点池的迁移与回滚是课程的核心操作对象。
节点池逻辑结构图 节点池逻辑结构图 Git 仓库 配置清单 节点池 A (Production) Kustomization HelmRelease 目标命名空间: prod 节点池 B (Staging) Kustomization HelmRelease 目标命名空间: staging 节点池定义要点 1. 每个节点池包含一组 Flux 资源 2. 共享相同的 Source (Git 仓库) 3. 目标命名空间隔离 4. 可独立进行迁移与回滚 5. 节点池是课程操作的最小单元 6. 巡检时按节点池维度检查 7. 版本校验针对节点池内所有资源

2.5 核心概念关系总结

以下表格梳理了 Flux 核心概念在节点池配置迁移与回滚场景中的角色:

概念 角色描述 与节点池的关系
GitRepository 声明 Git 仓库源,定义配置的拉取位置 节点池内所有资源共享同一个 Source
Kustomization 管理 Kustomize 覆盖层的应用 节点池的核心组成资源之一
HelmRelease 管理 Helm Chart 的发布 节点池的核心组成资源之一
OCIRepository 声明 OCI 制品源,用于存储 Kustomize 或 Helm Chart 可作为节点池的替代 Source
ImagePolicy / ImageUpdateAutomation 自动更新镜像版本 节点池版本校验的触发源之一
Notification 发送事件通知(如 Slack、Webhook) 节点池迁移/回滚的告警通道