首页 文章

nodeAffinity with preferredDuringSchedulingIgnoredDuringExecution set始终在不正确的节点上计划pod

提问于
浏览
0

我的环境中有两个工作节点 . 我为其中一个添加了一个标签,如下所示:

kubectl label nodes "${node}" type=infrastructure --overwrite

在我的服务yaml文件中,我设置了以下内容:

affinity:
      nodeAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: "type"
              operator: In
              values: ["infrastructure"]

preferredDuringSchedulingIgnoredDuringExecution 规则应该意味着kubernetes调度程序应尽力将pod部署到具有"infrastructure"标签的节点,但如果它无法(例如,资源不足),则它将部署到集群中的其他节点 .

我看到每次部署服务(3个pod)时,1个pod总是被部署到没有标签的节点 .

有没有办法找出kubernetes调度程序选择未标记节点的原因?如果这是一个资源问题,我希望看到它记录在事件中,但我看到调度程序立即选择未标记的节点:

Normal  Scheduled              23m   default-scheduler  Successfully assigned es-master-5f55dd9dd-2n48b to pink02

我知道我可以使用规则 requiredDuringSchedulingIgnoredDuringExecution 强制将pod放到标记的节点上,但我不想这样做,因为某些环境可能没有标签 .

1 回答

  • 0

    我假设你实际上没有足够的资源,因为nodeAffinity是一个非常简单的过程,因为它是基于分数的 . Comment in the github doc

    / CalculateNodeAffinityPriorityMap根据在PreferredDuringSchedulingIgnoredDuringExecution中指示的节点关联性调度首选项//对节点进行优先级排序 . 每次节点匹配preferredSchedulingTerm时,//它将获得preferredSchedulingTerm.Weight的添加 . 因此,更优选的SchedulingTerms //节点满足且且满足权重的preferredSchedulingTerm越多,节点获得的得分越高 .

    Another:

    一个名为RequiredDuringSchedulingIgnoredDuringExecution的字段,与RequiredDuringSchedulingRequiredDuringExecution相同,但系统可能会或可能不会尝试最终从其节点中驱逐该pod .

    请尝试检查您是否确实拥有足够的资源,根据引用的文档,在将第一个pod放入第一个节点后,行为似乎适用于更好的第二个节点评分 . 回答你的上一个问题:你不会在事件日志中看到这个,因为没有记录那些事件,理论上你应该在调试模式下看到它们,但我不确定 .

相关问题