当我们本地托管的裸机 k8s (1.18) 节点开机时,会安排 pods,但很难达到 "就绪 "状态--这几乎完全是由于该节点上同时安排了 30-40 个 pods,导致磁盘 IO 急剧增加。
这通常会导致一连串的部署失败。
FWIW内存和CPU在节点上大大超额供给,即使在开机状态下(<10%的使用率)。
虽然我们确实有应用NFS卷挂载(通常会怀疑WRT IO问题),但pod启动时的磁盘活动和限制几乎完全在本地docker容器文件系统中。
作为 磁盘IO不是一个可限制的资源我们正在努力寻找解决这个问题的方法。我们已经调整了我们的docker镜像,使其在启动时尽可能少地写入磁盘,这有一些帮助。
一个基本的解决方案是通过增加集群中的节点数量来降低每个节点计划的pods数量。这对我们来说并不理想,因为它们是物理机器,一旦节点启动,集群的资源就会明显过剩。
由于我们是裸机本地,我们没有一个自动的方法在启动情况下自动提供节点,并在集群稳定后降低节点数量。
应用优先级Classes乍一看似乎是一个解决方案。我们已经创建了priorityClasses,并相应地应用了它们,然而,正如在? 文件:
Pods可以有优先权。优先级表示一个Pod相对于其他Pod的重要性。如果一个Pod不能被调度,调度器会尝试抢占(驱逐)优先级较低的Pod,使待定Pod的调度成为可能。
tldr:在开机时,所有的花苞仍将同时 "可调度",因为没有超过可配置的资源限制。
虽然我也很想看看 聪明的 人们回答这个问题,这里是我的可能 "刚刚好 "的想法。
这里是我用来测试troubleshooting的do-nothing "noop "镜像的Docker文件。
FROM alpine:3.9
CMD sh -c 'while true; do sleep 5; done'