5.4. CSI 卷克隆
卷克隆会复制现有的持久性卷,以帮助防止 OpenShift Container Platform 中的数据丢失。此功能仅可用于受支持的 Container Storage Interface (CSI) 驱动程序。在置备 CSI 卷克隆前,您应该先熟悉持久性卷。
5.4.1. CSI 卷克隆概述
容器存储接口 (CSI) 卷克隆代表着在特定时间点上,一个已存在的持久性卷的副本。
卷克隆与卷快照类似,但效率更高。例如,集群管理员可以通过创建现有集群卷的另一个实例来复制集群卷。
克隆会在后端设备上创建指定卷的副本,而不是创建一个新的空卷。在进行动态置备后,您可以像使用任何标准卷一样使用卷克隆。
克隆不需要新的 API 对象。PersistentVolumeClaim
对象中现有的 dataSource
项应该可以接受同一命名空间中的一个已存在的 PersistentVolumeClaim。
5.4.1.1. 支持限制
在默认情况下,OpenShift Container Platform 支持 CSI 卷克隆,但有以下限制:
- 目标持久性卷声明 (PVC) 必须与源 PVC 位于同一个命名空间中。
- 源和目标的存储类必须相同。
- 仅支持 CSI 驱动程序。不支持 in-tree 和 FlexVolumes。
- 特定的 CSI 驱动程序可能会还没有实现卷克隆功能。详情请查看 CSI 驱动程序文档。
5.4.2. 置备 CSI 卷克隆
创建一个克隆的持久性卷声明 (PVC) API 对象时,会触发一个 CSI 卷克隆的置备。克隆会预先获得另一个 PVC 的内容,遵循与任何其他持久性卷相同的规则。其中一个例外是,您必须添加一个指代到同一命名空间中现有 PVC 的 dataSource
。
先决条件
- 登陆到一个正在运行的 OpenShift Container Platform 集群。
- 使用支持卷克隆的 CSI 驱动程序创建的 PVC。
- 为动态置备配置了存储后端。静态置备程序不支持克隆。
流程
从现有 PVC 克隆 PVC:
使用以下 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 中可以忽略 。
运行以下命令,创建上一步中保存的对象:
$ oc create -f pvc-clone.yaml
一个新的 PVC
pvc-1-clone
被创建 。运行以下命令验证卷克隆是否已创建并就绪:
$ oc get pvc pvc-1-clone
pvc-1-clone
显示的状态为Bound
。现在,您已准备好使用新克隆的 PVC 来配置 pod。
使用 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。