Kubernetes在启动Pod时不考虑总节点内存使用量

时间:2018-05-22 14:15:52

标签: linux memory kubernetes kubelet

我看到:Kubernetes在调度新Pod时仅考虑其组件使用的内存,并将剩余内存视为空闲,即使它被Kubernetes之外的其他系统进程使用。因此,在创建新部署时,它会尝试在窒息的节点上安排新的pod。

我期望看到的内容:Kubernetes 自动考虑总内存使用量(通过kubernetes组件+系统进程)并在另一个节点上安排它。

作为解决方法,是否需要设置配置参数或是否为错误?

1 个答案:

答案 0 :(得分:1)

是的,分配资源的参数很少: 您可以为pod分配内存和CPU,并手动为系统守护程序分配内存和CPU。 In documentation您可以通过示例找到它的工作原理:

示例场景

以下是说明节点可分配计算的示例:

  • 节点有 INSERT INTO INVOICES (UID, POID, REFID) SELECT IMPORT.UID, IMPORT.POID, IMPORT.REFID FROM INVOICES WHERE NOT EXISTS(STUCK HERE) 32Gimemory16 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%将是Allocatable14.5 CPUs内存和28.5Gi本地存储。调度程序可确保此节点上所有容器中的总内存98Gi不超过requests且存储空间不超过28.5Gi。每当整个pod的内存使用量超过88Gi时,或者如果整体磁盘使用量超过28.5Gi,Kubelet就会逐出pods。如果节点上的所有进程都消耗尽可能多的CPU,那么pod一起消耗的数量不会超过{{ 1}}。

如果未强制执行88Gi和/或14.5 CPUs并且系统守护程序超出其预留,则kube-reserved会在整个节点内存使用率高于system-reservedkubelet时逐出pod {1}}大于31.5Gi

您可以使用标记storage为Kubernetes分配所需数量,为标记90Gi分配系统。

此外,如果您需要更严格的产卵荚规则,可以尝试使用Pod Affinity.