[英]Kubernetes doesn't take into account total node memory usage when starting Pods
我所看到的是:Kubernetes在计划新Pod时仅考虑其组件使用的内存,并且将剩余内存视为空闲,即使Kubernetes之外的其他系统进程正在使用该内存。 因此,在创建新部署时,它将尝试在窒息的节点上安排新的Pod。
我希望看到的是:Kubernetes 自动考虑总内存使用情况(通过kubernetes组件+系统进程),并将其安排在另一个节点上。
解决方法是,是否需要设置配置参数,还是一个错误?
是的,分配资源的参数很少:您可以为pod分配内存和CPU,并为系统守护程序手动分配内存和CPU。 在文档中,您可以找到该示例的工作方式:
这是说明节点可分配计算的示例:
32Gi
的memory
, 16 CPUs
和100Gi
的Storage
--kube-reserved
设置为cpu=1,memory=2Gi,ephemeral-storage=1Gi
--system-reserved
设置为cpu=500m,memory=1Gi,ephemeral-storage=1Gi
--eviction-hard
设置为memory.available<500Mi,nodefs.available<10%
在这种情况下, Allocatable
的内存将是14.5 CPUs
, 28.5Gi
的内存和98Gi
的本地存储。 调度程序确保该节点上所有Pod的总内存requests
不超过28.5Gi
,存储空间不超过88Gi
。 只要跨Pod的总内存使用量超过28.5Gi
,或者如果磁盘总使用量超过88Gi
如果节点上的所有进程都消耗尽可能多的CPU,则Pod一起使用最多不能超过14.5 CPUs
。
如果未强制执行kube-reserved
和/或system-reserved
并且系统守护程序超出了其保留, kubelet
只要总节点内存使用量高于31.5Gi
或storage
大于90Gi
, kubelet
将pod 90Gi
您可以分配,你需要Kubernetes与标志多达--kube-reserved
,并与标志系统-system-reserved
。
此外,如果您需要更严格的规则来生成Pod,可以尝试使用Pod Affinity。
Kubelet具有--system-reserved
参数,可让您为系统进程保留cpu和内存。
它不是动态的(您仅在启动时保留资源),而是告诉Kubelet不要使用节点中所有资源的唯一方法。
--system-reserved mapStringString
一组ResourceName = ResourceQuantity(例如cpu = 200m,内存= 500Mi,临时存储= 1Gi)对,描述了为非Kubernetes组件保留的资源。 当前仅支持cpu和内存。 有关更多详细信息,请参见http://kubernetes.io/docs/user-guide/compute-resources 。 [默认=无]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.