news 2026/6/9 19:49:57

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/6/9 18:49:54

vmtools在企业虚拟化环境中的5个实战场景

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个演示项目,展示vmtools在以下场景的应用:1) 自动扩展虚拟机磁盘空间 2) 跨主机迁移虚拟机 3) 批量更新虚拟机工具 4) 监控虚拟机性能指标 5) 自动化备…

作者头像 李华
网站建设 2026/6/6 7:04:58

Zotero行高设置:三招解决阅读体验优化难题

Zotero行高设置:三招解决阅读体验优化难题 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes 你是否曾经在Zotero-Better-Notes中阅读长篇笔记时感…

作者头像 李华
网站建设 2026/6/9 20:03:37

终极指南:Mirai Console Loader配置全攻略

终极指南:Mirai Console Loader配置全攻略 【免费下载链接】mirai-console-loader 模块化、轻量级且支持完全自定义的 mirai 加载器。 项目地址: https://gitcode.com/gh_mirrors/mi/mirai-console-loader Mirai Console Loader(简称MCL&#xff…

作者头像 李华
网站建设 2026/6/8 12:28:20

5个kubectl exec -it在生产环境的实用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个Kubernetes故障排查沙盒环境,包含5个预设的问题场景:1) Pod启动失败 2) 服务不可用 3) 配置文件错误 4) 资源不足 5) 网络连接问题。每个场景提供使…

作者头像 李华
网站建设 2026/6/9 21:01:39

Kazumi跨设备观影同步:5步实现无缝追番体验

Kazumi跨设备观影同步:5步实现无缝追番体验 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi 还在为不同设备间追番进度不统一而烦恼吗&…

作者头像 李华
网站建设 2026/6/9 21:16:24

智能家居视频集成终极方案:为什么Scrypted能成为你的首选?

智能家居视频集成终极方案:为什么Scrypted能成为你的首选? 【免费下载链接】scrypted Scrypted is a high performance home video integration and automation platform 项目地址: https://gitcode.com/gh_mirrors/sc/scrypted 在智能家居技术快…

作者头像 李华