当Kubernetes Pod的限制重叠时,为什么Pod会随机失败?

时间:2020-02-11 10:28:42

标签: docker kubernetes containers

我有一个单节点Kubernetes集群,该集群显示10Gi,3个CPU可用(总共16 Gi,4CPU)可用于在集群启动后运行pod。然后,我正在尝试两种不同的方案:

Scenario-1. 
   Running 3 pods individually with configs(Request,Limit) as: 
   Pod-A: (1 Gi,3.3Gi) and (1 cpu,1 cpu)
   Pod-B: (1 Gi,3.3Gi) and (1 cpu,1 cpu)
   Pod-C: (1 Gi,3.3Gi) and (1 cpu,1 cpu)

在这种情况下,应用程序可以完美地放置在相应的窗格中,并且可以按预期运行。

Scenario-2. 
   Running 3 pods individually with configs(Request,Limit) as: 
   Pod-A: (1 Gi,10 Gi) and (1 cpu,3 cpu)
   Pod-B: (1 Gi,10 Gi) and (1 cpu,3 cpu)
   Pod-C: (1 Gi,10 Gi) and (1 cpu,3 cpu)

在第二种情况下,应用在相应的Pod中启动,但是在其中一些Pod上施加了一定的负载后即随机发生故障,即Pod-A下降,有时Pod-2或Pod-3。在任何时候,我都无法同时运行所有三个Pod。

我在失败的窗格中只能看到的事件如下

The warning which is available in node logs says "Warning CheckLimitsForResolvConf 1m (x32 over 15m) kubelet, xxx.net Resolv.conf file '/etc/resolv.conf' contains search line consisting of more than 3 domains!。”。

只有这些信息记录在日志中,我无法找出Pod随机失败的实际原因。

任何人都可以帮助我了解配置是否有问题或我缺少什么吗?

谢谢

1 个答案:

答案 0 :(得分:3)

创建Pod时,Kubernetes调度程序选择一个要在其上运行Pod的节点。 每个节点对每种资源类型都有最大容量:它可以为Pod提供的CPU和内存量。调度程序确保对于每种资源类型,已调度容器的资源请求总数小于节点的容量。

注意,尽管节点上的实际内存或CPU资源使用率非常低,但是如果容量检查失败,调度程序仍然拒绝将Pod放置在节点上。这样可以防止以后资源使用量增加时(例如,在请求率的每日峰值期间)节点上的资源短缺。

因此,在调度之后,如果容器超出了其内存请求,则只要节点内存不足,它的Pod就有可能被驱逐

引用Default Hard Eviction Threshold values

kubelet具有以下默认硬驱逐阈值:

I2C1_Write(SHT31_Address, 0xFF, (unsigned char*)&CMD_SingleShot[1], CMD_SingleShot[0])

在加载运行时,您应该跟踪Node Conditions

kubelet将一个或多个驱逐信号映射到相应的节点条件。

如果满足硬驱逐阈值,或满足软驱逐阈值(独立于其关联的宽限期),则kubelet报告反映节点处于压力下的条件,即memory.available<100Mi nodefs.available<10% nodefs.inodesFree<5% imagefs.available<15% 或{{1} }

相关问题