Kubernetes 设置关联规则时,权重如何影响pod调度?

Kubernetes 设置关联规则时,权重如何影响pod调度?,kubernetes,Kubernetes,背景: 在对应用程序进行性能测试时,我在扩展我的php fpm容器的副本时得到了不一致的结果,我意识到在同一个节点上调度了3/4个pod 然后,我将反关联规则配置为不在同一节点上调度POD。我很快意识到,使用requiredDuringSchedulingIgnoredDuringExecution不是一个选项,因为我无法拥有节点的#副本>#,所以我配置了preferredDuringSchedulingIgnoredDuringExecution 在大多数情况下,我的pod在我的所有节点上都是

背景:

在对应用程序进行性能测试时,我在扩展我的
php fpm
容器的副本时得到了不一致的结果,我意识到在同一个节点上调度了3/4个pod

然后,我将反关联规则配置为不在同一节点上调度POD。我很快意识到,使用
requiredDuringSchedulingIgnoredDuringExecution
不是一个选项,因为我无法拥有节点的#副本>#,所以我配置了
preferredDuringSchedulingIgnoredDuringExecution

在大多数情况下,我的pod在我的所有节点上都是均匀调度的,但是有时(通过滚动升级),我会在同一个节点上看到pod。我觉得当前设置为100的
weight
值是一个重要因素

这是我正在使用的yaml(头盔):


问题:

按照我阅读文档的方式,将根据节点的繁忙程度(简化)将
权重
数字添加到节点的计算分数中,但我不明白的是,权重1与100有什么不同

为什么POD有时按此规则安排在同一节点上?是不是因为pod未计划的节点的总分太低(因为它太忙)


是否有办法查看pod在特定节点上的调度日志/事件?我希望
kubectl description pod
会有这些细节,但似乎没有(错误场景除外)

不保证首选DuringSchedulingIgnoredDuringExecution

两种类型的节点关联,称为requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution。您可以将它们分别视为“硬”和“软”,因为前者指定了pod调度到节点上所必须满足的规则(与nodeSelector类似,但使用了更具表现力的语法),而后者指定了调度程序将尝试执行但不保证执行的首选项

设置的权重提供了一条边,但还有其他参数(由用户和kubernetes设置)具有自己的权重。下面的示例应该可以更好地说明您设置的权重在哪里很重要

 affinity:
   nodeAffinity:
     preferredDuringSchedulingIgnoredDuringExecution:
     - preference:
         matchExpressions:
         - key: example.com/myLabel
           operator: In
           values:
           - a
       weight: 40
     - preference:
         matchExpressions:
         - key: example.com/myLabel
           operator: In
           values:
           - b
       weight: 35

是的,事实上,当有多个条件时,你可以对它们进行不同的加权,这就更清楚了。我在考虑单一条件用例。
 affinity:
   nodeAffinity:
     preferredDuringSchedulingIgnoredDuringExecution:
     - preference:
         matchExpressions:
         - key: example.com/myLabel
           operator: In
           values:
           - a
       weight: 40
     - preference:
         matchExpressions:
         - key: example.com/myLabel
           operator: In
           values:
           - b
       weight: 35