×

卷克隆复制现有的持久卷,以帮助保护OpenShift Container Platform免受数据丢失。此功能仅适用于受支持的容器存储接口 (CSI) 驱动程序。在配置CSI卷克隆之前,您应该熟悉持久卷

CSI卷克隆概述

容器存储接口 (CSI) 卷克隆是在特定时间点对现有持久卷的副本。

卷克隆类似于卷快照,但效率更高。例如,集群管理员可以通过创建现有集群卷的另一个实例来复制集群卷。

克隆会在后端设备上创建指定卷的精确副本,而不是创建新的空卷。动态配置后,您可以像使用任何标准卷一样使用卷克隆。

克隆不需要新的API对象。PersistentVolumeClaim 对象中的现有dataSource字段已扩展,以便它可以接受同一命名空间中现有PersistentVolumeClaim的名称。

支持限制

默认情况下,OpenShift Container Platform支持CSI卷克隆,但存在以下限制

  • 目标持久卷声明 (PVC) 必须与源PVC位于同一命名空间。

  • 使用不同的存储类支持克隆。

    • 目标卷可以与源卷使用不同的存储类。

    • 您可以使用默认存储类,并在spec中省略storageClassName

  • 仅支持CSI驱动程序。不支持树内和FlexVolumes。

  • CSI驱动程序可能尚未实现卷克隆功能。有关详细信息,请参阅CSI驱动程序文档。

配置CSI卷克隆

创建克隆的持久卷声明 (PVC) API 对象时,您会触发CSI卷克隆的配置。克隆会使用另一个PVC的内容进行预填充,并遵守与任何其他持久卷相同的规则。唯一的例外是您必须添加一个dataSource,该dataSource引用同一命名空间中的现有PVC。

先决条件
  • 您已登录到正在运行的OpenShift Container Platform集群。

  • 您的PVC使用支持卷克隆的CSI驱动程序创建。

  • 您的存储后端已配置为动态配置。静态配置程序不支持克隆。

步骤

要从现有PVC克隆PVC

  1. 使用以下YAML中描述的PersistentVolumeClaim对象创建一个文件并保存

    pvc-clone.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-1-clone
      namespace: mynamespace
    spec:
      storageClassName: csi-cloning (1)
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      dataSource:
        kind: PersistentVolumeClaim
        name: pvc-1
    1 配置存储后端的存储类的名称。可以使用默认存储类,并且可以在spec中省略storageClassName
  2. 通过运行以下命令创建您在上一步中保存的对象

    $ oc create -f pvc-clone.yaml

    创建了一个新的PVC pvc-1-clone

  3. 通过运行以下命令验证卷克隆是否已创建并准备就绪

    $ oc get pvc pvc-1-clone

    pvc-1-clone显示其状态为Bound

    您现在可以使用新克隆的PVC配置Pod。

  4. 使用YAML中描述的Pod对象创建一个文件并保存。例如

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: myfrontend
          image: dockerfile/nginx
          volumeMounts:
          - mountPath: "/var/www/html"
            name: mypd
      volumes:
        - name: mypd
          persistentVolumeClaim:
            claimName: pvc-1-clone (1)
    1 在CSI卷克隆操作期间创建的克隆PVC。

    现在可以独立于其原始dataSource PVC使用、克隆、快照或删除已创建的Pod对象。