知识卡片

Pod优先级与抢占机制让高优先级Pod主动挤走低优先级Pod

普通读书笔记卡

内容

[[三级服务质量等级决定资源不足时先杀谁]]是被动的(资源真的不够了才 触发),Kubernetes还提供了主动的PriorityClass资源,让管理员显式声明 Pod之间的优先级差异——这种不平等不只体现在”谁能用更多资源”,而是直接 影响调度和生存本身。优先级最直接的影响是调度顺序:多个Pod同时等待 调度时,高优先级的先被处理,Pod越晚调度,节点资源被抢占的概率越大、 调度失败的风险越高。但受影响更大的是抢占机制(Preemption):普通 情况下Pod调度失败会停在Pending状态,安静等着有新节点加入或旧Pod退出 才有机会;但如果失败的是一个设了明确优先级的Pod,Kubernetes会主动去 找”牺牲者”(Victim)——在所有优先级低于待调度Pod的、已调度的Pod里, 按优先级从低到高排序,从最低的开始杀,直到腾出的资源够用为止,或者 已经没有更低优先级的Pod可杀。这意味着一个高优先级Pod不需要”排队等 运气”,可以主动清场——这和服务质量等级形成互补的两道防线:服务质量 等级回答”资源紧张时该保谁”,优先级和抢占机制回答”调度失败时该不该 主动腾地方、腾谁的地方”。两者结合起来,Kubernetes实际上是在用一套 显式声明的规则替代了”先到先得”这种朴素但低效的调度直觉。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第14章"资源与调度"14.2节 "服务质量与优先级"(源文件:_epub-src对应OEBPS/Text/chapter165.xhtml) - 结论依据:原文说明PriorityClass如何影响调度顺序,并详述抢占机制在 Pod调度失败时如何按优先级从低到高寻找牺牲者、杀掉它们腾出资源,直接 支撑本卡片结论。 - 原始内容:如果有一个被设置了明确优先级的Pod调度失败无法创建的话, Kubernetes就会在系统中寻找一批牺牲者,将它们杀掉以便给更高优先级的 Pod让出资源……按照优先级从低到高排序,从最低的杀起,直至腾出的资源 足以支持待调度Pod成功调度所需的资源为止。