Kubernetes:kube-scheduler 未正确对 pod 分配的节点进行评分

标签 kubernetes rancher kube-scheduler rancher-rke

我正在使用 Rancher 运行 Kubernetes,并且我发现 kube-scheduler 存在奇怪的行为。添加第三个节点后,我希望看到 pod 开始被调度并分配给它。然而,kube-scheduler 给这个新的第三个节点 node3 打了最低分,尽管它几乎没有运行 pod,我预计它会获得最高分。

以下是来自 Kube 调度程序的日志:

scheduling_queue.go:815] About to try and schedule pod namespace1/pod1
scheduler.go:456] Attempting to schedule pod: namespace1/pod1
predicates.go:824] Schedule Pod namespace1/pod1 on Node node1 is allowed, Node is running only 94 out of 110 Pods.
predicates.go:1370] Schedule Pod namespace1/pod1 on Node node1 is allowed, existing pods anti-affinity terms satisfied.
predicates.go:824] Schedule Pod namespace1/pod1 on Node node3 is allowed, Node is running only 4 out of 110 Pods.
predicates.go:1370] Schedule Pod namespace1/pod1 on Node node3 is allowed, existing pods anti-affinity terms satisfied.
predicates.go:824] Schedule Pod namespace1/pod1 on Node node2 is allowed, Node is running only 95 out of 110 Pods.
predicates.go:1370] Schedule Pod namespace1/pod1 on Node node2 is allowed, existing pods anti-affinity terms satisfied.
resource_allocation.go:78] pod1 -> node1: BalancedResourceAllocation, capacity 56000 millicores 270255251456 memory bytes, total request 40230 millicores 122473676800 memory bytes, score 7
resource_allocation.go:78] pod1 -> node1: LeastResourceAllocation, capacity 56000 millicores 270255251456 memory bytes, total request 40230 millicores 122473676800 memory bytes, score 3
resource_allocation.go:78] pod1 -> node3: BalancedResourceAllocation, capacity 56000 millicores 270255251456 memory bytes, total request 800 millicores 807403520 memory bytes, score 9
resource_allocation.go:78] pod1 -> node3: LeastResourceAllocation, capacity 56000 millicores 270255251456 memory bytes, total request 800 millicores 807403520 memory bytes, score 9
resource_allocation.go:78] pod1 -> node2: BalancedResourceAllocation, capacity 56000 millicores 270255247360 memory bytes, total request 43450 millicores 133693440000 memory bytes, score 7
resource_allocation.go:78] pod1 -> node2: LeastResourceAllocation, capacity 56000 millicores 270255247360 memory bytes, total request 43450 millicores 133693440000 memory bytes, score 3
generic_scheduler.go:748] pod1_namespace1 -> node1: TaintTolerationPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node3: TaintTolerationPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node2: TaintTolerationPriority, Score: (10)
selector_spreading.go:146] pod1 -> node1: SelectorSpreadPriority, Score: (10)
selector_spreading.go:146] pod1 -> node3: SelectorSpreadPriority, Score: (10)
selector_spreading.go:146] pod1 -> node2: SelectorSpreadPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node1: SelectorSpreadPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node3: SelectorSpreadPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node2: SelectorSpreadPriority, Score: (10)
generic_scheduler.go:748] pod1_namespace1 -> node1: NodeAffinityPriority, Score: (0)
generic_scheduler.go:748] pod1_namespace1 -> node3: NodeAffinityPriority, Score: (0)
generic_scheduler.go:748] pod1_namespace1 -> node2: NodeAffinityPriority, Score: (0)
 interpod_affinity.go:232] pod1 -> node1: InterPodAffinityPriority, Score: (0)
 interpod_affinity.go:232] pod1 -> node3: InterPodAffinityPriority, Score: (0)
interpod_affinity.go:232] pod1 -> node2: InterPodAffinityPriority, Score: (10)
generic_scheduler.go:803] Host node1 => Score 100040
generic_scheduler.go:803] Host node3 => Score 100038
generic_scheduler.go:803] Host node2 => Score 100050
scheduler_binder.go:256] AssumePodVolumes for pod "namespace1/pod1", node "node2"
scheduler_binder.go:266] AssumePodVolumes for pod "namespace1/pod1", node "node2": all PVCs bound and nothing to do
factory.go:727] Attempting to bind pod1 to node2

最佳答案

我可以从日志中看出,您的 pod 将始终安排在 node2 上,因为您似乎有某种 PodAffinity额外获得 10 分。使其达到50

有点奇怪的是,我在 node3 上得分 48 但似乎 -10 被困在某个地方(总共 38 >)。也许是因为亲和性,或者某些条目没有在日志中显示,或者仅仅是调度程序执行计算的方式中的一个错误。您可能需要深入研究 kube-scheduler code如果您想了解更多信息。

这就是我所拥有的:

node1 7 + 3 + 10 + 10 + 10 = 40
node2 7 + 3 + 10 + 10 + 10 + 10 = 50
node3 9 + 9 + 10 + 10 + 10 = 48

关于Kubernetes:kube-scheduler 未正确对 pod 分配的节点进行评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885793/

相关文章:

kubernetes - 从节点中删除 Daemonset pod

kubernetes - 在从服务端点移除之前让 Kubernetes 等待 Pod 终止

kubernetes - Kubernetes 和 Kubernetes Engine 有什么区别?

docker - [HTCONDOR][kubernetes/k8s] : Unable to start minicondor image within k8s - condor_master not working

kubernetes - 如何自定义 kube-scheduler 在 AKS 上的行为?

kubernetes - 如何更改 kubernetes 中的默认 kube-scheduler

kubernetes - 推荐的部署kafka的方法是使其部署在所有可用节点中?

docker - Rancher 发射失败

docker - 如何在 RancherOS 中动态挂载外部 USB 硬盘?