更新时间:2024-07-02 GMT+08:00
如何避免节点上的某个容器被驱逐?
问题背景
在工作负载调度时可能会发生一个节点上的两个容器之间互相争资源的情况,最终导致kubelet将其全部驱逐。那么能不能设定策略让其中一个服务一直保留?如何设定?
问题建议
Kubelet会按照下面的标准对Pod的驱逐行为进行评判:
- 根据服务质量:即BestEffort、Burstable、Guaranteed。
- 根据Pod调度请求的被耗尽资源的消耗量。
接下来,Pod按照下面的顺序进行驱逐(QOS):
BestEffort -> Burstable -> Guaranteed
- BestEffort类型的Pod:系统用完了全部内存时,该类型Pod会最先被终止。
- Burstable类型的Pod:系统用完了全部内存,且没有BestEffort容器可以终止时,该类型Pod会被终止。
- Guaranteed类型的Pod:系统用完了全部内存、且没有Burstable与BestEffort容器可以终止时,该类型的Pod会被终止。
- 如果Pod进程因使用超过预先设定的限制值而非Node资源紧张情况,系统倾向于在其原来所在的机器上重启该容器。
- 如果资源充足,可将QoS Pod类型均设置为Guaranteed。用计算资源换业务性能和稳定性,减少排查问题时间和成本。
- 如果想更好的提高资源利用率,业务服务可以设置为Guaranteed,而其他服务根据重要程度可分别设置为Burstable或BestEffort,例如filebeat。