驱赶行为的触发条件
当计算节点(安装kubelet的节点)资源不足时,会触发驱赶行为。
驱赶行为的触发条件主要包括
- memory.available可用内存
- nodefs.available文件系统剩余空间
- nodefs.inodesFree文件系统剩余Inode等
- imagefs.available镜像文件系统剩余空间
- imagefs.inodesFree镜像文件系统剩余Inode
- 软阈值和硬阈值
镜像文件系统主要保存镜像分层及运行时最上面的读写层。
kubelet可以针对这些指标设置软阈值和硬阈值。
软阈值是指当达到阈值后触发关闭,逐步迁移,
硬阈值则是强制关闭容器,驱赶到其他节点运行。
所以,软阈值相对于硬阈值设置的数值要稍大,针对可用内存memory.available,通常软阈值为1.5Gi,而硬阈值为0.5Gi。 这种思想很常见,比如redis rdb持久化策略、redis主从同步缓冲区设置策略…
kubelet回收资源的两个参数
当某个资源出现不足后,节点将会发出驱赶策略,并标记节点状态为MemoryPressure内存压力或者DiskPressure磁盘压力。当回收部分资源后(删除无用的镜像、回收死亡的容器、删除低优先级的Pod),节点将重新标记为正常运行,并重新接收新Pod创建,那么也可能会出现资源不足的情况。
为了避免节点一直处于频繁切换“资源不足”和“资源充足”状态,kubelet通过两种机制保证,一是通过eviction-minimum-reclaim指定一次回收中至少回收的资源,另一个是通过eviction-pressure-transition-period设置延迟周期,需要计算节点保持“资源充足”的状态超过eviction-pressure-transition-period设定时间后,才可以将节点设置为“资源充足”状态。