news 2026/7/29 17:37:21

K8S系列之6.2:调度进阶(污点、容忍、亲和性与自定义调度器)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8S系列之6.2:调度进阶(污点、容忍、亲和性与自定义调度器)

Kubernetes调度器被称为集群的"大脑",负责将Pod分配到合适的节点。本章将从基础调度深入到高级调度策略,让你从"能调度"进阶到"调度好",实现资源的最优利用和业务的最佳性能。

引言:调度器的进化之路

从简单的随机调度到智能的感知调度,Kubernetes调度器经历了显著的演进:

随机调度
节点选择器
亲和性/反亲和性
污点与容忍
自定义调度器
多调度器协同

一、污点(Taints)与容忍(Tolerations):节点隔离的艺术

1.1 污点与容忍的核心概念

污点是节点的属性,用于排斥Pod;容忍是Pod的属性,允许Pod被调度到有特定污点的节点上。

Pod容忍
节点污点
匹配
不匹配
匹配
不匹配
容忍所有
关键服务
容忍部分
普通服务
容忍特定
特殊服务
NoSchedule
专用节点
NoExecute
问题节点
PreferNoSchedule
优选节点
Pod无法调度
Pod被驱逐

1.2 污点的三种效果详解

NoSchedule:硬性排斥
# 为GPU节点添加污点kubectl taint nodes gpu-node-1hardware=gpu:NoSchedule# 为生产环境节点添加污点kubectl taint nodes prod-node-1environment=production:NoSchedule
PreferNoSchedule:软性排斥
# 为测试节点添加软污点kubectl taint nodes test-node-1environment=test:PreferNoSchedule
NoExecute:驱逐排斥
# 当节点出现问题时,Kubernetes会自动添加NoExecute污点kubectl taint nodes unhealthy-node-1 node.kubernetes.io/unreachable:NoExecute# 手动添加维护污点kubectl taint nodes node-1maintenance=true:NoExecute

1.3 容忍的配置模式

完全容忍模式
# 容忍任意值的特定污点tolerations:-key:"node.kubernetes.io/unreachable"operator:"Exists"# 只要存在该键就容忍effect:"NoExecute"tolerationSeconds:6000# 6000秒后才驱逐
精确容忍模式
# 只容忍特定值的污点tolerations:-key:"hardware"operator:"Equal"# 必须等于指定值value:"gpu"effect:"NoSchedule"
多污点容忍模式
# 容忍多个污点tolerations:-key:"environment"operator:"Equal"value:"production"effect:"NoSchedule"-key:"dedicated"operator:"Exists"effect:"NoSchedule"-key:"node.kubernetes.io/not-ready"operator:"Exists"effect:"NoExecute"tolerationSeconds:300# 5分钟后驱逐

1.4 实战:构建多环境集群

集群节点规划
# 生产节点kubectl taint nodes prod-node-{1..3}environment=production:NoSchedule kubectl label nodes prod-node-{1..3}environment=productiontier=frontend# 预发节点kubectl taint nodes staging-node-{1..2}environment=staging:PreferNoSchedule kubectl label nodes staging-node-{1..2}environment=staging# GPU节点kubectl taint nodes gpu-node-{1..2}hardware=gpu:NoSchedule kubectl label nodes gpu-node-{1..2}hardware=gpuaccelerator=nvidia-tesla-v100# 测试节点kubectl label nodes test-node-{1..3}environment=test
应用容忍配置
# 生产环境应用apiVersion:apps/v1kind:Deploymentmetadata:name:production-appspec:template:s
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 15:40:52

从零玩转RT-Thread(20):为什么需要定时器?——定时器的应用场景

在很多时候,系统中需要周期性地做某些事情,或者推迟执行某件事,此时可以借助定时器来实现这些功能。 什么是定时器? RT-Thread中的定时器是一个“非阻塞式”的延迟或周期执行工具,它不依赖任务执行,而是在…

作者头像 李华
网站建设 2026/7/28 2:47:53

eino框架结构化输出解析:从混乱文本到精准数据的魔法转换

eino框架结构化输出解析:从混乱文本到精准数据的魔法转换 【免费下载链接】eino Go 语言编写的终极大型语言模型(LLM)应用开发框架,强调简洁性、可扩展性、可靠性与有效性。 项目地址: https://gitcode.com/CloudWeGo/eino …

作者头像 李华
网站建设 2026/7/24 15:13:55

小爱音箱终极音乐解放方案:XiaoMusic完整使用指南

小爱音箱终极音乐解放方案:XiaoMusic完整使用指南 【免费下载链接】xiaomusic 使用小爱同学播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 想要彻底摆脱音乐平台限制,让小爱音箱真正…

作者头像 李华
网站建设 2026/7/28 11:53:54

从零打造专业级Vue滑块控件:vue-slider-component深度实践指南

从零打造专业级Vue滑块控件:vue-slider-component深度实践指南 【免费下载链接】vue-slider-component 🌡 A highly customized slider component 项目地址: https://gitcode.com/gh_mirrors/vu/vue-slider-component 在现代化Web应用开发中&…

作者头像 李华
网站建设 2026/7/28 10:10:35

AnuPpuccin主题深度体验:5个技巧让你的Obsidian笔记焕然一新

AnuPpuccin主题深度体验:5个技巧让你的Obsidian笔记焕然一新 【免费下载链接】AnuPpuccin Personal theme for Obsidian 项目地址: https://gitcode.com/gh_mirrors/an/AnuPpuccin 还在为Obsidian单调的界面而苦恼吗?AnuPpuccin主题为你带来全新的…

作者头像 李华
网站建设 2026/7/28 12:14:29

AI一键搞定!Linux安装JDK17的最佳实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个完整的Shell脚本,用于在Linux系统上自动安装JDK17。要求包含以下功能:1) 检测当前系统架构(x86/ARM)并下载对应版本的JDK17;2) 自动解…

作者头像 李华