图解kubernetes Kubelet驱逐管理关键实现
驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有专属的阈值监测,则在后续驱逐Pod的时候,如果是由该资源触发的驱逐,则优先级会被降低 2. 核心数据结构 驱逐管理器内部有很多的数据结构,这里我们只关注其整体实现的关键数据结构 2.1 阈值与信号 2.1.1 Signal kubelet主要是根据当前系统中的资源来进行驱逐决策的,而信号就表示某种具体可以触发驱逐的资源,比如可用内存,在驱逐决策的时候,会根据统计信息来进行对应资源的计算 type Signal string const ( // 省略其他资源