Pod无法运行,资源不足

时间:2018-11-07 15:51:44

标签: kubernetes

当我尝试部署一个包含十个副本的部署时,会出现此错误。

  

0/2个节点可用:1个内存不足,有1个节点有容器无法忍受的污点。

我不明白为什么要两个节点。是相同的节点,只是相同的问题。

我有很多可用的RAM(1GB)。

如何在不添加其他节点的情况下解决此错误。

我在部署yaml文件中有以下资源:

限制:     cpu:1000m     内存:1000Mi   要求:     cpu:100m     内存:200Mi

服务器:

  1. 主:

    CPU: 2
    RAM: 2 - 1 Free
    
  2. 从站:

    CPU: 2
    RAM: 2 - 1 Free
    

1 个答案:

答案 0 :(得分:3)

我认为您在这里有多个问题。

首先显示错误消息的格式

  

0/2个节点可用:1个内存不足,有1个节点有容器无法忍受的污点。

首先要弄清楚的是,您总共有2个节点,无法调度到其中任何一个节点。然后是阻止在该节点上进行调度的条件列表。一个节点可能会受到多个问题的影响。例如,内存不足和CPU不足。因此,这些数字的总和比您在所有节点上的总和还多。

第二个问题是,您写入YAML文件的请求适用于每个副本。如果使用100M内存实例化同一容器5次,则它们总共需要500M。您要运行10个Pod,每个Pod需要200Mi的内存。因此,您需要2000Mi的可用内存。

您的错误消息已经暗示一个节点上没有足够的内存。我建议您通过kubectl describe node <node-name>检查两个节点,以找出Kubernetes可以“看到”多少空闲内存。 Kubernetes总是阻塞Pod所请求的全部内存,无论该Pod使用了多少内存。

错误消息中的污点表明另一个节点(可能是主节点)具有污点,而该污点是部署所不能容忍的。有关污点和公差的更多信息,请参见documentation。简而言之,找出节点上的哪个污点会阻止调度,并通过kubectl taint nodes <node-name> <taint-name>-将其删除。