24.6. 了解 Pod 驱除
如果达到驱除阈值并且传递宽限期,节点会启动驱除 pod 过程,直到信号低于定义的阈值。
节点通过其 服务质量 对 pod 进行驱除。在具有相同服务质量的 pod 中,节点会相对于 pod 的调度请求,消耗计算资源的消耗来扩展 pod。
每个服务质量级别都有内存不足分数。Linux 内存不足工具(OOM 终止程序)使用分数来确定要结束的 pod。如需更多信息,请参阅了解服务质量和内存不足 Killer。
下表列出了每个服务质量级别,以及内存分数的相关等级。
服务质量 | 描述 |
---|---|
| 相对于请求消耗最多的资源的 Pod 首先失败。如果没有 pod 超过其请求,策略会以资源的最大使用者为目标。 |
| 相对于该资源请求的请求,消耗最多的资源的 Pod 会首先失败。如果没有 pod 超过其请求,策略会以资源的最大使用者为目标。 |
| 消耗最多资源数量的 Pod 首先失败。 |
除非系统守护进程(如节点或容器引擎)消耗资源,或保证服务质量 pod 不会因为其他 pod 消耗而被驱除,超过使用 system-reserved
分配的资源消耗的资源,或者节点仅保证服务质量 pod 的剩余质量。
如果节点仅保证剩余的服务质量 pod,节点会驱除影响节点稳定性的 pod,并将意外消耗的影响限制到其他保证的服务 pod。
本地磁盘是服务资源的最优质量。如果需要,节点会一次驱除 pod,以便在遇到磁盘压力时回收磁盘空间。节点根据服务质量对 pod 进行排序。如果节点正在响应缺少可用内节点,则节点会首先驱除具有最低服务质量的 pod,从而回收内节点。如果节点正在响应缺少可用磁盘,则该节点会将 pod 在服务质量中排入使用最多的本地磁盘,然后首先驱除这些 pod。
24.6.1. 了解服务质量和内存不足 Killer
如果节点在能够重新声明内存前出现系统内存不足(OOM)事件,则该节点会依赖于 OOM 终止程序来响应。
节点根据 pod 的服务质量,为每个容器设置一个 oom_score_adj
值。
服务质量 | oom_score_adj 值 |
---|---|
| -998 |
| min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999) |
| 1000 |
如果节点在节点遇到系统 OOM 事件前无法重新声明内存,则 OOM 终止程序进程会计算 OOM 分数:
% of node memory a container is using + oom_score_adj = oom_score
然后,节点将以最高分数结束容器。
首先,具有最低服务质量的容器,可以消耗最大数量的内存(相对于调度请求)。
与 pod 驱除不同,如果 pod 容器因为 OOM 终止,节点可以根据节点重启策略重启容器。