0

0

Linux Pod 调度策略与性能优化

冷炫風刃

冷炫風刃

发布时间:2026-02-21 11:02:03

|

498人浏览过

|

来源于php中文网

原创

pod 被调度到错误节点且 nodeselector 不生效,根本原因是标签键值不匹配、未打全或 pod 未触发强制匹配,kubernetes 静默跳过不匹配节点,导致 pod 持续 pending。

linux pod 调度策略与性能优化

Pod 被调度到错误节点,nodeSelector 不生效怎么办

根本原因通常是标签没打对、没打全,或 Pod 没有触发强制匹配逻辑。Kubernetes 不会报错,只是静默跳过不匹配的节点。

  • nodeSelector 是硬约束,只要键值对不完全匹配,Pod 就永远 Pending —— 但 kubectl describe pod 里只显示 0/3 nodes are available,不会告诉你哪条 label 缺失
  • 检查节点真实标签用 kubectl get node --show-labels,别信自己记忆里的 key 名(比如写成 disk=ssd,实际是 disk-type=ssd
  • 如果节点刚加完 label,要等几秒再创建 Pod;label 更新不是实时广播的,kube-scheduler 可能还在缓存旧状态
  • 避免混用 nodeSelectornodeAffinity:前者不支持运算符,后者支持 In/Exists,但配置稍复杂,新手容易漏写 requiredDuringSchedulingIgnoredDuringExecution

高负载下 Pod 频繁被驱逐,resources.limits 设太高反而更卡

内存 limit 不是“保证能用这么多”,而是 cgroup 的硬上限;一旦 Pod 内存使用超限,Linux OOM killer 会直接杀进程,比调度失败更难排查。

  • CPU limit 实际限制的是 CPU 时间片配额,设太高会导致调度器误判节点资源余量,把多个高 CPU Pod 塞进同一台机器
  • 推荐先用 requests 做调度依据,limits 仅用于防止单个 Pod 吃光整机内存;生产环境常见组合:requests: {memory: "512Mi", cpu: "250m"}limits: {memory: "1Gi"}(CPU 不设 limit)
  • 查历史 OOM 事件用 kubectl get events --field-selector reason=OOMKilled,不是看 kubectl logs —— 进程被杀后日志就断了

想让两个服务尽量不在同一节点,podAntiAffinity 怎么写才可靠

反亲和性默认是“尽力而为”,不加 topologyKey 或写错 topology domain,很容易失效——比如跨 AZ 部署时用了 topologyKey: kubernetes.io/hostname,结果所有 Pod 还是挤在一台节点上。

住哪API酒店+租车源码包
住哪API酒店+租车源码包

数据本地化解决接口缓存数据无限增加,读取慢的问题,速度极大提升更注重SEO优化优化了系统的SEO,提升网站在搜索引擎的排名,增加网站爆光率搜索框本地化不用远程读取、IFRAME调用,更加容易应用及修改增加天气预报功能页面增加了天气预报功能,丰富内容增加点评和问答页面增加了点评和问答相关页面,增强网站粘性电子地图优化优化了电子地图的加载速度与地图功能酒店列表增加房型读取酒店列表页可以直接展示房型,增

下载
  • 必须指定 topologyKey,常见值:kubernetes.io/hostname(同节点)、topology.kubernetes.io/zone(同可用区),注意 v1.21+ 才推荐后者
  • preferredDuringSchedulingIgnoredDuringExecution 是软策略,Pod 可能仍被调度到同节点;真要强制隔离,必须用 requiredDuringSchedulingIgnoredDuringExecution
  • 反亲和性匹配的是 Pod 自身的 label,不是 service 或 deployment 名;确保目标 Pod 的 metadata.labels 包含你用来匹配的 key(如 app: redis
  • 大规模集群中慎用 podAntiAffinity,它会让 scheduler 遍历所有节点做匹配,可能拖慢整个调度队列

Node 资源充足但 Pod 卡在 Pending,TopologySpreadConstraints 暴露的隐性瓶颈

这个字段看着是“分散部署”,实际会按 topology domain 统计已调度 Pod 数,一旦某个 domain 达到 maxSkew,后续 Pod 就无法调度进去——哪怕该节点空闲内存还有 80%。

  • 典型误配:maxSkew: 1 + 3 个 zone,但只有 2 个 zone 有节点(第 3 个 zone 节点数为 0),此时新 Pod 必然 Pending,因为无法满足“任意两个 zone 的 Pod 数差 ≤ 1”
  • whenUnsatisfiable: DoNotSchedule 是硬限制,ScheduleAnyway 才是软策略;很多人复制示例时漏改这个字段
  • 调试时用 kubectl get nodes -o wide 看各节点所属的 topology.kubernetes.io/zone 值是否一致,云厂商有时会返回空字符串或格式异常的 zone 名

调度策略真正难的不是写对 YAML,而是理解每个字段背后触发的是哪一层决策:kube-scheduler 的 predicate 阶段?priority 阶段?还是 kubelet 的 cgroup 实际执行?这些层之间有延迟、有缓存、有默认行为,不查事件、不看节点 label、不验证 topology domain,光靠重试只会掩盖问题。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1555

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

238

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

127

2025.10.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

595

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1555

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

641

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

986

2024.03.22

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.4万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号