Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

27.5. 卷和 Claim Pre-binding

如果您知道您希望 PersistentVolumeClaim 绑定到的 PersistentVolume,您可以使用 volumeName 字段在 PVC 中指定 PV。此方法跳过了正常的匹配和绑定进程。PVC 只会绑定到在 volumeName 中指定的同名的 PV。如果这个 PV 存在且为 Available,则 PV 和 PVC 将受到绑定,无论 PV 是否满足 PVC 的标签选择器、访问模式和资源请求。

例 27.1. 使用 volumeName 的持久性卷声明对象定义

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  name: "claim1"
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "1Gi"
  volumeName: "pv0001"
重要

设置 claimRefs 的功能是针对上述用例的一个临时临时解决方案。用于限制某个卷在开发中的长期解决方案。

注意

在代表用户设置 claimRefs 前,集群管理员应首先考虑配置 selector-label 卷绑定

您可能还希望集群管理员只为声明"reserve"卷,以便其他 nobody 的声明可以在您的操作之前绑定到它。在这种情况下,管理员可以使用 claimRef 字段在 PV 中指定 PVC。PV 只能绑定到一个 PVC,其名称和命名空间在 claimRef 中指定。PVC 的访问模式和资源请求必须仍满足,这样才能绑定 PV 和 PVC,但标签选择器被忽略。

使用 claimRef 的持久性卷对象定义

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  nfs:
    path: /tmp
    server: 172.17.0.2
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    name: claim1
    namespace: default

在 PVC 中指定 volumeName 不会阻止不同的 PVC 在操作前绑定到指定的 PV。您的声明将保持 Pending,直到 PV 处于 Available 状态。

在 PV 中指定 claimRef 不会阻止指定的 PVC 绑定到不同的 PV。PVC 可以自由选择另外一个 PV,以根据常规绑定过程绑定。因此,为了避免这些情况,并确保您的声明绑定到您想要的卷,您必须确保同时指定了 volumeNameclaimRef

您可以通过检查 pv.kubernetes.io/bound-by-controller 注解的 Bound PV 和 PVC 对,告知设置 volumeName 和/或 claimRef 会影响匹配的和绑定过程。在您设置 volumeName 和/或 claimRef 的 PV 和 PVC 没有这个注解,但普通 PV 和 PVC 会被设置为 "yes"

当 PV 的 claimRef 设置为某些 PVC 名称和命名空间时,并根据 Retain 重新声明策略重新声明,则其 claimRef 仍会保留为同一个 PVC 名称和命名空间,即使 PVC 或整个命名空间不再存在。