Kubernetes 1.33:卷填充器进阶至 GA
Kubernetes 的卷填充器现已进阶至 GA(正式发布)!
AnyVolumeDataSource
特性门控在 Kubernetes v1.33 中设为始终启用,
这意味着用户可以将任何合适的自定义资源作为
PersistentVolumeClaim(PVC)的数据源。
以下是如何在 PVC 中使用 dataSourceRef 的示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
...
dataSourceRef:
apiGroup: provider.example.com
kind: Provider
name: provider1
新变化
从 Beta 进阶到 GA 后,主要有四个增强。
填充器 Pod 成为可选
在 Beta 阶段,Kubernetes 的贡献者们发现当正在进行卷填充时删除 PersistentVolumeClaim(PVC)可能导致资源泄露问题,这些泄漏是由于 Finalizer 处理机制的局限性所致。 在进阶至 GA 之前,Kubernetes 项目增加了在原始 PVC 被删除时对删除临时资源(PVC 派生体等)的支持。
为支持此能力,我们引入了三个基于插件的新函数:
PopulateFn()
:执行特定于提供程序的数据填充逻辑。PopulateCompleteFn()
:检查数据填充操作是否成功完成。PopulateCleanupFn()
:在数据填充完成后,清理由提供程序特定函数创建的临时资源。
有关提供程序的例子,参见 lib-volume-populator/example。
支持修改 Kubernetes 资源的 Mutator 函数
在 GA 版本中,CSI 卷填充器控制器代码新增了 MutatorConfig
,允许指定 Mutator 函数用于修改 Kubernetes 资源。
例如,如果 PVC 派生体不是 PVC 的完美副本,并且你需要为驱动提供一些特定于提供程序的信息,
你可以通过可选的 MutatorConfig
将这些信息加入。这使你能够自定义卷填充器中的 Kubernetes 对象。
灵活处理提供程序的指标
在 Beta 阶段,我们发现一个新需求:不仅需要从 lib-volume-populator 聚合指标,还要能够从提供程序代码库中的其他组件聚合指标。
为此,SIG Storage 引入了一个提供程序指标管理器。 此增强特性将指标逻辑的实现委托给提供程序自身,而不再仅仅依赖于 lib-volume-populator。 这种转变使指标收集与聚合更灵活、更好控制,有助于更好地观察提供程序的总体性能。
清理临时资源
在 Beta 阶段,我们发现当卷填充过程尚未完成时删除 PVC 会导致资源泄露问题,这是由于 Finalizer 的局限性引起的。在 GA 版本中,我们改善了填充器特性,在原始 PVC 被删除时支持删除临时资源(如 PVC 派生体等)。
如何使用
如需试用,请参考之前 Beta 版本博客中的操作步骤。
后续方向与潜在特性请求
下一阶段,卷填充器可能会引入以下特性请求:
- 多次同步:当前实现是从源到目的地的一次性单向同步,可以扩展为支持周期性同步或允许用户按需同步。
- 双向同步:多次同步的扩展版本,实现源与目的地之间的双向同步。
- 基于优先级的数据填充:提供多个 dataSourceRef,并按优先级进行数据填充。
- 从同一提供程序的多个源填充数据:将多个不同源填充到同一个目的地。
- 从不同提供程序的多个源填充数据:将多个不同源填充到一个目的地,支持流水线式的不同资源的填充。
为了确保我们构建的特性真正有价值,Kubernetes SIG Storage 非常希望了解你所知道的与此特性有关的任何具体使用场景。 如有任何关于卷填充器的疑问或特定问题,请联系 SIG Storage 社区。