技术
Flux CD
让 Kubernetes 集群与 Git 保持同步的 GitOps 工具包
Flux 是一组持续交付控制器,让 Kubernetes 集群与各种配置来源保持同步,例如 Git 仓库、Helm 仓库和 OCI 镜像仓库。部署就变成了合并一个拉取请求,而不是对集群执行命令式操作。
工作原理
Flux 以少量控制器的形式运行在你的集群内部。每个控制器只做一件事:一个负责获取 source,一个负责应用 Kubernetes 清单,一个负责管理 Helm release,依此类推。它们通过 Kubernetes 自定义资源通信,因此你配置的一切本身就是可以存放在 Git 中的 YAML。Flux 甚至可以管理它自己的安装:flux bootstrap 命令会将 Flux 的清单提交到你的仓库,然后从中同步。
核心概念
- Source —— 期望状态的存放位置:
GitRepository、HelmRepository、OCIRepository或Bucket。Source 对象获取并缓存一个制品,供其他控制器使用。 - Kustomization —— Flux 自己的资源,告诉集群应用某个 source 的哪个路径、多久一次,以及带哪些选项(prune、健康检查、依赖)。不要与 Kustomize 的
kustomization.yaml混淆,Flux 也可以构建后者。 - HelmRelease —— 从 Helm 仓库、Git 仓库或 OCI 镜像仓库安装并升级 Helm chart,并带有完整的 release 生命周期处理。
- Reconciliation(调谐) —— 控制器将 Git 中声明的内容与实际运行的内容进行比较,并修正差异的循环。它按间隔运行,也可按需运行。
- Bootstrap —— 将 Flux 安装到集群中,并将其连接到 Git 仓库,使 Flux 自己管理自己。
- Controllers(控制器) —— source、kustomize、helm、notification,以及可选的 image-reflector 和 image-automation 控制器。
为什么团队选择 Flux 实践 GitOps
- 默认可审计。 集群的每一次变更都有一次提交,通常还有一个经过审查的拉取请求。
- 回滚简单。 回退一次部署只需
git revert,而不是在压力之下手动执行kubectl操作。 - 可组合。 只安装你需要的控制器,并且可以独立扩展它们。
- 为平台团队而构建。 原生的 SOPS 密钥解密、基于 Kubernetes RBAC 的多租户、OCI 制品和自动镜像更新,都是工具包的一部分。
- 漂移修正。 直接对集群做的修改会在下一次调谐时被还原。
快速开始
安装 flux CLI,针对一个 Git 仓库将 Flux bootstrap 到集群中,并添加指向你清单(纯 YAML、Kustomize overlay 或 Helm chart)的 GitRepository 和 Kustomization。下面的指南将带你走过最常见的配置,从单个应用到多个集群和租户。它们基于 Flux 2.9 编写;请查阅 Flux 文档,了解你所安装的版本。