如何解决如何正确设置Kubernetes Pod驱逐限制以避免系统OOM杀手
我花了整整一天的时间试图理解Kubernetes的资源管理。具体来说,我正在尝试设置逐出阈值和资源预留,以使始终至少有1GiB的可用内存。
继续阅读有关resource reservations和out-of-resource handling的文档,我认为设置以下驱逐策略就足够了:
--eviction-hard=memory.available<1Gi
但是,实际上,这根本不起作用,因为kubelet的计算似乎与内核在需要确定是否需要调用OOM杀手程序时所进行的计算不同。例如。当我用一堆运行人工记忆猪的Pod加载系统时,我从free -m
得到以下报告:
Total: 15866
Used: 14628
free: 161
shared: 53
buff/cache: 1077
available: 859
根据内核,有859个MiB内存可用。但是,kubelet不会调用其驱逐策略。实际上,即使在非常缓慢地提高内存使用量的情况下,我也能够在调用kubelet逐出策略之前调用系统OOM杀手(按照其默认配置,使kubelet房屋控制循环休眠10秒)。
我发现this script曾经在Kubernetes文档中,并且应该以与Kubelet相同的方式计算可用内存。我与上面的free -m
并行运行,并得到以下结果:
memory.available_in_mb 1833
差不多差了10亿!
现在,我知道计算是设计使然的,但是这给我带来了一个显而易见的问题:如何可靠地管理系统资源使用情况,从而不会调用系统OOM杀手?我可以设置什么驱逐策略,以便当可用内存不足1 GB时,kubelet将开始驱逐Pod?
解决方法
根据文档https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/,您应该添加Kubelet标志--system-reserved=memory=1024Mi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。