污点和容忍度
污点(Taint)使节点能够排斥一类特定的 Pod
容忍度(Toleration)是应用于 Pod
上的。容忍度允许调度器调度带有对应污点的 Pod。 容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。
污点(Taint)和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。
- 查看节点是否有污点
$ kubectl describe nodes 192.168.31.96 | awk '/Taints/,/Unschedulable/ {print $0}'
Taints: <none>
Unschedulable: false
- 可以使用命令 kubectl taint 给节点增加一个污点
$ kubectl taint node 192.168.31.96 node=monitor:PreferNoSchedule
node/192.168.31.96 tainted
命令说明:
- kubectl taint node 节点名称 KEY=VALUE:effect
effect包含三种:
NoSchedule
:Kubernetes 不会将Pod
调度到该节点PreferNoSchedule
:Kubernetes 会将Pod
尽量不调度调度到该节点NoExecute
:Kubernetes不会将Pod
调度到该节点且该节点pod
驱逐走
说明:
- 应用添加了污点容忍,并非一定会调度到对应的有该污点的节点上。还需
kube-scheduler
进行打分、过滤来选择最优节点运行
- 给应用添加容忍
在 deployment.spec.template.spec 添加以下字段
tolerations:
- key: node
operator: Equal
value: monitor
effect: PreferNoSchedule
operator 的默认值是 Equal。
一个容忍度和一个污点相“匹配”是指它们有一样的键名和效果,并且:
- 如果 operator 是 Exists (此时容忍度不能指定 value)
- 如果 operator 是 Equal ,则它们的 value 应该相等
说明: 存在两种特殊情况
- 如果一个容忍度的
key
为空且operator
为Exists,
表示这个容忍度与任意的key
、value
和effect
都匹配,即这个容忍度能容忍任何污点。- 如果
effect
为空,则可以与所有键名key1
的效果相匹配。
参考文档
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了