提问者:小点点

为什么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会出现故障。在任何时候,我都无法同时运行所有三个吊舱。

我在失败的吊舱中看到的唯一事件如下

"在节点日志中可用的警告说"Warning CheckLimitsForResolvConf1m(x32 over15m)kubelet,xxx.netResolv.conf文件'/etc/resolv.conf'包含由3个以上域组成的搜索行!."。

日志中只有这些信息,我无法找出POD随机失效的实际原因。

是否有人能帮助我了解配置是否有任何问题,或者我是否遗漏了其他内容?

谢谢


共1个答案

匿名用户

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

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

因此,在调度之后,如果容器超出了其内存请求,则每当节点内存不足时,其Pod可能会被逐出

请参阅默认硬驱逐阈值值。

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

memory.available<100Mi
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%

加载运行时,您应该跟踪节点条件。

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

如果已满足硬逐出阈值,或已满足软逐出阈值(与相关宽限期无关),则kubelet会报告一种反映节点处于压力下的情况,即内存压力或磁盘压力