我的环境中有两个工作节点 . 我为其中一个添加了一个标签,如下所示:
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 回答
我假设你实际上没有足够的资源,因为nodeAffinity是一个非常简单的过程,因为它是基于分数的 . Comment in the github doc
Another:
请尝试检查您是否确实拥有足够的资源,根据引用的文档,在将第一个pod放入第一个节点后,行为似乎适用于更好的第二个节点评分 . 回答你的上一个问题:你不会在事件日志中看到这个,因为没有记录那些事件,理论上你应该在调试模式下看到它们,但我不确定 .