5.5. CSI 卷克隆

卷克隆会复制现有的持久性卷,以帮助防止 OpenShift Container Platform 中的数据丢失。此功能仅可用于受支持的 Container Storage Interface (CSI) 驱动程序。在置备 CSI 卷克隆前,您应该先熟悉持久性卷

5.5.1. CSI 卷克隆概述

容器存储接口 (CSI) 卷克隆代表着在特定时间点上,一个已存在的持久性卷的副本。

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

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

克隆不需要新的 API 对象。PersistentVolumeClaim 对象中现有的 dataSource 项应该可以接受同一命名空间中的一个已存在的 PersistentVolumeClaim。

5.5.1.1. 支持限制

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

  • 目标持久性卷声明 (PVC) 必须与源 PVC 位于同一个命名空间中。
  • 不同的存储类支持克隆。

    • 对于与源不同的存储类,目标卷可能相同。
    • 您可以使用默认存储类,在 spec 中省略 storageClassName
  • 仅支持 CSI 驱动程序。不支持 in-tree 和 FlexVolumes。
  • 特定的 CSI 驱动程序可能会还没有实现卷克隆功能。详情请查看 CSI 驱动程序文档。

5.5.2. 置备 CSI 卷克隆

创建一个克隆的持久性卷声明 (PVC) API 对象时,会触发一个 CSI 卷克隆的置备。克隆会预先获得另一个 PVC 的内容,遵循与任何其他持久性卷相同的规则。其中一个例外是,您必须添加一个指代到同一命名空间中现有 PVC 的 dataSource

先决条件

  • 登陆到一个正在运行的 OpenShift Container Platform 集群。
  • 使用支持卷克隆的 CSI 驱动程序创建的 PVC。
  • 为动态置备配置了存储后端。静态置备程序不支持克隆。

流程

从现有 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
    置备存储后端的存储类的名称。可以使用默认存储类,storageClassName 在 spec 中可以忽略 。
  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。

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