我有一个单节点库伯内特斯集群,它显示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随机失效的实际原因。
是否有人能帮助我了解配置是否有任何问题,或者我是否遗漏了其他内容?
谢谢
创建Pod时,Kubernetes调度程序会选择一个节点,供Pod在其上运行。每个节点对于每种资源类型都有一个最大容量:它可以为POD提供的CPU和内存量。调度程序确保,对于每种资源类型,调度容器的资源请求之和小于节点的容量。
注意:尽管节点上的实际内存或CPU资源使用率非常低,但如果容量检查失败,调度程序仍然拒绝在节点上放置Pod。这可以防止在稍后资源使用率增加时(例如,在每天的请求速率峰值期间)节点上出现资源短缺。
因此,在调度之后,如果容器超出了其内存请求,则每当节点内存不足时,其Pod可能会被逐出
请参阅默认硬驱逐阈值值。
kubelet具有以下默认硬逐出阈值:
memory.available<100Mi
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%
加载运行时,您应该跟踪节点条件。
kubelet将一个或多个逐出信号映射到相应的节点条件。
如果已满足硬逐出阈值,或已满足软逐出阈值(与相关宽限期无关),则kubelet会报告一种反映节点处于压力下的情况,即内存压力或磁盘压力