Kubernetes Pod与绑定的本地持久卷的主机节点的关联性
我正在使用k8s的裸机替代品,并正在使用K8SV1.14试用本地持久卷。目的是允许我使用创建HA postgres部署。由于我使用的是裸机,所以无法使用动态PVC,这在教程中似乎很正常 首先,我创建了一些绑定到主机节点上手动创建的卷的PV。使用Kubernetes Pod与绑定的本地持久卷的主机节点的关联性,kubernetes,Kubernetes,我正在使用k8s的裸机替代品,并正在使用K8SV1.14试用本地持久卷。目的是允许我使用创建HA postgres部署。由于我使用的是裸机,所以无法使用动态PVC,这在教程中似乎很正常 首先,我创建了一些绑定到主机节点上手动创建的卷的PV。使用nodeAffinity将PV分配给特定节点。i、 e.primary volPV分配给node1,而replica-vol-1分配给node2,依此类推 然后,我使用PVC将pod绑定到PV上,如文件所述 我发现k8s调度器将我的pod(绑定到node1
nodeAffinity
将PV分配给特定节点。i、 e.primary vol
PV分配给node1
,而replica-vol-1
分配给node2
,依此类推
然后,我使用PVC将pod绑定到PV上,如文件所述
我发现k8s调度器将我的pod(绑定到node1
上的PV)放置在node2
上,而不是像我预期的那样放置在node1
上
是否有一种方法,在pod上使用亲和性,以确保pod在与其绑定到的PV相同的节点上创建
编辑:简化问题(向各地的艺术家和建筑师致歉)
当pod甚至不知道它绑定到哪个PV时,它如何知道PV被分配到哪个节点
是的,您可以使用PV定义中的claimRef实现它。通过在PV中使用
claimRef
,您将具有特定名称的PVC绑定到该PV,并且您可以在persistentVolumeClaim
中的pod定义中使用该PVC名称
您应该具有如下PV定义:
{
"kind": "PersistentVolume",
"apiVersion": "v1",
"metadata": {
"name": "pv-data-vol-0",
"labels": {
"type": "local"
}
},
"spec": {
"capacity": {
"storage": "10Gi"
},
"accessModes": [
"ReadWriteOnce"
],
"storageClassName": "local-storage",
"local": {
"path": "/prafull/data/pv-0"
},
"claimRef": {
"namespace": "default",
"name": "data-test-sf-0"
},
"nodeAffinity": {
"required": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "kubernetes.io/hostname",
"operator": "In",
"values": [
"ip-10-0-1-46.ec2.internal"
]
}
]
}
]
}
}
}
}
在上面的json文件中,claimRef
,name
应该是要将该PV绑定到的PVC的名称,名称空间
应该是PVC
所在的名称空间
注意:名称空间
是必填字段,因为PV独立于名称空间,PVC绑定在名称空间中,因此PV应该知道应该在哪个名称空间中查找PVC
因此,一旦你能够将特定的PV绑定到特定的PVC,你就可以将特定的PVC绑定到特定的POD,因此POD将始终位于PV所在的同一节点上
请看我以下的答案,以供参考:
希望这有助于显示PVC+pod的定义。这是什么?调度程序报告说,
pod已解除立即PersistentVolumeClaims的绑定(重复3次)
,但它也报告了primary pvc
,因为“绑定”在我看来非常好,谢谢,Prafull。我明天(AEST)必须查看并报告。谢谢你的帮助!