当我们在本地托管的裸机k8(1.18)节点之一上电时,将安排Pod的运行时间,但很难达到“就绪”状态-几乎完全是由于磁盘IO从30-40涌入在节点上同时调度Pod。
这通常会导致一系列的部署失败:
FWIW内存和CPU在节点上的配置过多,即使处于开机状态(使用率不到10%)。
尽管我们确实有应用程序NFS卷挂载(通常会怀疑是WRT IO问题),但pod启动时的磁盘活动和限制几乎完全在本地docker容器文件系统中。
作为disk IO is not a limitable resource,我们正在努力寻找解决方案。我们已经调整了docker映像,以便在启动时尽可能少地将其写入磁盘,这对某些人有所帮助。
一种基本解决方案涉及通过增加集群中的节点数来减少每个节点调度的Pod数。对于我们来说,这不是理想的选择,因为它们是物理机器,并且一旦节点确实启动,群集的资源就会明显过多。
由于我们是裸机/本地机,我们没有自动的方法来在启动情况下自动设置节点并在群集稳定时降低它们。
乍一看应用优先级类似乎是一种解决方案。我们已经创建了priorityClasses并相应地应用了它们,如documentation中所述:
荚可以具有优先权。优先级表示Pod的重要性 相对于其他Pod。如果无法安排Pod,则调度程序 尝试抢占(逐出)较低优先级的Pod,以安排 暂挂Pod。
tldr:由于未超出可配置的资源限制,上电后仍可同时对所有Pod进行“调度”。
答案 0 :(得分:2)
虽然我也有兴趣看到 smart 人回答这个问题,但这是我可能的“正好”的想法:
这是我用于测试/故障排除的“无用”映像的Dockerfile:
FROM alpine:3.9
CMD sh -c 'while true; do sleep 5; done'