尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Kubernetes QoS 与驱逐实战:Guaranteed/Burstable/BestEffort 决定谁先被赶下节点
Kubernetes QoS 与驱逐实战:Guaranteed/Burstable/BestEffort 决定谁先被赶下节点节点内存告急时,kubelet 会开始驱逐 Pod 腾资源。奇怪的是,有时候被赶走的偏偏是你最重要的服务,而一堆无关紧要的任务却安然无恙。这不是随机的——Kubernetes 用QoS(服务质量)等级决定谁先死。而 QoS 等级完全由你怎么写requests和limits决定,很多人根本没意识到自己给核心服务判了优先驱逐。这篇讲清楚三种 QoS 怎么来的、驱逐顺序怎么排,以及怎么保住关键 Pod。三种 QoS 等级是怎么定出来的Kubernetes 不需要你手动声明 QoS,它根据 Pod 里所有容器的requests/limits自动推导,规则就三条:Guaranteed(有保障):每个容器的每种资源(CPU 和内存)都设了limits,且requests limits(不写 requests 时默认等于 limits)。BestEffort(尽力而为):所有容器都没设任何 requests 和 limits。Burstable(可突发):上面两种都不满足——只要设了至少一个 request/limit,但又不满足 Guaranteed 的条件,就是它。绝大多数 Pod 都落在这一档。看三个具体例子。Guaranteed:resources:requests:cpu:500mmemory:256Milimits:cpu:500m# 和 requests 完全相等memory:256Mi# CPU 和内存都设了且相等 → GuaranteedBurstable(最常见,requests 小于 limits):resources:requests:memory:128Mi# 只保证 128Milimits:memory:512Mi# 允许突发到 512Mi → Burstable# 注意:这里没写 cpu,所以不满足 GuaranteedBestEffort(什么都不写):# resources 字段整个省略 → BestEffort查一个已运行 Pod 的 QoS 等级:kubectl get podpod-name-ojsonpath{.status.qosClass}# 输出 Guaranteed / Burstable / BestEffort驱逐顺序:BestEffort 先死,Guaranteed 最后当节点出现内存压力(memory 是不可压缩资源,不够就得杀 Pod),kubelet 按这个顺序驱逐:先杀 BestEffort:没设任何 request,系统认为它可有可无。再杀 Burstable 中超用最多的:实际用量超过其 memoryrequest越多的,越先被杀。最后才动 Guaranteed:只要它用量没超过自己的 limits,几乎不会因为节点压力被驱逐(除非系统级组件也保不住)。这里有个关键细节:Burstable 之间的排序看的是实际使用量超出 request 的部分,而不是绝对用量。也就是说,一个 request 设得很低、实际却用很多的 Pod,比一个老老实实按 request 用的 Pod 更危险。实战踩坑:给核心服务判了死刑却不自知最典型的错误是这样:核心 API 服务为了省资源、能弹性,requests 设得很低、limits 设得很高:# 反面教材:核心服务这么配,节点一紧张它就被驱逐resources:requests:memory:64Mi# 保障值极低limits:memory:2Gi# 实际经常用到 1.5Gi这个 Pod 是 Burstable,而且实际用量(1.5Gi)远超 request(64Mi),节点内存一紧张,它在 Burstable 队列里排最前面,第一个被赶走。你以为限制高优先级高,恰恰相反。正确做法:关键服务把requests设到接近真实用量,让保障值托底。要最高保障就做成 Guaranteed:# 核心服务:requests 贴近真实峰值,limits 相等 → Guaranteed,几乎不被驱逐resources:requests:cpu:1memory:1536Milimits:cpu:1memory:1536Mi别混淆:QoS 驱逐 ≠ OOMKilled两者都和内存有关,但机制完全不同,排查时别搞混:QoS 驱逐(Evicted):是kubelet因为节点整体内存不够,主动挑 Pod 赶走。Pod 状态变Evicted,describe里能看到The node was low on resource: memory。OOMKilled:是Linux 内核因为单个容器用量超过了自己的 memorylimit,把容器进程杀掉。describe里容器State显示OOMKilled,exit code 137。# 看是不是被驱逐kubectl get podname-ojsonpath{.status.reason}# Evicted# 看容器是不是 OOMkubectl describe podname|grep-A3Last State# OOMKilled, Exit Code: 137一个是节点没资源、挑软柿子捏,一个是你自己超了自己的额度。想减少 OOMKilled 就调高 memory limit;想让服务不被节点压力驱逐,就调高 memory request(或做成 Guaranteed)。保命组合:关键系统 Pod 用 PriorityClass 加双保险QoS 决定资源不够时谁先走,而PriorityClass是另一维度:调度和抢占时谁优先。生产上关键组件建议两者都配,给核心服务加一个高优先级:apiVersion:scheduling.k8s.io/v1kind:PriorityClassmetadata:name:high-priorityvalue:1000000globalDefault:falsedescription:关键在线服务专用---# Pod spec 里引用它spec:priorityClassName:high-priority高priority的 Pod 在节点资源不足调度不下时,还能抢占(驱逐)低优先级 Pod 给自己让位。QoS 管 kubelet 的资源回收顺序,PriorityClass 管调度器的抢占顺序,两者配合才是完整的保命方案。小结QoS 等级不用手动声明,由requests/limits自动推导:都相等Guaranteed,啥都不写BestEffort,其余Burstable。节点内存压力时驱逐顺序:BestEffort → 超用最多的 Burstable → Guaranteed。最大的坑:核心服务 request 设太低、limit 设很高,会被排到 Burstable 驱逐队列最前面——关键服务要把 request 贴近真实用量。Evicted(kubelet 节点级驱逐)和 OOMKilled(内核单容器超 limit)是两回事,看status.reason和 exit code 137 区分。关键组件再叠一层PriorityClass,QoS 管资源回收、Priority 管调度抢占,双保险。一句话记忆点:给核心服务设够 requests,才不会在节点紧张时被当成第一个牺牲品。
RELATED

相关推荐

如何三分钟给电脑装一块 4K 240Hz 虚拟显示器:parsec-vdd 虚拟显示驱动完整指南

如何三分钟给电脑装一块 4K 240Hz 虚拟显示器:parsec-vdd 虚拟显示驱动完整指南

如何三分钟给电脑装一块 4K 240Hz 虚拟显示器:parsec-vdd 虚拟显示驱动完整指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 一句话概要 parsec-vdd 是一款免费的…

📅 2026/10/7 6:48:09
智能体驱动的价值流仿真:从静态映射到动态认知的架构与实现

智能体驱动的价值流仿真:从静态映射到动态认知的架构与实现

1. 项目概述:当VSM模拟遇上“智能体”洞察如果你正在研究复杂系统的建模与仿真,特别是那些涉及供应链、生产流程或服务设计的领域,那么“价值流图”和“离散事件仿真”这两个词对你来说一定不陌生。传统的VSM(Value Stream Mappin…

📅 2026/10/7 21:43:02
基于智能体的价值流仿真:从动态优化到自动化洞察生成

基于智能体的价值流仿真:从动态优化到自动化洞察生成

1. 项目概述:当VSM仿真遇上“智能体”洞察如果你正在研究复杂系统的仿真与优化,比如一条生产线的效率瓶颈,或者一个软件团队的交付流程,那么“价值流图”这个概念你一定不陌生。VSM,或者说价值流映射,是我们…

📅 2026/10/7 14:03:53
MORE NEWS

更多资讯

📰

领导者效应:抢先卡位与心智复利,小团队也能学的品牌定位策略

你有没有过这种体验:想买一件不太熟悉的东西,比如一台家用投影仪,或者一套跨境家居用品,你已经记不清那些评测里到底对比了哪些参数,最后下单时却还是选了那个“听上去最耳熟”的牌子。这种条件反射,商业上…

📰

SFML C++九宫幻卡开发:状态驱动架构与交互设计

1. 项目概述:为什么是九宫幻卡?为什么选SFML?九宫幻卡——这个名字听起来像某种古籍里的秘术,其实它是个结构精巧、逻辑清晰的益智类桌面游戏:33的格子中随机打乱9张带编号的卡片(通常为1~8加一个空格&…

📰

Claude Code模板设计指南:从CLAUDE.md到slash command

1. 为什么Claude Code模板值得认真设计用Claude Code写代码也有一段时间了,最早我是直接开个终端就发起对话,让它"看看这个项目""帮我修个bug""给这个模块加个测试"。前期还行,但随着项目变大、协作的人变多&a…

📰

Unity Shader 噪声纹理从生成到实战:原理、采样流程与避坑指南

做 Unity Shader 这几年,我一直觉得噪声是那种“用得最多的冷门话题”。说冷门,是因为新手期大部分时间都在折腾光照、颜色、UV 动画这些一眼能看到变化的东西;说最常用,是因为一旦开始做特效、做材质,抖动、扭曲、溶解…

📰

Claude Code模板工程化:从提示词固化到AI编程稳定产出

1. 模板项目的核心定位与真实价值先说结论:claude-code-templates不是普通的提示词收藏夹,它是把 Claude Code 从“能干活”推向“稳定产出”的关键基础设施。Claude Code 大家应该不陌生,Anthropic 官方的命令行 AI 编程工具,直接…

📰

Stable Diffusion室内设计实战:从毛坯房到风格效果图的AI辅助流程

Stable Diffusion这名字刚火起来的时候,我周围大部分设计师朋友都在拿它画二次元头像或者魔改人像。直到有一天,我试着把一张空荡荡的毛坯房照片丢进图生图,让它“重装修”了一遍,出来的画面真的让我愣了好几秒——原本灰扑扑的水…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬