2. Flux核心概念回顾:Flux架构、GitOps工作流、Kustomize与Helm集成、节点池定义
2.1 Flux架构总览
Flux 是一套面向 Kubernetes 的 GitOps 工具链,采用控制器(Controller)模式运行在集群内部。其核心架构由多个独立、可组合的控制器组成,每个控制器负责一个特定的职责,通过自定义资源(CRD)进行配置。
架构设计原则: 单一职责、声明式配置、可观察性、安全优先(无需集群外直接暴露 API)。
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 自动回滚 |
核心工作流步骤:
- 开发者在 Git 仓库中修改 Kubernetes 清单或 Helm Chart。
- 提交并推送代码到 Git 仓库(通常经过 MR/PR 审查)。
- Flux Source Controller 检测到 Git 仓库变更(或按轮询间隔拉取)。
- Kustomize Controller / Helm Controller 根据 Git 中的期望状态,对集群进行调和。
- 集群状态与 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)和目标命名空间的配置集合。节点池的迁移与回滚是课程的核心操作对象。
2.5 核心概念关系总结
以下表格梳理了 Flux 核心概念在节点池配置迁移与回滚场景中的角色:
| 概念 | 角色描述 | 与节点池的关系 |
|---|---|---|
| GitRepository | 声明 Git 仓库源,定义配置的拉取位置 | 节点池内所有资源共享同一个 Source |
| Kustomization | 管理 Kustomize 覆盖层的应用 | 节点池的核心组成资源之一 |
| HelmRelease | 管理 Helm Chart 的发布 | 节点池的核心组成资源之一 |
| OCIRepository | 声明 OCI 制品源,用于存储 Kustomize 或 Helm Chart | 可作为节点池的替代 Source |
| ImagePolicy / ImageUpdateAutomation | 自动更新镜像版本 | 节点池版本校验的触发源之一 |
| Notification | 发送事件通知(如 Slack、Webhook) | 节点池迁移/回滚的告警通道 |