k8s-部署到master节点【污点(Taint) 与 容忍度(Toleration)】总结

污点(Taint)使节点能排斥特定Pod,容忍度(Toleration)允许Pod被调度到有对应污点的节点。通过两者配合,可以避免Pod被错误调度到Master或其他不合适节点。默认Master节点有NoSchedule污点,可通过修改污点配置或在Pod定义中添加容忍度来部署Pod。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s-部署到master节点【污点(Taint) 与 容忍度(Toleration)】总结

污点与容忍度

污点(Taint) 使节点能够排斥一类特定的 Pod。作用于node

容忍度(Toleration) 是应用于 Pod 上的。容忍度允许调度器调度带有对应污点的 Pod。
容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。

污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。

污点(Taint)配置

污点主要是配置在节点 node

查看节点污点情况    
kubectl describe nodes node2 | grep Taint
kubectl describe nodes 【节点名】 | grep Taint

在这里插入图片描述

污点效果:

  • PreferNoSchedule :kubernetes 将尽量避免把 Pod 调度到具有该污点的 Node 上,除非没有其他节点可调度
  • NoSchedule :kubernetes 将不会把 Pod 调度到具有该污点的 Node 上,但不会影响当前 Node上已存在的Pod
  • NoExecute :kubernetes 将不会把Pod 调度到具有该污点的 Node 上,同时也会将 Node 上已存在的Pod驱离

注意 k8s master节点默认污点效果是NoSchedule

node-role.kubernetes.io/master:NoSchedule

给节点配置污点命令如下

kubectl taint nodes 【节点名称】 【自定义key】=【自定义值】:【污点效果:PreferNoSchedule | NoSchedule | NoExecute】
注意:【自定义值】不是必填的
kubectl taint nodes node1 mykey=myvalue:NoSchedule
kubectl taint nodes node1 mykey=:NoSchedule  (可以不配置values)

删除点配置的污点命令如下

kubectl taint nodes 【节点名称】 【自定义key】=【自定义值】:【污点效果:PreferNoSchedule | NoSchedule | NoExecute】-  注意减号
kubectl taint nodes node1 mykey=myvalue:NoSchedule-

以污点效果NoExecute为例子,给节点node2添加一个NoExecute效果的污点,节点2部署的Pod会被驱离

kubectl taint nodes node2 mytaintkey=mytaintvalue:NoExecute
给node2配置污点
1 key为mytaintkey
2 值为mytaintvalue
3 污点效果为NoExecute

在这里插入图片描述

使用-号(减号)去掉污点

kubectl taint nodes node2 mytaintkey=mytaintvalue:NoExecute-

在这里插入图片描述

重新部署node2可以使用

在这里插入图片描述

容忍度(Toleration)

例如当前节点 node2的污点配置为mykey=myvalue:NoExecute

在这里插入图片描述

可以给Pod配置toleration 来容忍污点

tolerations:
    #指定对应的key 与node污点配置中的key一致
	- key: "key1" 
	  #运算符 Equal 或 Exists  
	  operator: "Equal" 
	  #指定对应的value 与node污点配置中的value一致 (注意如果有value就需要指定操作符为operator: Equal)
	  #value可以不配置
	  value: "value1" 
	  effect: "NoSchedule" #指定对应的效果 与node污点配置中的效果一致

operator: 配置可以选择Equal 或 Exists

  • Exists 表示存在key即可
  • Equal表示key 和 value要与node配置的一致
    在这里插入图片描述

重新部署Pod
在这里插入图片描述

总结:
要在有污点的节点上部署Pod ,Pod的部署文件中需要配置tolerations

部署到master节点

出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点,

master节点默认是配置了污点的
node-role.kubernetes.io/master:NoSchedule

如果要把Pod 部署到 master节点有两种方案

  • 1 去掉master的污点配置
  • 2 给Pod添加污点容忍

去掉master的污点配置

kubectl taint node note4 node-role.kubernetes.io/master:NoSchedule-
注意note4是master节点 

在这里插入图片描述

Pod yaml 中使用nodeSelector 选择master节点的label

spec:
	  nodeSelector: #选择使用master节点
	    node-role.kubernetes.io/master: ""
      containers:
       - name: my-quarkus-demo-runtime
         image: registry.cn-hangzhou.aliyuncs.com/jimliu/my-quarkus-demo:latest	

重新部署后
在这里插入图片描述

给Pod添加污点容忍

直接去掉master的污点配置,可能会导致各种Pod都会被部署到master节点上
真实的场景是,只有部分Pod想部署到master上

Pod yaml 中使用tolerations 配置与master一致的key和污点效果

spec:
  nodeSelector:
    node-role.kubernetes.io/master: ""
  tolerations:      
    - key: "node-role.kubernetes.io/master"
      operator: "Exists"
      effect: "NoSchedule"  

在这里插入图片描述

重新部署后到master节点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值