我有一个单节点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随机失败的实际原因。
任何人都可以帮助我了解配置是否有问题或我缺少什么吗?
谢谢
答案 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} }