污点和容忍度

污点(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包含三种:

  1. NoSchedule :Kubernetes 不会将 Pod 调度到该节点
  2. PreferNoSchedule:Kubernetes 会将 Pod 尽量不调度调度到该节点
  3. 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 应该相等

说明: 存在两种特殊情况

  1. 如果一个容忍度的 key 为空且 operatorExists, 表示这个容忍度与任意的 key 、valueeffect 都匹配,即这个容忍度能容忍任何污点。
  2. 如果 effect 为空,则可以与所有键名 key1 的效果相匹配。

参考文档

https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/

posted @   jiaxzeng  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示