4.3. CSI 卷克隆

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

重要

CSI 卷克隆当前还是一个技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的详情,请参阅 https://access.redhat.com/support/offerings/techpreview/

4.3.1. CSI 卷克隆概述

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

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

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

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

4.3.1.1. 支持限制

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

  • 目标持久性卷声明 (PVC) 必须与源 PVC 位于同一个命名空间中。
  • 源和目标的存储类必须相同。
  • 仅支持 CSI 驱动程序。不支持 in-tree 和 FlexVolumes。
  • OpenShift Container Platform 不包括任何 CSI 驱动程序。请使用由开源社区或存储供应商提供的 CSI 驱动程序。请根据 CSI 驱动程序提供的说明进行操作。
  • 特定的 CSI 驱动程序可能会还没有实现卷克隆功能。详情请查看 CSI 驱动程序文档。
  • OpenShift Container Platform 4.4 支持 CSI 规范版本 1.1.0。

4.3.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。