Kubernetes 1.33:卷填充器(Volume Populators)进阶至 GA

Kubernetes 卷填充器(volume populators) 现已正式发布(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 版本相比,有四大主要增强功能。

填充器 Pod 是可选的

在 Beta 阶段,Kubernetes 的贡献者们发现,在卷填充过程中删除 PersistentVolumeClaim (PVC) 时可能会出现资源泄漏问题;这些泄漏是由于 Finalizer 处理的限制造成的。在升级到正式版之前,Kubernetes 项目增加了对删除临时资源(如 PVC Prime 等)的支持,前提是原始 PVC 已被删除。

为了实现这一点,我们引入了三个新的基于插件的函数

  • PopulateFn(): 执行特定于供应程序的数据填充逻辑。
  • PopulateCompleteFn(): 检查数据填充操作是否已成功完成。
  • PopulateCleanupFn(): 在数据填充完成后,清理由特定于供应程序的函数创建的临时资源。

lib-volume-populator/example 中添加了一个供应程序示例。

用于修改 Kubernetes 资源的 Mutator 函数

对于正式版,CSI 卷填充器控制器代码增加了一个 MutatorConfig,允许指定用于修改 Kubernetes 资源的 Mutator 函数。例如,如果 PVC Prime 不是 PVC 的精确副本,并且你需要驱动程序的特定于供应程序的信息,你可以将这些信息包含在可选的 MutatorConfig 中。这使你可以在卷填充器中自定义 Kubernetes 对象。

为供应程序提供灵活的度量标准处理

我们的 Beta 阶段凸显了一个新需求:不仅需要聚合来自 lib-volume-populator 的度量标准,还需要聚合来自供应程序代码库中其他组件的度量标准。

为解决此问题,SIG Storage 引入了供应程序度量标准管理器。这一增强功能将度量标准逻辑的实现委托给供应程序本身,而不是完全依赖 lib-volume-populator。这种转变在度量标准收集和聚合方面提供了更大的灵活性和控制力,从而能够更全面地了解供应程序性能。

清理临时资源

在 Beta 阶段,我们发现在卷填充过程中删除 PersistentVolumeClaim (PVC) 时,由于 Finalizer 处理的限制,可能会出现资源泄漏。在此次正式版发布中,我们改进了填充器,以支持在原始 PVC 被删除时删除临时资源(如 PVC Prime 等)。

如何使用它

要试用此功能,请按照之前 Beta 版博客中的步骤进行操作。

未来方向和潜在功能请求

下一步,卷填充器有几个潜在的功能请求

  • 多次同步:当前实现是从源到目标的一次性单向同步。这可以扩展为支持多次同步,从而实现定期同步或允许用户按需同步。
  • 双向同步:这是上述多次同步的扩展,但在源和目标之间实现双向同步。
  • 按优先级填充数据:通过一个包含不同 dataSourceRef 的列表,根据优先级进行填充。
  • 从同一供应程序的多个源填充数据:将多个不同的源填充到一个目标。
  • 从不同供应程序的多个源填充数据:将多个不同的源填充到一个目标,实现不同资源的填充流水线。

为确保我们构建的功能真正有价值,Kubernetes SIG Storage 希望了解你对该功能有任何特定的用例。如有任何关于卷填充器的查询或具体问题,请联系 SIG Storage 社区