赞
踩
一:为什么要有驱逐
pod.spec.containers[].resources中会存在cpu或memory的request和limit。即该pod请求的最小资源和Node结点可以给的最大资源。
当一个容器的cpu使用率超过limit时会被进行流控,而当内存超过limit时则会被oom_kill。
完全依赖于oom_kill并不是一个很好的方案,一来对于cpu要求高的容器没有作用,二来单纯将pod杀死,并不能根本上解决困局,比如pod占用node绝大部分内存,假如pod被kill后再次调度到这个node上,oom的情况还会复现。所以kubelet增加了一套驱逐机制。
eviction中要设置触发驱逐的阈值Eviction Thresholds,这个阈值的配置可以是一个定值或一个百分比。如:
memory.available<10%
memory.available<1Gi
二:驱逐机制
Soft Eviction Thresholds
软驱逐机制表示,当node的内存/磁盘空间达到一定的阈值后,我要观察一段时间,如果改善到低于阈值就不进行驱逐,若这段时间一直高于阈值就进行驱逐。
Hard Eviction Thresholds
强制驱逐机制则简单的多,一旦达到阈值,立刻把pod从本地kill,
Pod eviction
当资源使用情况触发了驱逐条件时,kubelet会启动一个任务去轮流停止运行中的pod,直到资源使用状况恢复到阈值以下。以硬驱逐为例,整体流程是:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。