CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Helm 与 GitOps 入门/课时/Flux 概览
RawBlame
课时目录12 节

Helm 与 GitOps 入门

  1. 01为什么需要 Helm
  2. 02安装 Helm 与仓库
  3. 03Chart 目录结构
  4. 04模板与 values
  5. 05install upgrade rollback
  6. 06依赖与子 Chart
  7. 07GitOps 是什么
  8. 08仓库布局与清单
  9. 09Argo CD 入门
  10. 10Flux 概览
  11. 11发布策略
  12. 12综合练习

Flux 概览

GitRepository、Kustomization、与 Argo 选型。

25 分钟

Flux 概览

这一课你将能做到

  1. 说出 Flux GitOps Toolkit 里 GitRepository、HelmRepository、HelmRelease、Kustomization 四个 CRD 各自的职责与配合关系
  2. 读懂并改写一段 HelmRelease YAML(含中文注释),说明它如何等价于「Git 触发的受控 helm upgrade」
  3. 用一张表对比 Argo CD 与 Flux 的选型维度,并给出「小团队先精通一个」的结论

为什么要学

Argo CD 用一张 Application「打包」了源与目的地;Flux(CNCF 毕业项目)则把它拆成多枚 CRD:先声明「源」(Git 仓库/Chart 仓库),再声明「交付」(HelmRelease/Kustomization 把源变成集群对象)。这种模块化让 Flux 与 Kustomize、镜像自动化(ImagePolicy/ImageRepository)组合更灵活,也让控制面更小;代价是初学者面对多个 CRD 容易懵。本课目标不是一天装完生产级 Flux,而是建立 能读懂、能选型 的地图——本站选 Argo 还是 Flux 都成立,概念完全互通。

先建立图像

GitRepository ──按 interval 拉取──► Git 仓库分支/路径
       │
       ├─► Kustomization ──► 应用某个 Kustomize 目录(含 post-build 编辑)
       │
       └─► HelmRelease ──chart.spec.sourceRef──► 指向 GitRepository 或 HelmRepository
                 │
                 └─ 集群内协调:安装/升级 Chart ≈ 受控的 helm upgrade
CRD人话关键字段
GitRepository「盯这个 Git」url、ref、interval
HelmRepository「盯这个 Chart 仓库」url、interval
HelmRelease「装/升这个 Chart + 参数」chart.spec、values、interval
Kustomization「应用这个 Kustomize 路径」path、sourceRef、prune

人话:Argo 的一张 Application,大致等价于 Flux 里「源 CR + 交付 CR」的组合拳;Flux 把这张票拆成两联,换来更细的组合自由。

跟着做

步骤 1:扫官方概念页,用自己的话总结

打开 Flux Concepts,用中文写四句话分别解释四个核心 CRD 干什么。禁止抄英文长段——能复述才算懂。应捕捉到两个关键词:源与交付分离、持续调和。

步骤 2:读懂 GitRepository(一切的地基)

# 源 CR:Flux 按 interval 拉取该仓库
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: coderoadmap
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/your-org/java-nav.git
  ref:
    branch: main

没有这一步,后面的 HelmRelease/Kustomization 就没有「货架」。注意拉取认证也在这层配置(私有库的 Secret 引用)。

步骤 3:读懂 HelmRelease(对标 backend-dev Application)

apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: backend namespace: coderoadmap-dev # Release 装到哪个 ns spec: interval: 5m # 调和周期 chart: spec: chart: ./deploy/charts/backend # 仓库内 Chart 路径 sourceRef: kind: GitRepository # Chart 来自上面声明的源 name: coderoadmap namespace: flux-system interval: 1m values: # 内联 values;也可 valuesFrom 引用资源 replicaCount: 1 image: repository: registry.example/coderoadmap-backend tag: "1.0.0-dev" db: host: mysql.coderoadmap-dev.svc passwordSecretName: backend-db-secret

对照流程:改 values.image.tag 并 commit → Flux 拉到变更 → HelmRelease 协调 → 等价一次带参数的 helm upgrade。生产更常见 valuesFrom(引用 ConfigMap/Secret,或配合 Kustomize post-build 从 env 文件注入),避免巨石内联。

步骤 4:若把本站 Argo 换成 Flux,要哪些 CR(迁移检查表)

  1. flux bootstrap git(官方引导,同时把 Flux 自身清单写回 Git)
  2. GitRepository 指向同一仓库
  3. HelmRelease(或 Kustomization)表达与 backend-dev Application 相同的 path/values
  4. 移除旧 Application——绝不两个控制器同时管同一组资源
  5. 验证 interval、凭据、网络出口,观察 flux get helmreleases 状态

这张表本身就是「两套工具概念互通」的证据:source/path/values 三要素一一对应。

步骤 5:填选型表并给结论

维度Argo CDFlux你更在意哪个
UI内置功能丰富社区 UI/CLI 为主
模型Application 为中心,一张票多 CRD 组合,源交付分离
Helm 支持一等公民HelmRelease 一等公民
Kustomize支持原生强项
生态与采用企业采用广、ApplicationSet 强CNCF 毕业、轻量、OCI 支持好
镜像自动化需配合其他组件(Argo Image Updater)内置 Image Automation

结论写死一行:「先精通 ____,另一套保持概念阅读能力,绝不并行接管同一应用。」

步骤 6:口头验收

一分钟说清:「Flux 用 GitRepository 定源,用 HelmRelease/Kustomization 定交付;和 Argo 比,是模块化多 CRD vs 一体化单 Application;排障时要看各 CR 的 Ready 条件而不是只看 Pod。」

讲清楚要点

  1. 因为源与交付分离,所以同一个 GitRepository 可被多个 HelmRelease/Kustomization 复用——平台源集中声明,业务交付各自独立。
  2. 因为 HelmRelease 在集群内协调,所以效果等价 helm upgrade 但触发来自 Git——这正是 Pull 模型的落地;values 改动=PR,调和=控制器。
  3. 因为 CR 较多,所以排障要按依赖链查——先 flux get sources git 看 Ready,再看 flux get helmreleases,最后才下钻业务 Pod;跳层排障会白忙。
  4. 因为 bootstrap 会把 Flux 自身清单写回 Git,所以仓库会多出 flux-system 目录——这是预期行为,纳入评审而不是手工删改。
  5. 因为与 Argo 概念互通,所以学透一套后另一套只是语法差异——忌「半吊子两套」并管一个应用,必然互相覆盖。
  6. 因为 values 可内联也可 valuesFrom,所以密钥纪律不变——Git 里永远只有 Secret 名或封存密文,明文密码无处可逃。

你可能会懵的地方

  • Flux v1 和 GitOps Toolkit 是什么关系? 现行 Flux(v2)是拆分后的 GitOps Toolkit 多控制器集合(source-controller、kustomize-controller、helm-controller…)。搜资料时看到「Flux v1/gitopsctl」的旧文一律跳过,认准 fluxcd.io 当前文档。

  • HelmRelease 的 values 和仓库里的 values 文件怎么协作? Chart 自带默认 values;HelmRelease.spec.values 内联覆盖;也可用 valuesFrom 引用 ConfigMap/Secret;配合 Kustomize 的 patchStrategicMerge/postBuild 还能把 env values 文件注入。避免的坏味道是「只改集群内联字段导致与 Git 文件漂移」——反正一切以 Git 为准。

  • 没有 UI 能用吗? 能。flux CLI + kubectl 足够覆盖日常;需要可视化再加 Weave GitOps 或第三方仪表盘。UI 需求是选型变量,不是功能缺陷。

  • Image Automation 是什么? Flux 可监视镜像仓库,按策略(ImageRepository/ImagePolicy)自动把新 tag 写回 Git 并开 PR——「CI 推镜像、Flux 提 PR、人工或自动合并」的渐进路径。入门先手改 values,理解后再开。

  • Flux 怎么装? 官方 flux bootstrap 一条命令:装控制器、建 GitRepository、把 Flux 自身的部署清单提交回 Git——从第一天起 Flux 管理自己,也是 GitOps 原则的自举示范。

错法对照

错法问题正解
Argo 与 Flux 同时管同一组资源互相覆盖、状态震荡只保留一个控制器
只写 HelmRelease 不写 GitRepository无源可拉,永远 Not Ready先源后交付
生产密码写进 HelmRelease.spec.values泄密进 GitvaluesFrom + ESO/封存方案
选型只看「谁更新潮」团队运维能力错配按 UI 需求、技能栈、生态定
interval 设 5s 且仓库巨大Git/Registry 限流与 API 压力分钟级间隔 + 收窄 path
直接在集群里 kubectl 改 HelmRelease与 Git 漂移,下轮被冲掉改 Git 走 PR

卡点急救

  1. 现象:HelmRelease 一直 build failed: chart not found——sourceRef 指向的 GitRepository 名/命名空间写错,或 chart: 路径不是仓库根的相对路径;flux get sources git 确认源 Ready,再核对路径。
  2. 现象:改了 Git 很久没生效——检查 GitRepository 的 interval 与最近拉取时间(flux get sources git -o wide);私有库查凭据 Secret;临时手动 flux reconcile source git coderoadmap 验证链路。
  3. 现象:flux get helmreleases 显示 upgrade retries exceeded——看 flux logs --kind=HelmRelease --name=backend 找渲染/安装错误,多数是 values 键名层级错误或依赖拉取失败;与 helm CLI 排障思路一致。

面试常问

  • Flux 的架构模型是怎样的? 基于 GitOps Toolkit 的多控制器架构:source-controller 负责拉取 Git/Helm 仓库/OCI 产物并产出「源」资源;kustomize-controller 按 Kustomization 应用清单;helm-controller 按 HelmRelease 渲染安装 Chart;notification-controller 负责事件通知。每个 CRD 都有 Ready 条件,按依赖链(源→交付→应用)逐层调和。

  • Flux 和 Argo CD 怎么选? 共同点:都实现 GitOps 四原则,都原生支持 Helm/Kustomize。差异:Argo 一体化、UI 强、ApplicationSet 适合大规模多租户;Flux 模块化、控制面轻、与 OCI/Image Automation 集成更原生、CNCF 毕业。选型看团队是否重 UI、应用规模、是否需要镜像自动更新——结论通常是小团队选一个做深,不建议并行接管同一应用。

  • HelmRelease 如何等价于 helm upgrade? HelmRelease 声明 chart 来源(Git/HelmRepository/OCI)与 values,helm-controller 在集群内执行渲染与安装升级,行为对应 helm upgrade --install 的语义(含 timeout、rollback 策略字段);差异在于触发者是 Git 变更与调和周期,而非人敲命令——这正是 GitOps Pull 模型的体现。

自测三问

  1. GitRepository 与 HelmRelease 如何配合完成一次「镜像 tag 升级」?画出数据流。
  2. 为什么说 Flux 更模块化?这对排障路径(该先看什么资源)意味着什么?
  3. 团队已在用 Argo CD 且运行良好,是否必须迁 Flux?给出决策依据。

小结一句话

Flux 用 GitRepository 等源 CR 加 HelmRelease/Kustomization 完成拉取式交付,与 Argo CD 目标相同、形状不同——源与交付分离是它的招牌;选一个做深,永远避免双控制器冲突。

延伸

  • Flux — Concepts
  • Flux — HelmRelease API
  • 下一课:发布策略——Rolling/Blue-Green/Canary 在 Helm 与 GitOps 里怎么落。
加载本节练习…
← 上一课Argo CD 入门下一课 →发布策略