码迷,mamicode.com
首页 > 其他好文 > 详细

Taint & toleration

时间:2020-10-18 10:09:48      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:val   http   lang   匹配   作用   限制   项目   bash   board   

Taint&Toleration

Taint(污点)和 Toleration(容忍)可以作用于 node 和 pod 上,其目的是优化 pod 在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有 taint 的 node 和 pod 是互斥关系,而具有节点亲和性关系的 node 和 pod 是相吸的。另外还有可以给 node 节点设置 label,通过给 pod 设置 nodeSelector 将 pod 调度到具有匹配标签的节点上。

Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有相应 taint 的节点上。

设置与删除Taint

Taints包含一个key、value和effect。

格式

<key>=<value>:<effect>Copy to clipboardErrorCopied

为Node设置taint

[root@kubernetes-master-01 ~]# kubectl taint node kubernetes-master-01 key=value:NoSchedule
node/kubernetes-master-01 taintedCopy to clipboardErrorCopied

执行这个命令后,除非Pod具有相应的toleration,否则不会被调度到kubernetes-master-01上。

删除taint

[root@kubernetes-master-01 ~]# kubectl taint node kubernetes-master-01 key:NoSchedule-
node/kubernetes-master-01 untaintedCopy to clipboardErrorCopied

taint支持的effect

  • NoSchedule:表示不能容忍taint的Pod不会被调度到这个节点,属于刚性的限制
  • PreferNoSchedule:如果集群中没有其他更合适的Node,则会调度到这个节点
  • NoExcute 上两条只是影响调度,这条还会对正在运行的Pod产生影响,如果在节点上增加一条 taint,那么如果已经运行的Pod没有设置对应的toleration,则会被立即驱逐

在Pod中指定Toleartions

kind: Deployment
apiVersion: apps/v1
metadata:
  name: mytaint
spec:
  selector:
    matchLabels:
      app: mytaint
  template:
    metadata:
      labels:
        app: mytaint
    spec:
      containers:
        - name: nginx
          image: nginx
      tolerations:
        - key: "key"
          operator: "Equal"
          value: "value"
          effect: "NoSchedule"Copy to clipboardErrorCopied

当key为空operator为Exists,这种情况将匹配所有的keys、values和effects,即对所有的瑕疵都无法忍受;当effect为空,匹配所有key的瑕疵。

可以向单个Pod和Node增加多个tolerations和taints,Kubernetes采用类似过滤器的方式进行处理,首先遍历Node上的Taints,并与Pod的tolerations做匹配,如果有匹配的项目则忽略,最后根据剩下为匹配到的taints做判断:

  • 如果至少有一个未匹配到的taints的效果是NoSchedule,则Pod不会被调度到Node上
  • 如果仅有一个未匹配到的taints的效果是PreferNoSchedule,则尽量不向这个Node调度
  • 如果至少有一个未匹配到的taints的效果是NoExecute,则Pod不会被调度到Node上,已经在Node上运行的Pod会被驱逐。通常,一个NoExcute添加到节点后,不能容忍的Pod会被立即驱逐,可以通过tolerationSeconds设置延时驱逐。

Taint & toleration

标签:val   http   lang   匹配   作用   限制   项目   bash   board   

原文地址:https://www.cnblogs.com/tcy1/p/13832503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!