更新时间:2022-05-06 GMT+08:00
如何设置一个节点上的某个容器不能被驱逐?
问题背景
客户反馈CCE集群中一个节点上的两个容器之间互相争资源,导致kubelet将其全部驱逐。询问能不能设定策略让其中一个服务一直保留?如何设定?
问题建议
Kubelet会按照下面的标准对Pod的驱逐行为进行评判:
- 根据服务质量:即BestEffort、Burstable、Guaranteed。
- 根据Pod调度请求的被耗尽资源的消耗量。
接下来,Pod按照下面的顺序进行驱逐(QOS):
BestEffort -> Burstable -> Guaranteed
- Best-Effort类型的pods:系统用完了全部内存时,该类型pods会最先被kill掉。
- Burstable类型的pods:系统用完了全部内存,且没有Best-Effort container可以被kill时,该类型pods会被kill掉。
- Guaranteed类型的pods:系统用完了全部内存、且没有Burstable与Best-Effort container可以被kill,该类型的pods会被kill掉。
您可以在工作负载yaml中添加QoSClass字段设置被驱逐优先级,如下图:

- 如果pod进程因使用超过预先设定的limites而非Node资源紧张情况,系统倾向于在其原所在的机器上重启该container或本机或其他重新创建一个pod。
- 如果资源充足,可将QoS pods类型均设置为Guaranteed。用计算资源换业务性能和稳定性,减少排查问题时间和成本。
- 如果想更好的提高资源利用率,业务服务可以设置为Guaranteed,而其他服务根据重要程度可分别设置为Burstable或Best-Effort,例如filebeat。
父主题: 调度策略
调度策略 所有常见问题
more
