kubernetes Taint 、Toleration污点、容忍

定义

  • Affinity 节点亲和性,是 pod 的一种属性(偏好或硬件要求),它使 pod 被吸引到一类特定的节点。
    Taint 污点 则相反,它使节点能够排斥一类特定的 Pod。
  • Taint 和 Toleration 相互配合,可以用来避免 Pod 被分配到不合适的节点上。
  • 每个节点上都可以应用一个或者多个 Taint,表示对于那些不能容忍这些 Taint 的 Pod,不会被接受的。
  • 如果将 Toleration 应用于 Pod 上,这表示这些 Pod 可以被调度到具有匹配 Taint 的节点上


污点 (Taint)

当我们的 Pod 需要热更新,进行维护,但不终止服务的时候可以为节点打一个污点,

这样保证当前节点无 Pod 运行,但该节点的 Pod 会在其他节点运行。

Ⅰ、污点 (Taint) 的组成

使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去

每个污点的组成如下:

key=value:effect

每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。


当前 taint effect 支持如下三个选项:

  • NoSchedule:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
  • PreferNoSchedule:表示 K8S 将尽量避免将 Pod 调度到具有该污点的 Node 上
  • NoExecute:表示K8S 不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去。


Ⅱ、污点的设置,查看,删除

1.设置污点

格式:kubectl taint nodes node1 key=value:Noschedule

举例:kubectl taint nodes k8s-node1 check=shm:NoExecute

2.查看污点 Taints 字段

格式kubectl describe pod pod-name

举例kubectl describe nodes k8s-master | grep Taints

kubectl describe nodes k8s-node1 | grep Taints

3.删除污点

格式kubectl taint nodes node1 key:NoSchedule-

举例kubectl taint nodes k8s-node1 check=shm:NoExecute-


容忍 (Tolerations)

设置了污点的 Node 将根据 Taint 的 effect: NoSchedul、PreferNoSchedule、NoExecute 和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。

但我们可以在 Pod 上设置容忍 (Toleration),意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。


Tolerations 案例:

kubectl taint nodes k8s-node2 check=shm:NoExecute

kubectl taint nodes k8s-node1 check=shm:NoExecute

tolerations:
  - key: "key1"			
    operator: "Equal"		#运算算法
    value: "value1"			
    effect: "NoSchedule"	#污点策略
    tolerationSeconds: 3600	#容忍期限,时间
  • 其中 key、value、effect 要与 Node 上设置的 taint 保持一致
  • operator 的值为 Exists 将会忽略 value 的值
  • tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Pod 上继续保留运行的时间,驱离前保留时间
apiVersion: v1
kind: Pod
metadata:
  name: affinity
  labels:
    app: node-affinity-pod
spec:
 containers:
   - name: nginx
     image: nginx:1.9.1

 tolerations:
  - key: "check"
    operator: "Equal"           #运算算法
    value: "shm"
    effect: "NoExecute"        #污点策略
    tolerationSeconds: 3600     #容忍期限,时间

设置了容忍的 Pod 将可以容忍污点的存在,依旧可以执行到达 Running 状态


多个 Master 存在时,防止资源浪费,可以如下设置

当 Node 节点不够用时可以在 Master 节点上运行 Pod

kubectl taint nodes Node-Name  node-role.kubernetes.io/master=:PreferNoSchedule
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值