克隆 PVC

PVC 克隆会创建一个新的 PersistentVolumeClaim (PVC),并复制现有 PVC 中的数据。当应用需要一份独立的可写数据副本时,请使用克隆,例如要基于现有应用数据准备测试环境。

克隆直接从源 PVC 创建。相比之下,卷快照会在某个时间点捕获 PVC,并可保留或稍后用于创建 PVC。当你需要直接副本时,请选择克隆;当你需要可恢复的时间点副本时,请选择卷快照。

NOTE

ACP 目前不提供用于克隆 PVC 的 UI。请通过应用带有 kubectl 的 YAML 清单来创建克隆后的 PVC。

前提条件

  • 仅支持动态供应的 PVC,且其 CSI driver 支持克隆。静态供应不支持 PVC 克隆。
  • 源 PVC 处于 Bound 阶段且未被使用。
  • 源 PVC 和目标 PVC 位于同一 namespace 中。
  • 目标 PVC 请求的存储容量至少与源 PVC 的容量相同。
  • 源 PVC 和目标 PVC 使用相同的 volume mode。目标 access mode 必须受其 storage class 和 CSI driver 支持。

ACP 存储支持

仅当 CSI driver 和后端存储支持从源卷克隆到该 storage class 时,目标 PVC 才可以使用不同的 storage class。Kubernetes 不会验证此后端兼容性。

存储类型PVC 克隆支持情况storage class 要求
CephRBD 块存储支持源 PVC 和目标 PVC 必须在同一个 Ceph 集群中使用兼容的 RBD storage class。如果 Ceph CSI 支持所选的后端配置,则可以使用不同的 RBD storage class,包括使用不同 pool 的 storage class。
CephFS 文件存储支持源 PVC 和目标 PVC 必须在同一个 Ceph 集群和同一个 CephFS file system 中使用兼容的 storage class。
TopoLVM支持 thin-provisioned volumes源 PVC 和目标 PVC 必须使用相同的 storage class。如果创建克隆时使用不同的 storage class,且其 device class 与源 PVC 不同,则可能无法调度。
NFS Shared Storage不支持NFS Shared Storage 不支持 PVC 克隆。

有关创建源 PVC 的信息,请参阅创建 PVC

创建克隆后的 PVC

创建一个名为 clone-pvc.yaml 的清单。请将 namespace、storage class、access mode、volume mode、capacity 和 PVC 名称替换为存储驱动支持的值。在选择目标 storage class 之前,请参阅ACP 存储支持

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cloned-pvc
  namespace: application-space
spec:
  storageClassName: clone-capable-csi
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Gi
  dataSource:
    apiGroup: ""
    kind: PersistentVolumeClaim
    name: source-pvc

应用该清单:

kubectl apply -f clone-pvc.yaml

验证克隆

检查目标 PVC 的状态:

kubectl get pvc cloned-pvc -n application-space

STATUS 列显示 Bound 时,表示存储驱动已对克隆卷完成供给并绑定。随后,你可以在工作负载中挂载 cloned-pvc,并验证是否能够访问预期的源数据。

检查 PVC 事件以排查供给或克隆错误:

kubectl describe pvc cloned-pvc -n application-space

如果 PVC 仍然处于 Pending,或者创建失败,请查看此命令输出的事件。确认所选 storage class 支持 PVC 克隆,并且源 PVC、namespace、请求容量、volume mode 和 access mode 都满足前提条件。