Flux v2.7 正式发布
Flux v2.7.0 现已正式发布。
主要更新
Flux v2.7 标志着镜像更新自动化功能的正式 GA,同时引入了新的 ExternalArtifact 和 ArtifactGenerator API,用于支持更复杂的源组合与拆分模式。
本次发布还为 Flux 控制器增加了多项新功能,包括支持监控 ConfigMaps 和 Secrets 的引用变更、通过 CEL 表达式扩展依赖的就绪状态评估,以及支持 OpenTelemetry 跟踪 Flux Kustomization 和 HelmRelease 的调和过程。
生态系统方面,发布了新版本的 Flux Operator,集成了集群内镜像自动更新功能,支持 GitLess GitOps 工作流。
镜像更新自动化正式 GA
本版本实现了 Flux Image Automation API 和控制器的 GA。image-reflector-controller 和 image-automation-controller 联动,当容器镜像仓库有新镜像时,会自动更新 Git 仓库中的 Kubernetes 清单。
以下 API 已升级为稳定版 v1:
- ImageRepository
- ImagePolicy
- ImageUpdateAutomation
ImagePolicy API 新增了 .spec.suspend 字段,用于暂停和恢复策略评估。ImageUpdateAutomation 支持 Git 稀疏检出,启用方式是在 image-automation-controller 中添加 --feature-gates=GitSparseCheckout=true
参数。
此外,image-automation-controller 现支持使用 Kubernetes Workload Identity 认证 AzureDevOps 仓库。
不兼容变更:
-
image-reflector-controller 中自 2023 年起弃用的 autologin 参数已移除,用户需在 ImageRepository.spec.provider 设置相应云厂商。
-
ImageUpdateAutomation 中弃用自 2024 年起的 commit 模板字段
.Updated
和.Changed.ImageResult
被移除,建议迁移到:-
.Changed.FileChanges
(详细变更) -
.Changed.Objects
(对象级变更) -
.Changed.Changes
(扁平变更列表)
-
监控 ConfigMaps 和 Secrets 的变更
从 Flux v2.7 起,kustomize-controller、helm-controller 和 notification-controller 支持监控 ConfigMaps 和 Secrets 的引用变更。
监控的引用字段包括:
-
Kustomization.spec.postBuild.substituteFrom
-
Kustomization.spec.decryption.secretRef
-
Kustomization.spec.kubeConfig.secretRef
-
Kustomization.spec.kubeConfig.configMapRef
-
HelmRelease.spec.valuesFrom
-
HelmRelease.spec.kubeConfig.secretRef
-
HelmRelease.spec.kubeConfig.configMapRef
-
Receiver.spec.secretRef
当被监控的 ConfigMap 或 Secret 变更,且对象标记有 reconcile.fluxcd.io/watch: Enabled
标签时,控制器会立即触发调和。
若想监控所有引用对象而不需要打标签,可通过 --watch-configs-label-selector=owner!=helm
参数配置控制器。
远程集群的 Workload Identity 认证
Flux v2.7 支持在 Kustomization 和 HelmRelease 资源层面配置 Workload Identity,用于 hub-and-spoke 模式中云厂商认证。
这让集群管理员可以使用 hub 集群的云身份认证 spoke 集群,无需创建和管理静态 kubeconfig Secrets。
更多配置详情参考:
-
Kustomization - remote cluster apply
-
HelmRelease - remote cluster apply
对象级 Workload Identity
Flux v2.7 完成了 Kubernetes Workload Identity 对所有支持云厂商认证的 Flux API 的集成,支持以下资源:
-
Bucket.spec.serviceAccountName(认证 AWS S3、Azure Blob、Google Cloud Storage)
-
GitRepository.spec.serviceAccountName(认证 Azure DevOps)
-
OCIRepository.spec.serviceAccountName(认证 AWS ECR、Azure Container Registry、Google Artifact Registry)
-
ImageRepository.spec.serviceAccountName(同上)
-
Kustomization.spec.decryption.serviceAccountName(认证 AWS KMS、Azure Key Vault、Google KMS)
-
Kustomization.spec.kubeConfig.configMapRef.name(认证远程 AWS EKS、Azure AKS、Google GKE)
-
HelmRelease.spec.kubeConfig.configMapRef.name(同上)
-
Provider.spec.serviceAccountName(认证 Azure DevOps、Azure Event Hub、Google Pub/Sub)
更多配置说明见:
-
AWS Workload Identity
-
Azure Workload Identity
-
GCP Workload Identity
OpenTelemetry 跟踪支持
从 Flux v2.7 起,用户可通过配置类型为 otel 的 Provider,启用 Flux 调和的 OpenTelemetry 跟踪:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind:Provider
metadata:
name:jaeger
namespace:flux-system
spec:
type:otel
address:http://jaeger-collector.jaeger:4318/v1/traces
notification-controller 会将 Flux 事件转换为 OTEL span,并基于 Flux 对象层级建立正确的追踪关系。源对象(GitRepository、HelmChart、OCIRepository、Bucket)生成根 span,Kustomization 和 HelmRelease 生成子 span。每个 span 包含事件元数据,服务标识使用告警名称和命名空间。
更多配置细节参考 notification-controller 文档。
控制器改进
-
GitRepository API 支持 GitHub App 的 mTLS 认证。
-
Kustomization API 支持 CEL 表达式扩展依赖就绪状态评估。
-
新增
.spec.ignoreMissingComponents
字段,忽略源中缺失的 Kustomize 组件。 -
kustomize-controller 支持针对 Age 密钥的全局 SOPS 解密。
-
kustomize-controller 可配置在检测到新源版本时取消当前健康检查(
--feature-gates=CancelHealthCheckOnNewRevision=true
)。 -
HelmRelease API 支持 CEL 表达式扩展依赖就绪状态评估。
-
HelmRelease 新增 RetryOnFailure 策略,改善发布失败处理。
-
Provider API 支持通过
spec.proxySecretRef
设置代理,spec.certSecretRef
配置 mTLS。 -
Provider API 新增 Zulip 和 OpenTelemetry 跟踪支持。
CLI 改进
-
flux bootstrap
和flux install
支持--components-extra=source-watcher
参数,启用新组件 source-watcher。 -
新增
flux migrate
命令,将 Kubernetes etcd 中的 Flux 资源迁移至最新 API 版本。 -
flux debug
增加--show-history
,显示 Flux 对象调和历史。 -
flux diff
支持处理kustomize.toolkit.fluxcd.io/force: Enabled
注解。 -
flux create hr
增加--storage-namespace
参数,改变 Helm 存储对象的命名空间。 -
新增 ImagePolicy 相关命令:
-
flux reconcile image policy
-
flux suspend image policy
-
flux resume image policy
-
-
新增 ArtifactGenerator 相关命令:
-
flux get artifact generator
-
flux export artifact generator
-
flux tree artifact generator
-
flux events --for ArtifactGenerator/<name>
-
Artifact Generators
Flux v2.7 新增 source-watcher 组件,可通过 --components-extra=source-watcher
开启。
source-watcher 控制器实现了 ArtifactGenerator API,支持:
-
多个 Flux 源(GitRepository、OCIRepository、Bucket)组合成单一可部署工件
-
将 monorepo 拆分成多个独立工件,各自拥有独立部署生命周期
-
只在特定路径变更时触发调和,提升效率
-
方便构建由不同团队维护的分布式复杂部署
多源组合示例
ArtifactGenerator 可将多个源组合成单个部署工件,比如将上游 OCI Helm Chart 与组织自定义配置合并:
apiVersion: source.extensions.fluxcd.io/v1beta1
kind:ArtifactGenerator
metadata:
name:podinfo
namespace:apps
spec:
sources:
-alias:chart
kind:OCIRepository
name:podinfo-chart
-alias:repo
kind:GitRepository
name:podinfo-values
artifacts:
-name:podinfo-composite
originRevision:"@chart"
copy:
-from:"@chart/"
to:"@artifact/"
-from:"@repo/charts/podinfo/values.yaml"
to:"@artifact/podinfo/values.yaml"
strategy:Overwrite
-from:"@repo/charts/podinfo/values-prod.yaml"
to:"@artifact/podinfo/values.yaml"
strategy:Merge
---
apiVersion:helm.toolkit.fluxcd.io/v2
kind:HelmRelease
metadata:
name:podinfo
namespace:apps
spec:
interval:15m
releaseName:podinfo
chartRef:
kind:ExternalArtifact
name:podinfo-composite
Monorepo 拆分示例
ArtifactGenerator 可将 monorepo 拆分为多个独立工件,分别管理生命周期:
apiVersion: source.extensions.fluxcd.io/v1beta1
kind:ArtifactGenerator
metadata:
name:app-decomposer
namespace:apps
spec:
sources:
-alias:git
kind:GitRepository
name:monorepo
artifacts:
-name:frontend
originRevision:"@git"
copy:
-from:"@git/deploy/frontend/**"
to:"@artifact/"
-name:backend
originRevision:"@git"
copy:
-from:"@git/deploy/backend/**"
to:"@artifact/"
---
apiVersion:kustomize.toolkit.fluxcd.io/v1
kind:Kustomization
metadata:
name:frontend-service
namespace:apps
spec:
interval:15m
prune:true
sourceRef:
kind:ExternalArtifact
name:frontend
path:./
---
apiVersion:kustomize.toolkit.fluxcd.io/v1
kind:Kustomization
metadata:
name:backend-service
namespace:apps
spec:
interval:15m
prune:true
sourceRef:
kind:ExternalArtifact
name:backend
path:./
backend-service 仅在 deploy/backend/
变更时触发调和,其他服务不受影响。
更多使用详情见 source-watcher 文档。
支持的版本
Flux v2.4 已停止维护,不再支持。
Flux v2.7 支持以下 Kubernetes 版本:
企业支持方面,CNCF Flux 项目仅支持 Kubernetes 最近三个小版本。对于更早版本,企业用户可通过 ControlPlane 等厂商获取 Flux 企业级支持。
更多详情可查看官方公告。
同类文章推荐: