K8S-污点与污点容忍

K8S-污点与污点容忍,第1张

Taints(污点):避免Pod调度到特定的Node上

Tolerations(污点容忍): 允许Pod调度到持有Taints的Node上

应用场景:

• 专用节点:根据业务线将Node分组管理,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配

• 配备特殊硬件:部分Node配有SSD硬盘,GPU,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配

• 基于Taint的驱逐

给node节点添加污点

其中key=value 是设定一个污点标签

其中[effect] 可取值:

• NoSchedule :一定不能被调度

• PreferNoSchedule:尽量不要调度,非必须配置容忍

• NoExecute:不仅不会调度,还会驱逐Node上已有的Pod

在pod.yaml中添加配置(spec下级,和containers段同级)

上述结果说明,污点配置成功,node1和node2都被打上了污点,当前已无合适的node可分配了。

再次创建pod,发现成功分配到了。验证Tolerations

污点 taints 是定义在node节点 上的键值型属性数据,用于让节点拒绝将Pod调度运行于其上,除非Pod有接纳节点污点的容忍度。容忍度 tolerations 是定义在Pod 上的键值属性数据,用于配置可容忍的污点,且调度器将Pod调度至其能容忍该节点污点的节点上或没有污点的节点上 。

对于nodeAffinity无论是硬策略(硬亲和)还是软策略(软亲和)方式,都是调度 pod 到预期节点上,而Taints恰好与之相反,如果一个节点标记为 Taints ,除非 pod 也被标识为可以容忍污点节点,否则该Taints 节点不会被调度 pod。

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

污点定义于 nodes.spec.taints 属性。容忍度定义于 pods.spec.tolerations 属性。

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

语法: key=value:effect

NoSchedule ,不能容忍,但仅影响调度过程,已调度上去的pod不受影响,仅对新增加的pod生效。

解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上 。 PreferNoSchedule ,柔性约束,节点现存Pod不受影响,如果实在是没有符合的节点,也可以调度上来。 解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上 。 NoExecute ,不能容忍,当污点变动时,Pod对象会被驱逐。

解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的Pod 驱逐出去

本案例用于演示创建、删除污点及驱逐pod的过程。

污点语法

deploymentdemo控制器

产生10个副本

设置污点

全部资源文件清档

本案例用于演示创建、删除及驱逐pod的过程。

设置污点

deploymentdemo控制器

产生10个副本

查看部署情况

设置pod容忍度

完整控制器清单

部署控制器

k8s集群可以通过设置节点污点和pod容忍度来避免或者指定pod调度到目标节点。

给节点设置污点

其中value值可以省略,effect有三个值可以选,分别是NoSchedule,NoExecute,PreSchedule。

去点污点

NoSchedule表示新的pod将不会调度到该节点,NoExecute表示新的pod将不会调度到该节点,已经在该节点上运行的pod将会被驱逐。PreSchedule表示尽量不会将新的pod调度到该节点。

如果希望将某些pod调度到设置有污点的节点上,则需要在pod的Spec中设置容忍度。例子如下:

operator的值默认为Equal

Equal表示value的值需要和taint设置的value值相等。

Exists表示可以不指定具体的value。

当pod的容忍度和节点的污点相匹配的时候,pod调度的时候便会忽略节点的污点。

注意:

如果只设置了Exists,则表示该Pod会匹配任意的key,value,effect,会容忍任意的taint。

如果effect为空,则可以与所有键名为key的污点相匹配。

当effect为NoExecute时,可以设置tolerationSeconds,如下所示

这个值表示已经在该节点上运行的pod的不会被立刻驱逐,还可以运行3600秒。 如果在此之前上述污点被删除了,则 pod 不会被驱逐。

通过结合taint和tolerations可以灵活的避免将某些pod调度到特殊的节点。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11796277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存