1. 理解Kubernetes污点与容忍度的核心概念
在Kubernetes集群中,调度器需要决定将Pod分配到哪个节点上运行。节点亲和性(Node Affinity)是一种让Pod被吸引到特定节点的方式,而污点(Taint)和容忍度(Toleration)则提供了相反的功能——它们允许节点排斥某些Pod。
污点是节点级别的属性,它像一个"警告标签"贴在节点上,告诉调度器:"除非Pod明确声明能接受我的这些特性,否则不要把我考虑在内"。而容忍度则是Pod级别的属性,相当于Pod的"适应能力证明",表示这个Pod可以接受带有特定污点的节点。
提示:污点和容忍度共同工作,但方向相反。污点从节点角度设置排斥规则,容忍度从Pod角度声明适应能力。
1.1 污点的组成要素
每个污点由三个部分组成:
- Key:污点的标识符,如"gpu"或"dedicated"
- Value:污点的具体值(可选)
- Effect:污点的影响效果,必须是以下三种之一:
- NoSchedule:禁止调度(硬限制)
- PreferNoSchedule:尽量避免调度(软限制)
- NoExecute:不仅禁止新Pod调度,还会驱逐已有Pod
例如,给节点打上一个污点的命令:
bash复制kubectl taint nodes node1 gpu=true:NoSchedule
这表示只有那些声明了能容忍"gpu=true:NoSchedule"的Pod才能被调度到node1上。
1.2 容忍度的匹配规则
Pod通过spec.tolerations字段声明它的容忍度。一个容忍度要与污点匹配,必须满足:
- 键(key)相同
- 效果(effect)相同
- 当operator为:
- "Exists"时:不需要指定value(容忍任何值的该键污点)
- "Equal"时:value必须相同
示例容忍度配置:
yaml复制tolerations:
- key: "gpu"
operator: "Equal"
value: "true"
effect: "NoSchedule"
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 污点与容忍度的实际操作指南
2.1 管理节点污点
添加污点:
bash复制kubectl taint nodes <node-name> <key>=<value>:<effect>
例如,将node1标记为专用节点:
bash复制kubectl taint nodes node1 dedicated=team-a:NoSchedule
查看污点:
bash复制kubectl describe node <node-name> | grep Taints
删除污点:
在污点说明末尾添加减号(-):
bash复制kubectl taint nodes node1 dedicated=team-a:NoSchedule-
2.2 配置Pod容忍度
在Pod的YAML定义中添加toleratio
