k8s priotityClass 被忽略

k8s priotityClass 被忽略

我有一个运行 k8s 1.23 的集群和几个工作负载。工作负载分布在 3 个优先级类别中

high                                     10000000
medium                                   100000
low                                      1000

所有 pod 的 priorityClass 设置都正确,但我遇到了一个大故障,一些节点不可用,并且几个具有高优先级的 pod 仍处于待处理状态,而所有低优先级和中优先级的 pod 仍在运行。

我在 kubectl get events 上看不到任何抢占参考。FailedScheduling 中的一个日志显示:

43m         Warning   FailedScheduling       pod/redacted-78455bb4b7-mtq5m      0/13 nodes are available: 1 Too many pods, 1 node(s) had taint {taint.kubernetes.io/zone: redacted}, that the pod didn't tolerate, 2 Insufficient cpu, 2 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) had taint {taint.kubernetes.io/redacted: redacted}, that the pod didn't tolerate, 6 node(s) were unschedulable.

总结一下,故障发生后,我只有两个“可用”的节点(未被污染/不可调度),但一个由于“pod 太多”而被拒绝,另一个由于“CPU 不足”而被拒绝。

  1. 为什么不驱逐所有低优先级的 pod 以便安排高优先级的 pod 呢?
  2. 抢占会以某种方式忽略“Pod 过多”和“CPU 不足”节点吗?

答案1

正如您所提到的,以下错误与调度失败发生于kubectl 获取事件使用的命令

错误 1:FailedScheduling

节点有污点 {node-role.kubernetes.io/master: },Pod 无法容忍

污点和容忍度共同作用,确保 pod 不会被安排在不适当的节点上。

检查节点是否有污点

kubectl describe node <nodename> | grep Taints

如果节点上存在任何污点,则会提供类似的输出

node-role.kubernetes.io/master:NoSchedule

如果您想要保留节点上的污点,但仍然想要在该节点上安排特定的 pod,那么请将其包含在您的 pod/deployment.yaml 文件中。

tolerations:
- key: "key"
  operator: "Exists"
  effect: "NoSchedule"

如果您想从节点中删除污点,请更新以下命令。

kubectl taint node master node-role.kubernetes.io/master:NoSchedule-

确保-在前面添加无日程

更多信息可以关注官方文档

错误 2:

CPU 不足

如果 Pod 指定了资源请求(即运行所需的最小 CPU 和/或内存量),Kubernetes 调度程序将尝试查找可以分配资源来满足这些请求的节点。如果不成功,Pod 将保持待处理状态,直到有更多资源可用。

您可以在博客作者艾米莉·张为与以下相关的不同场景提供解决方案调度失败

相关内容