20250720-6-Kubernetes 调度-nodeName字段,DaemonS_笔记

一、污点与容忍

1. 给节点添加污点

1)命令格式

  • 基本语法:kubectl taint node [node] key=value:[effect]
  • 示例:kubectl taint node k8s-node1 gpu=yes:NoSchedule
  • 操作说明:与打标签命令类似,将"label"替换为"taint"即可
2)value键值配置



  • 键值规范:污点以键值对形式配置,如gpu=nvidia
  • 实际应用:通常用于标记特殊节点,如GPU节点可标记为gpu=nvidia
3)effect动作



  • NoSchedule:Pod一定不会被调度到该节点(最常用)
  • PreferNoSchedule:尽量不调度,非必须配置容忍
  • NoExecute:不仅不调度,还会驱逐节点上已有Pod
4)污点效果



  • 强制隔离:当节点设置NoSchedule后,未配置容忍的Pod绝对不会被调度到该节点
  • master节点:K8s默认给master节点打上node-role.kubernetes.io/master:NoSchedule污点
5)资源不够的情况



  • 资源不足表现:即使集群资源不足,未配置容忍的Pod也不会被调度到有污点的节点
  • 实际现象:Pod会保持Pending状态,如示例中的pod2和pod5
6)配置污点容忍



  • 配置位置:在Pod的spec中添加tolerations字段
  • 关键字段:
    • key:需要匹配的污点键名
    • operator:匹配操作符(Equal/Exists)
    • value:需要匹配的污点值
    • effect:需要匹配的污点效果
7)查看污点
  • 查看命令:kubectl describe node [node] | grep Taint
  • 输出示例:
8)创建尝试分配
  • 实验现象:当所有节点都有污点且Pod未配置容忍时,Pod会保持Pending状态
  • 错误提示:0/3 nodes available: 1 node(s) had taint {...}, that the pod didn't tolerate
9)配置污点容忍并分配
  • 正确配置:必须确保tolerations中的key、value、effect与节点污点完全匹配
  • 验证方法:通过kubectl get pods -o wide查看Pod最终调度到的节点
2. 污点容忍
  • operator类型:
    • Equal:要求value严格匹配(最常用)
    • Exists:只需key存在即可,不检查value
  • 特殊值处理:
    • 空key+Exists:匹配所有污点
    • 空effect:匹配所有effect效果
3. 相关知识点
  • 删除污点:kubectl taint node [node] key:[effect]-
  • 实用技巧:可通过K8s官方文档搜索"tolerations"获取配置示例模板
  • 常见错误:value拼写错误会导致容忍失效(如将"nvidia"误写为"nvdia")
二、pod的配置问题
  • nodeSelector使用:通过disktype: "ssd"标签选择特定节点,但不会100%保证调度到目标节点
  • 污点容忍特性:配置容忍后仅表示可以调度到带污点的节点,并非强制调度
  • 调度可能性:当存在普通节点时,Pod仍可能调度到其他非目标节点
三、大师节点配置容忍性泡的示例
1. 污点与污点容忍的概念
  • Taints作用:避免Pod调度到特定Node,保障master节点安全性和专注性
  • Tolerations作用:允许Pod调度到持有Taints的Node,但不是强制调度
  • 应用场景:
    • 专用节点分组管理
    • 特殊硬件节点(SSD/GPU)
    • 基于Taint的驱逐
2. 污点容忍的配置方法
  • 基本配置:
  • effect取值:
    • NoSchedule:不调度
    • NoExecute:不执行
    • PreferNoSchedule:尽量不调度
3. 污点容忍的省略情况
  • value省略:可以只保留key不指定value,如master节点的node-role.kubernetes.io/master
  • key省略:通过operator: Exists可容忍所有带指定effect的污点
  • 范围影响:省略value/key会扩大容忍范围,适配更多环境
4. 静态泡与污点容忍的关系
  • 静态Pod特性:不受调度器管理,由kubelet直接管理
  • master节点运行:k8s组件采用静态Pod方式启动,不受污点限制
  • 两种例外情况:
    • 静态Pod(如etcd/kube-apiserver)
    • 配置了污点容忍的Pod(如calico)
5. 配置污点容忍的示例

  • 全节点部署需求:为保证集群通信,calico需要在所有节点运行
  • 通用容忍配置:
  • 设计目的:适配不同k8s环境,确保网络组件必运行
6. 污点容忍的范围与实际应用
  • 范围控制:
    • 指定key+value:精确匹配特定污点
    • 仅指定effect:容忍所有带该effect的污点
    • 使用Exists操作符:不校验key/value,仅看effect
  • 实际建议:生产环境应明确指定key/value,避免过度容忍
四、部署配置容忍泡的示例
  • 验证方法:创建5副本Deployment测试全节点调度
  • 配置要点:
  • 预期结果:Pod可调度到所有带NoSchedule污点的节点
  • 与静态Pod区别:非静态Pod必须显式配置容忍才能在污点节点运行
五、查看分布情况
1. Pod调度情况
  • Pending状态分析:多个Pod处于Pending状态,原因是节点存在污点{gpu:nvidia2}和{gpu:nvidia},而Pod未配置相应容忍
  • 节点污点检查:通过kubectl describe node可查看节点污点信息,显示master节点有NoSchedule污点
  • 运行状态示例:
    • nginx-6799fc88d8-zqcrh:1/1 Running
    • pod2:0/1 Pending 74m
    • web-54c699bb5c-*系列:多个处于ContainerCreating状态
2. Pod扩容尝试
  • 扩容策略:从5个副本扩容到10个副本进行测试
  • 调度效果:部分Pod仍无法调度,显示"1 node(s) had taint {gpu:nvidia2}"等错误
  • 关键现象:5个副本时未分配成功,扩容后部分Pod开始运行在node1和node2节点
3. 污点容忍配置
  • 基础容忍配置:
  • 特殊容忍配置:
    • CriticalAddonsOnly:关键组件专用容忍
    • NoExecute:用于驱逐场景的容忍
  • 配置原则:
    • 不指定key时容忍所有NoSchedule污点
    • 需要精确匹配时应指定key/value对
4. Pod分布验证
  • 成功调度案例:
    • web-54c699bb5c-9w81z:运行在k8s-node1(10.244.36.71)
    • web-54c699bb5c-htdgn:运行在k8s-node1(10.244.36.73)
  • 节点分布规律:Pod均匀分布在node1和node2节点,master节点未参与调度
5. 污点去除操作
  • 去除命令:kubectl taint node <node-name> <taint-key>-
  • 关键操作:去除master节点的NoSchedule污点后,Pod可调度到master节点
  • 验证方法:通过kubectl describe node | grep Taint确认污点已去除
6. 污点与容忍总结
  • 精确匹配配置:
  • 实践经验:
    • 明确指定key/value的配置更可靠
    • calico等系统组件使用Exists操作符容忍所有污点
    • 生产环境建议为关键组件配置专用容忍
  • 常见问题:
    • 效果(effect)必须匹配:NoSchedule/NoExecute
    • master节点默认有NoSchedule污点
    • 多个污点需要分别配置容忍
六、配置容忍并查看分布情况
1. Pod容忍配置
  • 配置方法:在Pod的spec中通过tolerations字段配置容忍,允许Pod被调度到带有特定污点的节点上
  • 关键参数:
    • key:污点的键名
    • operator:比较运算符(Equal/Exists)
    • value:污点的值(当operator为Equal时需指定)
    • effect:污点效果(NoSchedule/PreferNoSchedule/NoExecute)
2. 节点直接指定
  • nodeName使用:通过spec.nodeName字段可直接指定Pod运行的节点,绕过调度器
  • 应用场景:适用于需要精确控制Pod运行位置的场景
  • 注意事项:直接指定节点会失去调度器的自动容错和负载均衡能力
七、k配置问题
1. 配置必要性分析
  • 配置争议:在容忍配置中,key参数是否必须存在存在不同理解
  • 实践经验:
    • 通常建议明确指定key值(如"gpu")
    • 但实际使用中发现并非绝对必要
  • 待研究点:需要进一步研究key参数在不同场景下的深层含义和最佳实践
八、nodeName
1. nodeName意义

  • 强制调度机制:通过nodeName字段可直接指定Pod运行的目标节点,完全绕过kube-scheduler调度器
  • 特殊应用场景:主要用于测试环境,当需要精确控制Pod部署位置时使用
  • 与调度器关系:不参与调度器的节点筛选流程,直接跳过所有调度策略(如节点亲和性、污点容忍等)
2. 应用案例
  • 配置方法:
  • 实际效果验证:
    • 案例中创建pod7并指定到k8s-node1后,Pod立即进入Running状态(00:44:37验证)
    • 对比普通Pending状态的Pod(如pod2/pod5),证明nodeName确实绕过调度器限制
  • 使用注意事项:
    • 生产环境慎用:可能导致Pod无法调度(当目标节点不可用时)
    • 测试环境优势:比nodeSelector更快速直接,无需预先配置节点标签
    • 典型测试场景:验证特定节点上的硬件/软件兼容性时使用
  • 与常规调度区别:
    • 常规调度:经过节点筛选(nodeSelector/nodeAffinity)→ 打分 → 绑定流程
    • nodeName调度:直接绑定指定节点,相当于"走后门"机制(00:45:17讲解)
九、DaemonSet
1. DaemonSet功能
  • 节点全覆盖:确保在集群每个节点(包括新加入节点)上都运行一个Pod副本
  • 自动扩展:新节点加入集群时会自动创建Pod,无需人工干预
  • 运维特性:适用于需要以守护进程方式在每个节点运行的场景
2. DaemonSet应用场景
  • 网络插件:如Calico网络组件,需要在所有节点部署网络代理
  • 监控Agent:采集节点级监控指标(如CPU/内存使用率)
  • 日志Agent:收集节点上所有Pod的日志(如Filebeat)
  • 运维工具:主要用于基础设施层而非业务应用层
3. DaemonSet示例
  • 与Deployment区别:
    • 不需要设置replicas副本数
    • 不支持strategy更新策略字段
    • 资源类型需改为DaemonSet
  • 污点处理:
    • 默认不调度到有污点的节点
    • 可通过tolerations配置容忍特定污点
    • 实验时建议先删除节点污点:kubectl taint node <node-name> <taint-key>-
4. 部署日志采集程序
  • YAML关键配置:
  • 部署验证:
    • 使用kubectl get pods -o wide查看Pod分布
    • 通过kubectl describe ds <name>检查调度状态
    • 节点增加时会自动创建新Pod(约30秒内完成)
十、调度失败原因分析
  • 查看方法:
    • 查看调度结果:kubectl get pod <NAME> -o wide
    • 查看失败原因:kubectl describe pod <NAME>
  • 常见原因:
    • 资源不足:节点CPU/内存无法满足pod的request配置
    • 污点问题:节点配置了污点但pod没有相应容忍
    • 标签不匹配:节点没有pod要求的标签
    • 磁盘不足:虽然少见但也会导致调度失败(需注意错误信息)
十一、DaemonSet控制器
1. DaemonSet控制器概述
  • 工作特点:自动在符合条件的节点上创建pod
  • 验证案例:删除节点污点后,DaemonSet会自动拉起pod
2. DaemonSet创建问题
  • 命令行限制:不支持kubectl create直接创建
  • 替代方案:通常使用YAML文件进行部署
3. DaemonSet不常用原因
  • 使用场景:主要用于节点级守护进程,不是常规工作负载
4. node selector与污点区别
  • 功能差异:
    • node selector:节点必须具有指定标签
    • 污点:节点排斥非特定pod
  • 优先级关系:两者功能不同,不存在优先级比较
  • 调度disable:使节点完全不调度新pod,不同于污点的选择性排斥
5. toleration与taint匹配
  • 特殊配置:
    • 当toleration的key为空且operator为"Exists"时
    • 表示能容忍任意taint(除非指定了effect限制)
6. dry-run选项区别
  • client模式:仅在客户端验证配置
  • server模式:提交到API server进行验证
  • 应用场景:测试资源配置时使用不同验证级别
十二、答疑
1. 权重的作用与理解
  • 调度加分机制:权重相当于调度系统中的加分值,类似于比赛评委的特殊加分权限
  • 实际应用场景:以中国好声音为例,特定评委可通过加分提高选手获胜概率
  • 技术实现原理:在Kubernetes调度器打分环节会计算该值,影响节点分配优先级
  • 学习建议:初学者只需理解其加分功能,深入理解需研究整个调度打分流程
2. 关于fact分配到master的疑问
  • 现象描述:测试发现pod无法分配到master节点,与预期行为不符
  • 排查过程:讲师重现测试环境,创建10个pod均未分配到master
  • 可能原因:环境配置存在隐藏影响因素,需进一步验证
  • 临时结论:初步排除理解错误,转向环境因素排查
3. 验证测试环境是否影响分配
  • 配置验证:确认使用了正确的effect和operator配置组合
  • 测试建议:建议学员尝试相同配置验证分配行为
  • 最新发现:经过反复测试后确认配置理论上应生效
  • 环境变量:强调环境差异可能导致不同表现,需实际验证
4. 数字与优先级的关系
  • 数值规律:数字越大表示优先级越高,对应调度分数越高
  • 评分类比:类似评委打分(1-100分范围),高分增加胜出概率
  • 权重机制:高权重值会显著提升节点被选中的可能性
  • 使用建议:合理设置权重值范围,避免极端数值影响调度平衡
5. 练习与验证
  • 练习内容:
    • 验证master节点分配问题
    • 测试不同权重值对调度的影响
    • 尝试各种tolerations配置组合
  • 验证方法:通过kubectl create命令部署测试用例
  • 注意事项:记录完整测试过程,注意环境差异因素
  • 交流机制:鼓励学员在群内分享验证结果和异常情况
十三、知识小结

知识点

核心内容

关键配置/参数

典型应用场景

污点(Taint)

节点排斥机制,阻止Pod默认调度

kubectl taint nodes <node-name> key=value:NoSchedule

Master节点保护、专用节点隔离

污点容忍(Toleration)

允许Pod调度到带污点的节点

tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoSchedule"

系统组件部署(如Calico)、特殊硬件利用

NodeSelector

基础节点选择器

nodeSelector: disktype: ssd

简单环境区分

NodeAffinity

高级节点亲和性规则

preferredDuringSchedulingIgnoredDuringExecution/requiredDuringSchedulingIgnoredDuringExecution

复杂调度策略

DaemonSet

每个节点运行一个Pod的控制器

无replicas字段,自动识别集群节点数

网络插件、监控代理、日志收集器

调度失败分析

常见原因排查

1. 资源不足

2. 污点未容忍

3. 标签不匹配

集群运维排错

Master节点调度

默认带node-role.kubernetes.io/master:NoSchedule污点

需配置容忍或静态Pod方式运行

Kubernetes控制平面组件部署

NodeName直配

绕过调度器直接指定节点

spec.nodeName: node1

测试环境专用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89834.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…

研发知识系统选型实战:从 Notion 到 Gitee Wiki 的迭代经验

关键词&#xff1a;知识管理、版本控制、协作编辑、国产平台、研发效能 在日常研发管理中&#xff0c;知识管理平台往往被视为“非核心工具”&#xff0c;但它的好坏直接影响着团队交接效率、文档可用性以及协作深度。过去几年&#xff0c;我们团队先后使用过 Notion、Confluen…

从一开始的网络攻防(三):sqlmap快速上手

一、确定目标 使用sqlmap的第一步是确定探测的目标&#xff0c;一般有四种&#xff1a; 数据库URL文件Google批量扫 环境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql&#xff1a; docker pull的最新mysql sqlmap github&#xff1a;https://g…

《Anaconda 精简路径治理》系列 · 番外篇Conda 虚拟环境路径结构方案全解——六种路径布局对比、优劣与治理建议

Python 多版本环境治理理念驱动的系统架构设计&#xff1a;三维治理、四级隔离、五项自治 原则-CSDN博客 Anaconda 路径精简后暴露 python 及工具到环境变量的配置记录-CSDN博客 【终极实战】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具协同 AnacondaPyCharm&#xff1a;构建…

容器基础知识3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet&#xff0c;kube-proxy的概念和关系一、kubeadm&#xff1a;K8s 集群的 “搭建工程师”核心定位如果把 K8s 集群比作一栋大楼&#xff0c;kubeadm 就是负责 “打地基、搭框架” 的工程师&#xff0c;专门用来快速搭建 K8s 集群的工具。具体工作内容…

langchain调用本地ollama语言模型和嵌入模型

参考&#xff1a;ollama兼容OpenAIEmbeddings的解决思路 解决代码&#xff1a; 访问embedding模型代码 # 测试以下两个引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文档&#xff0c;详细描述了从下载镜像、启动镜像、修改external_url以及设置或重置root密码的步骤。 GitLab 安装与配置指南 本文档将指导您完成GitLab的安装和基本配置过程&#xff0c;包括下载镜像、启动容器、修改外部访问URL(external_url)及设…

CCLink IE转ModbusTCP网关配置无纸记录器(上篇)

本研究案例采用CCLink IE转ModbusTCP网关技术&#xff0c;实现了将记录仪数据传输至三菱PLCPLC的过程。具体操作步骤如下所述。在确保无纸记录仪与PT100传感器传感器的连接无误后&#xff0c;应将无纸记录仪与个人计算机&#xff08;PC&#xff09;通过以太网线进行连接&#x…

近期工作感想:职业规划篇

最近整理博客时&#xff0c;撞见意外的惊喜——17年刚毕业那会儿写的职业规划&#xff0c;静静躺在回收站里。 重读那些碎碎念&#xff0c;忍不住想笑&#xff1a;那时候的焦虑太真切了&#xff0c;哪敢想后来会遇到这么多大佬&#xff0c;推着我往前一直阴暗爬行&#x1f602;…

Matlab自学笔记六十四:求解自变量带有约束条件的方程

1.说明 有一些方程由于实际问题的需要&#xff0c;需要设置一些限制约束条件&#xff0c;例如x>0等&#xff0c;若使用Matlab编程求解&#xff0c;首先尝试使用符号运算求解&#xff08;符号运算可参考文章54&#xff1a;Matlab自学笔记五十四&#xff1a;符号数学工具箱和…

Flutter状态管理篇之ChangeNotifier(二)

目录 前言 一、ChangeNotifier定义 1.ChangeNotifier定义 2.Listenable的定义 二、继承体系 三、核心方法解析 1.类结构与属性分析 1.Listenable的定义 2..核心字段 1.属性解析 1._count 2._listeners 3.为什么不用const [] 4._notificationCallStackDep…

大带宽服务器对于高流量网站的作用

随着科学技术的快速发展&#xff0c;越来越多的网站面临着高流量的访问需求&#xff0c;在同一时间中会有着大量的用户进行访问&#xff0c;同时也提高了该企业的知名度&#xff0c;但是这对于服务器的性能需求也在逐渐增高&#xff0c;而大带宽服务器卓越的性能和稳定的传输能…

2025年算法备案发号规律总结与下半年发号预测

上半年发号规律总结图太糊&#xff1f;可看下方表格&#xff08;左划看全表&#xff09;&#x1f447;今年批次算法备案总批次发布时间所发当批算法材料提交时间段审核周期25年第一批第十批2025/3/122025年1月&#xff08;春节前&#xff09;约2个月25年第二批第十一批2025/5/1…

高光谱相机(Hyperspectral Camera)

高光谱相机&#xff08;Hyperspectral Camera&#xff09;高光谱相机&#xff1a;是一种可以采集连续、多达上百个窄波段的光谱信息的成像设备。它的核心特征是&#xff1a;每个像素点都拥有一个完整的光谱曲线&#xff0c;类似于“像素级别的光谱仪”。举例&#xff1a;普通彩…

经典排序算法之归并排序(Merge Sort)

归并算法定义&#xff1a;所谓归并排序是指将两个或两个以上有序的数列&#xff08;或有序表&#xff09;&#xff0c;合并成一个仍然有序的数列&#xff08;或有序表&#xff09;。这样的排序方法经常用于多个有序的数据文件归并成一个有序的数据文件。归并排序相比较之前的排…

Linux系统环境下 Node.js 20 安装实践:glibc 2.17 兼容方案与工具链优化

前言&#xff1a;在 CentOS 7.9 的生产环境中&#xff0c;默认搭载的 glibc 2.17 是系统的核心依赖&#xff0c;直接升级它可能引发稳定性风险。而 Node.js 20 作为较新的运行时&#xff0c;其与 glibc 的兼容性长期困扰着开发者&#xff1a;为什么有些场景下 Node.js 20 能直接…

构建一个简单的Java框架来测量并发执行任务的时间

文章目录一、完整代码二、代码解释1、方法签名2、初始化CountDownLatch3、提交任务到执行器4、任务线程的逻辑5、主线程的逻辑详细解释总结以下代码实现了一个简单的框架&#xff0c;用于测量并发执行任务的时间。它使用了Executor来执行任务&#xff0c;并通过CountDownLatch来…

精通 triton 使用 MLIR 的源码逻辑 - 第001节:triton 的应用简介

项目使用到 MLIR&#xff0c;通过了解 triton 对 MLIR 的使用&#xff0c;体会到 MLIR 在较大项目中的使用方式&#xff0c;汇总一下。1. Triton 概述OpenAI Triton 是一个开源的编程语言和编译器&#xff0c;旨在简化 GPU 高性能计算&#xff08;HPC&#xff09; 的开发&#…

Python爬虫-政务网站自动采集数据框架

前言 本文是该专栏的第81篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将详细介绍一个基于政务网站进行自动采集数据的爬虫框架。对此感兴趣的同学,千万别错过。 废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带框架完整代码…

GitHub 趋势日报 (2025年07月19日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图1054shadPS4695n8n361remote-jobs321maigret257github-mcp-server249open_deep_res…