k8s维护者在https://github.com/kubernetes/kubernetes/issues/7438#issuecomment-97148195中对此进行了讨论:
允许用户询问特定PV会破坏它们之间的分离
我不买.我们允许用户选择一个节点.这不是常见的情况,但它存在是有原因的.
它是怎么结束的?什么是> 1 PV和PVC的预期方式,如https://github.com/kubernetes/kubernetes/tree/master/examples/nfs中的那个?
我们使用NFS,而PersistentVolume是一个方便的抽象,因为我们可以保留serverIP和path那里.但PersistentVolumeClaim得到任何具有足够的规模PV,防止path重复使用.
可以设置volumeName在PVC spec块中(参见https://github.com/kubernetes/kubernetes/pull/7529),但没有区别.
Saa*_*Ali 35
今天有一种方法可以将PV预先绑定到PVC,这里有一个示例显示如何:
1)使用ClaimRef字段创建一个PV对象,该字段引用随后将创建的PVC:
$ kubectl create -f pv.yaml
persistentvolume "pv0003" created
Run Code Online (Sandbox Code Playgroud)
其中pv.yaml包括:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
claimRef:
namespace: default
name: myclaim
nfs:
path: /tmp
server: 172.17.0.2
Run Code Online (Sandbox Code Playgroud)
2)然后创建具有相同名称的PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Run Code Online (Sandbox Code Playgroud)
3)PV和PVC应立即绑定:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
myclaim Bound pv0003 5Gi RWO 4s
$ ./cluster/kubectl.sh get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv0003 5Gi RWO Bound default/myclaim 57s
Run Code Online (Sandbox Code Playgroud)
我们还计划引入"卷选择器",这将使用户能够根据某些特定于实现的特性(特定机架,例如,或在您的情况下,强制执行1:1 PV到PVC映射的方式)选择特定存储.
请参阅https://github.com/kubernetes/kubernetes/issues/18333.
小智 14
可以使用关键字volumeName来完成:
例如
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
name: "claimapp80"
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "10Gi"
volumeName: "app080"
Run Code Online (Sandbox Code Playgroud)
将要求特定PV app080
小智 12
PV和PVC中的storageClassName应该相同。在PVC中添加持久卷名称作为volumeName,将PVC绑定到特定的PV。
喜欢:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-name
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 40Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-name
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeName: pv-name
Run Code Online (Sandbox Code Playgroud)
Thi*_*ina 10
最好同时指定volumeNameinpvc和claimRefin pvc。
通过使用storageClassName: manual两个pv和pvc我们可以彼此结合,但如果有很多不保证manualPV和PVC的。
在您的 PVC 中指定一个 volumeName 不会阻止不同的 PVC 在您之前绑定到指定的 PV。在 PV 可用之前,您的索赔将一直处于待处理状态。
在 PV 中指定 claimRef 不会阻止指定的 PVC 绑定到不同的 PV。PVC 可以根据正常绑定过程自由选择另一个 PV 进行绑定。因此,为了避免这些情况并确保您的声明绑定到您想要的卷,您必须确保指定了 volumeName 和 claimRef。
您可以通过检查 pv.kubernetes.io/bound-by-controller 注释的绑定 PV 和 PVC 对来判断您的 volumeName 和/或 claimRef 设置影响了匹配和绑定过程。您自己设置 volumeName 和/或 claimRef 的 PV 和 PVC 将没有此类注释,但普通 PV 和 PVC 会将其设置为“是”。
当 PV 将它的 claimRef 设置为某个 PVC 名称和命名空间,并根据 Retain 回收策略进行回收时,即使 PVC 或整个命名空间不再存在,它的 claimRef 仍将设置为相同的 PVC 名称和命名空间。
来源:https : //docs.openshift.com/container-platform/3.11/dev_guide/persistent_volumes.html
| 归档时间: |
|
| 查看次数: |
18126 次 |
| 最近记录: |