CSI 卷克隆

FEATURE STATE: Kubernetes v1.16 beta

该功能目前处于 beta 状态,意味着:

  • 版本名称包含 beta (例如 v2beta3)。
  • 代码经过了充分测试,启用该功能被认为是安全的。默认情况下被启用。
  • 对整体功能的支持在未来不会被移除,尽管细节上可能会做更改。
  • 在后续的 beta 或稳定版本中,对象的模式、语义可能以不兼容的方式发生变化。当这种情况发生时,我们将提供迁移到下一个版本的说明。这可能需要删除、编辑和重建 API 对象,编辑过程可能需要一些思考。这可能导致依赖该功能的应用程序停机一段时间。
  • 建议仅在非业务关键场景使用该功能,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的集群,那么您可能可以放松这个限制。
  • 请尝试使用我们的 beta 版功能,并给出反馈!在它们退出 beta 测试阶段之后,我们将很难去做更多的更改。

本文档介绍 Kubernetes 中克隆现有 CSI 卷的概念。阅读前建议先熟悉

介绍

CSI容器存储接口 (CSI)定义了存储系统暴露给容器的标准接口。 卷克隆功能增加了通过在 dataSource 字段中指定存在的 PVC声明在持久卷中定义的存储资源,以便可以将其挂载为容器中的卷。 s,来表示用户想要克隆的 卷包含可被 Pod 中容器访问的数据的目录。

克隆,意思是为已有的 Kubernetes 卷创建副本,它可以像任何其它标准卷一样被使用。唯一的区别就是配置后,后端设备将创建指定完全相同的副本,而不是创建一个“新的”空卷。

从 Kubernetes API 的角度看,克隆的实现只是在创建新的 PVC 时,增加了指定一个现有未绑定 PVC 作为数据源的能力。

用户在使用该功能时,需要注意以下事项:

  • 克隆支持(VolumePVCDataSource)仅适用于 CSI 驱动。
  • 克隆支持仅适用于 动态供应器。
  • CSI 驱动可能实现,也可能未实现卷克隆功能。
  • 仅当 PVC 与目标 PVC 存在于同一命名空间(源和目标 PVC 必须在相同的命名空间)时,才可以克隆 PVC。
  • 仅在同一存储类中支持克隆。
    • 目标卷必须和源卷具有相同的存储类
    • 可以使用默认的存储类并且 storageClassName 字段在规格中忽略了

供应

克隆卷与其他任何 PVC 一样配置,除了需要增加 dataSource 来引用同一命名空间中现有的 PVC。

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: clone-of-pvc-1
  5. namespace: myns
  6. spec:
  7. accessModes:
  8. - ReadWriteOnce
  9. storageClassName: cloning
  10. resources:
  11. requests:
  12. storage: 5Gi
  13. dataSource:
  14. kind: PersistentVolumeClaim
  15. name: pvc-1

注意: 你必须为 spec.resources.requests.storage 指定一个值,并且你指定的值必须大于或等于源卷的值。

结果是一个名称为 clone-of-pvc-1 的新 PVC 与指定的源 pvc-1 拥有相同的内容。

用法

一旦新的 PVC 可用,被克隆的 PVC 项其他 PVC 一样被使用。可以预期的是,新创建的 PVC 是一个独立的对象。可以独立使用,克隆,快照或删除它,而不需要考虑它的原始数据源 PVC。这也意味着,源没有以任何方式链接到新创建的 PVC,它也可以被修改或删除,而不会影响到新创建的克隆。