Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Pod与绑定的本地持久卷的主机节点的关联性_Kubernetes - Fatal编程技术网

Kubernetes Pod与绑定的本地持久卷的主机节点的关联性

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

我正在使用k8s的裸机替代品,并正在使用K8SV1.14试用本地持久卷。目的是允许我使用创建HA postgres部署。由于我使用的是裸机,所以无法使用动态PVC,这在教程中似乎很正常

首先,我创建了一些绑定到主机节点上手动创建的卷的PV。使用
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)必须查看并报告。谢谢你的帮助!