我经常发现自己试图启动一个新的 pod,却得到一个错误,说没有可用的节点。就像是:
0/9 nodes are available: 1 node(s) had no available volume zone, 8 node(s) didn't match node selector.
当我收到这些消息时,我总是不知所措。我应该如何调试它?
我经常发现自己试图启动一个新的 pod,却得到一个错误,说没有可用的节点。就像是:
0/9 nodes are available: 1 node(s) had no available volume zone, 8 node(s) didn't match node selector.
当我收到这些消息时,我总是不知所措。我应该如何调试它?
一开始我的建议是看一下Kubernetes 调度程序组件:
根据文档:
kube-scheduler 在 2 步操作中为 pod 选择一个节点。基于默认策略的标准 kube-scheduler :
查看这两项政策,您可以找到更多关于做出决策的信息。例如:
您可以在下面找到基于影响Kubernetes 调度程序决策的快速回顾
根据k8s 文档:
1 . NodeName是最简单的节点选择约束形式,但由于其局限性,通常不使用它。使用 nodeName 选择节点的一些限制是:
2 . 亲和/反亲和功能,极大地扩展了您可以表达的约束类型。主要改进是: - 语言更具表现力(不仅仅是“精确匹配的 AND”) - 您可以指示规则是“软”/“偏好”而不是硬要求,所以如果调度程序不能满足这样,pod 仍将被调度 - 您可以限制在节点(或其他拓扑域)上运行的其他 pod 上的标签,而不是节点本身上的标签,这允许关于哪些 pod 可以和不能位于同一位置的规则
亲和性特性包括两种亲和性,节点亲和性和Pod 间亲和性/反亲和性。节点亲和力类似于现有的 nodeSelector(但具有上面列出的前两个好处),
希望这有帮助。
其他资源:
亲和和反亲和
调度器性能调优
理解 Kubernetes 中的污点和容忍度
Kubernetes 污点和容忍度 PreferNoSchedule