kubernetes-pod驱逐机制
2021-01-25 02:16
标签:mic 无法 bsp ini sys hierarchy 解释 两种 available kubelet持续监控主机的资源使用情况,并尽量防止计算资源被耗尽。一旦出现资源紧缺的迹象,kubelet就会主动终止部分pod的运行,以回收资源。 以下是一些kubelet能用来做决策依据的信号,依据这些信号来做驱逐行为。 memory : 内存; nodefs: 指node自身的存储,存储daemon的运行日志等,一般指root分区/; imagefs: 指docker daemon用于存储image和容器可写层(writable layer)的磁盘; 查看系统总memory: 查看当前已使用memory的方法: 查看当前cgroup使用memory情况: 如果一个节点有10Gi内存,我们希望在内存不足1Gi时候进行驱逐,可以用下面两种方式进行定位驱逐阈值: 1.软驱逐(Soft Eviction):配合驱逐宽限期(eviction-soft-grace-period和eviction-max-pod-grace-period)一起使用。系统资源达到软驱逐阈值并在超过宽限期之后才会执行驱逐动作。 2.硬驱逐(Hard Eviction ):系统资源达到硬驱逐阈值时立即执行驱逐动作。 除了驱逐之外,Kubelet 还支持一系列的容器和镜像垃圾回收选项,它们未来将会被驱逐替代: 1.Scheduler行为 Master上的scheduler不再向该节点调度pod,节点状况与调度行为的对应关系如下: 2.Node的OOM行为 kubelet根据pod的Qos为每个容器设置一个oom_score_adj,如果kubelet无法在系统OOM之前回收足够的内存。则oom_killer会根据内存使用比例来计算oom_score,最后结果和oom_score_adj相加,得分最高的pod将会首先被驱逐。 kubernetes-pod驱逐机制 标签:mic 无法 bsp ini sys hierarchy 解释 两种 available 原文地址:https://www.cnblogs.com/yaohong/p/13245723.html1.驱逐策略
2.驱逐信号
Eviction Signal
Condition
Description
memory.available
MemoryPressue
memory.available
:= node.status.capacity[memory]
- node.stats.memory.workingSet
nodefs.available
DiskPressure
nodefs.available
:= node.stats.fs.available
(Kubelet Volume以及日志等)
nodefs.inodesFree
DiskPressure
nodefs.inodesFree
:= node.stats.fs.inodesFree
imagefs.available
DiskPressure
imagefs.available
:= node.stats.runtime.imagefs.available
(镜像以及容器可写层等)
imagefs.inodesFree
DiskPressure
imagefs.inodesFree
:= node.stats.runtime.imagefs.inodesFree
memory.available的值不是根据系统的free 收集,取值来自于cgroupfs,free -m命令不支持在容器中工作, cgroup.event_control #用于eventfd的接口
memory.usage_in_bytes #显示当前已用的内存
memory.limit_in_bytes #设置/显示当前限制的内存额度
memory.failcnt #显示内存使用量达到限制值的次数
memory.max_usage_in_bytes #历史内存最大使用量
memory.soft_limit_in_bytes #设置/显示当前限制的内存软额度
memory.stat #显示当前cgroup的内存使用情况
memory.use_hierarchy #设置/显示是否将子cgroup的内存使用情况统计到当前cgroup里面
memory.force_empty #触发系统立即尽可能的回收当前cgroup中可以回收的内存
memory.pressure_level #设置内存压力的通知事件,配合cgroup.event_control一起使用
memory.swappiness #设置和显示当前的swappiness
memory.move_charge_at_immigrate #设置当进程移动到其他cgroup中时,它所占用的内存是否也随着移动过去
memory.oom_control #设置/显示oom controls相关的配置
memory.numa_stat #显示numa相关的内存
cat /proc/meminfo |grep MemTotal
#cat /sys/fs/cgroup/memory/memory.usage_in_bytes
cat /sys/fs/cgroup/memory/memory.stat |grep total_inactive_file
3.软驱逐和硬驱逐
memory.available
--eviction-soft:描述驱逐阈值,例如:memory.available
这些驱逐阈值可以使用百分比,也可以使用绝对值,如:
--eviction-hard=memory.available
4.回收Node级别资源
垃圾回收参数
驱逐参数
解释
--image-gc-high-threshold
--eviction-hard
或 --eviction-soft
现存的驱逐回收信号可以触发镜像垃圾回收
--image-gc-low-threshold
--eviction-minimum-reclaim
驱逐回收实现相同行为
--minimum-image-ttl-duration
由于驱逐不包括TTL配置,所以它还会继续支持
--maximum-dead-containers
一旦旧日志存储在容器上下文之外,就会被弃用
--maximum-dead-containers-per-container
一旦旧日志存储在容器上下文之外,就会被弃用
--minimum-container-ttl-duration
一旦旧日志存储在容器上下文之外,就会被弃用
--low-diskspace-threshold-mb
--eviction-hard
or eviction-soft
驱逐回收将磁盘阈值泛化到其他资源
--outofdisk-transition-frequency
--eviction-pressure-transition-period
驱逐回收将磁盘压力转换到其他资源
5.节点资源紧缺情况下系统行为
MemoryPressure:不再调度新的BestEffort pod到这个节点
DiskPressure:不再向这一节点调度pod
文章标题:kubernetes-pod驱逐机制
文章链接:http://soscw.com/index.php/essay/46601.html