捕鱼大亨网络版 1.14中稳定性改进的进程ID限制

作者:德里克·卡尔(Derek Carr)

您是否见过有人拿走了比他们应得的饼干更多的钱?一个人走进来,抓起半打新鲜烤制的巧克力碎薯条和小品,就像饼干怪兽大喊“ Om nom nom nom”。

在一些罕见的工作负载中,捕鱼大亨网络版集群内部也发生了类似的情况。每个Pod和Node都有有限数量的可能的进程ID(PID),供所有应用程序共享。尽管很少有任何进程或Pod能够获取并获取所有PID,但是由于这种类型的行为,一些用户遇到资源匮乏的情况。因此,在捕鱼大亨网络版 1.14中,我们引入了一项增强功能,以减轻单个Pod垄断所有可用PID的风险。

您可以保留一些PID吗?

在这里,我们谈论的是某些容器的贪婪。在理想情况之外,失控过程有时会发生,特别是在进行测试的集群中。因此,正在发生一些疯狂的非生产就绪活动​​。

在这种情况下,可能会在节点内部发生类似于叉子炸弹的事件。随着资源逐渐被侵蚀,被某种僵尸般的过程接管,这些过程不断地催生孩子,其他合法的工作负载开始受到冲击,以支持这种不断膨胀的处理能力浪费。这可能导致同一吊舱上的其他进程缺少所需的PID。这也可能导致有趣的副作用,因为节点可能会发生故障,并且该Pod的副本将安排到新计算机上,该过程将在整个群集中重复进行。

解决问题

因此,在捕鱼大亨网络版 1.14中,我们添加了一项功能,该功能允许配置kubelet来限制给定Pod可以消耗的PID数量。如果该机器支持32,768个PID和100个容器,则可以为每个容器分配300个PID的预算,以防止PID完全耗尽。如果管理员想要过量使用类似于cpu或内存的PID,则他们也可能这样做,但也有一些额外的风险。无论哪种方式,没有一个吊舱可以使整个机器瘫痪。这通常可以防止简单的叉子炸弹接管您的集群。

此更改使管理员可以保护一个Pod与另一个Pod无关,但不能确保计算机上的所有Pod是否都可以保护该节点以及Node Agent本身不会掉落。因此,我们在此版本中以alpha形式引入了一项功能,该功能可将PID与节点代理(Kubelet,运行时等)上的Pod上的最终用户工作负载隔离开来。管理员能够保留特定数量的PID,类似于今天的PID保留CPU或内存的方式,并确保它们永远不会被该计算机上的Pod占用。一旦从alpha逐步升级到beta,然后在捕鱼大亨网络版的未来版本中稳定下来,我们将免受易饿的Linux资源的侵害。

开始使用 捕鱼大亨网络版 1.14.

参与其中

如果您对此功能有反馈,或者有兴趣参与设计和开发,请加入 节点特殊兴趣小组.

关于作者:

Derek Carr是Red Hat的高级首席软件工程师。他是捕鱼大亨网络版的贡献者,也是捕鱼大亨网络版社区指导委员会的成员。