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是一个方便的抽象,因为我们可以保留server
IP和path
那里.但PersistentVolumeClaim得到任何具有足够的规模PV,防止path
重复使用.
可以设置volumeName
在PVC spec
块中(参见https://github.com/kubernetes/kubernetes/pull/7529),但没有区别.
今天有一种方法可以将PV预先绑定到PVC,这里有一个示例显示如何:
1)使用ClaimRef字段创建一个PV对象,该字段引用随后将创建的PVC:
$ kubectl create -f pv.yaml persistentvolume "pv0003" created
其中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
2)然后创建具有相同名称的PVC:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
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
我们还计划引入"卷选择器",这将使用户能够根据某些特定于实现的特性(特定机架,例如,或在您的情况下,强制执行1:1 PV到PVC映射的方式)选择特定存储.
请参阅https://github.com/kubernetes/kubernetes/issues/18333.
可以使用关键字volumeName来完成:
例如
apiVersion: "v1" kind: "PersistentVolumeClaim" metadata: name: "claimapp80" spec: accessModes: - "ReadWriteOnce" resources: requests: storage: "10Gi" volumeName: "app080"
将要求特定PV app080