Flux 核心概念回顾

在深入节点池配置迁移与版本回滚巡检流程之前,必须牢固掌握 Flux 的核心架构与设计原则。本章将系统梳理 Flux 的架构组件、GitOps 原则、Kustomize/Helm 集成方式以及节点池(Cluster)概念,为后续章节的实操奠定理论基础。

2.1 Flux 架构

Flux 采用 Controller 模式 运行在 Kubernetes 集群内,通过一组相互协作的控制器实现声明式持续交付。其核心架构包含以下组件:

组件 职责 关键行为
source-controller 从 Git、Helm 仓库、Bucket 等源拉取配置 定期轮询源,将制品缓存为 Artifact
kustomize-controller 应用 Kustomize 覆盖并同步资源到集群 读取 Kustomization 对象,执行 kustomize build
helm-controller 管理 Helm Chart 的发布与升级 支持 HelmRelease 对象,执行 helm upgrade
notification-controller 处理事件通知与告警 将状态变更推送到 Slack、Webhook 等
image-automation-controller 自动更新镜像标签并提交回 Git 基于 ImagePolicy 自动修改 YAML 中的镜像版本
架构要点: Flux 的所有控制器均通过 Custom Resource Definitions (CRDs) 暴露配置接口,用户只需声明 GitRepository、Kustomization、HelmRelease 等资源对象,控制器即自动调和至期望状态。
Flux 控制器架构关系 Git 仓库 Helm 仓库 Bucket / S3 source-controller kustomize-controller helm-controller notification Kubernetes 集群(期望状态)

2.2 GitOps 原则

Flux 严格遵循 GitOps 四大原则,确保集群状态与 Git 仓库完全一致:

  1. 声明式描述:整个系统的期望状态通过 YAML 清单声明,存储在 Git 仓库中。
  2. 不可变制品:所有配置变更必须通过 Git 提交,不可直接修改集群资源。
  3. 自动调和:Flux 控制器持续对比 Git 中的期望状态与集群实际状态,自动修复偏差。
  4. 可审计回滚:每次变更都有 Git 提交记录,支持快速回滚到任意历史版本。
实践提示: 在节点池配置迁移场景中,GitOps 原则意味着所有节点池的 Cluster 对象、Kustomization 覆盖、HelmRelease 参数都必须先提交到 Git,再由 Flux 自动同步到目标集群,避免手动 kubectl apply 导致的配置漂移。

2.3 Kustomize 与 Helm 集成

Flux 同时支持 Kustomize 和 Helm 两种配置管理方式,用户可根据场景灵活选择或组合使用:

特性 Kustomize 集成 Helm 集成
配置来源 Git 仓库中的 YAML 文件 Helm Chart(OCI 或 Git 仓库)
覆盖方式 patches / overlays / bases values.yaml / --set 参数
Flux CRD Kustomization HelmRelease
版本管理 Git 提交历史 Chart 版本 + Git 提交历史
适用场景 纯 Kubernetes 原生资源、环境差异化 第三方应用、复杂依赖、版本语义化
集成最佳实践: 在节点池配置迁移中,通常使用 Kustomize 管理基础设施层(如 Cluster API 对象、网络策略),使用 Helm 管理应用层(如监控、日志、Ingress Controller),两者通过 Flux 的 dependsOn 机制编排执行顺序。
Kustomize 与 Helm 集成流程 Git 仓库 base/ overlays/ charts/ source-controller kustomize-controller helm-controller 集群 集成说明 • Kustomize 路径:source-controller 拉取 Git 制品 → kustomize-controller 执行 kustomize build → 应用到集群 • Helm 路径:source-controller 拉取 Chart → helm-controller 执行 helm upgrade --install → 发布到集群 • 依赖编排:Kustomization 和 HelmRelease 可通过 dependsOn 字段定义执行顺序 • 共享源:两者可共用同一个 GitRepository 对象,减少源拉取次数

2.4 节点池(Cluster)概念

在 Flux 生态中,节点池(Cluster) 并非 Flux 原生 CRD,而是指通过 Cluster API (CAPI) 或 Crossplane 等基础设施即代码工具管理的 Kubernetes 集群集合。Flux 通过以下方式与节点池交互:

  • Cluster 对象:声明一个 Kubernetes 集群的期望状态,包括控制平面、工作节点、网络配置等。
  • MachineDeployment / MachineSet:定义节点池的扩缩容策略、实例类型、可用区分布。
  • Flux 多集群管理:通过 Flux 的 Cluster 资源集(Cluster Resource Set)将相同的配置批量应用到多个节点池。
关键区别: 节点池的 生命周期管理(创建、升级、销毁)由 Cluster API 控制器负责,而 配置持续交付(应用部署、策略更新)由 Flux 控制器负责。两者通过 Git 仓库中的 YAML 清单解耦,实现基础设施与应用的独立演进。

在后续章节的 配置迁移 场景中,节点池概念将具体化为:

  1. 源节点池(旧版本集群,如 Kubernetes 1.24)
  2. 目标节点池(新版本集群,如 Kubernetes 1.27)
  3. Flux 配置集(Kustomization + HelmRelease 清单)

迁移流程的核心就是确保 Flux 配置集在源节点池与目标节点池之间平滑切换,同时保持 Git 仓库作为单一事实来源。