节点污点 Taint 和容忍度 Toleration在生产中的使用

目录

一、前言

二、节点设置taints

1、设置taint

2、查看taint

3、删除taint

三、配置toleration及测试

1、没配置tiant时,Pod正常调度

 2、配置taint时,不配置容忍度 toleration

 3、配置tolerations

四、总结


一、前言

在生产环境使用中,有时会遇到一些使用场景需求,当集群中存在多种节点类型的情况,如master节点、ssd硬盘类型的node节点,或者是高计算性能的node节点,这个时候,只想某些节点上只运行指定类型的pod,不想让其它pod调度到这些节点上,则可以使用节点污点(Taint)的方式,配合容忍度(Toleration),实现指定节点只运行特定类型的pod服务。

小结如下:

节点污点(Taint):使节点能够排斥特定的 Pod

容忍度(Toleration):应用于 Pod 上,允许Pod 调度到带有与之匹配的污点的节点上。

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


二、节点设置taints

1、设置taint

可以使用命令 kubectl taint 给节点增加一个污点

kubectl taint node [node] key=value[effect]   
     
# [effect] 可取值: 
      NoSchedule: 一定不能被调度
      PreferNoSchedule: 尽量不要调度
      NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

Tips:
当节点维护并驱逐时,节点控制器会在相应的节点添加带有 NoExecute 效应的污点,实现基于污点的驱逐功能,一般来说,用的多的还是NoSchedule和toleration的方式相结合

示例: 设置节点minikube tiant标签,当标签key为master,值为true时,禁止Pod调度到节点上

2、查看taint

kubectl describe node [node] | grep Taints

3、删除taint

# 删除指定effect标签
kubectl taint node [node] key:[effect]-  

# 删除指定key所有effect标签 
kubectl taint node [node] key-  

例: 删除节点taint


三、配置toleration及测试

当节点配置了taint时,如果Pod上没配置对应 tiant 的容忍度配置,Pod将无法调度到节点上

1、没配置tiant时,Pod正常调度

 2、配置taint时,不配置容忍度 toleration

Pod将无法正常调度到节点,处于Pending状态

可以查看Pod事件看到,无节点满足调度条件

 3、配置tolerations

可以看到Pod正常调度到节点

 nginx.yaml增加tolerations字段,文件配置如下

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx-no-toleration
  name: nginx-no-toleration
spec:
  containers:
  - image: nginx
    name: nginx-no-toleration
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  tolerations:
  - key: "master"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"


四、总结

通过污点 taint 和 容忍度 toleration 相结合,可以灵活地实现 Pod 避开某些节点或者将 Pod 从某些节点驱逐。生产环境中比较常用的使用场景是指定专用节点,即节点只给某些指定的服务或用户使用,具体用法如下:

 将某些节点专门分配给特定的服务使用,可以给这些节点添加一个污点( kubectl taint nodes nodename dedicated=AppName:NoSchedule), 然后给对应服务的 Pod 添加一个相对应的 toleration。 拥有上述容忍度的 Pod 就能够被分配到上述专用节点,同时也能够被分配到集群中的其它节点。注意,如果你希望这些 Pod 只能被分配到上述专用节点,那么可以给这些专用节点添加一个和污点类似的 label (例如:dedicated=AppName),同时,在 Pod 配置中增加节点亲和性要求或使用节点选择 NodeSelector ,实现上述 Pod 只能被分配到添加了 dedicated=AppName 标签的节点上。

以上是基于污点和容忍度的理解及生产中使用的解析

觉得有用的点个收藏和关注吧~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
污点容忍度是Kubernetes用来控制Pod调度的机制。污点Taint)是指在节点上设置的一种属性,用于排斥一类特定的Pod。而容忍度(Toleration)是指在Pod上设置的属性,用于指定Pod是否可以被调度到具有匹配污点节点上。 当一个节点上设置了污点时,只有那些在Pod的容忍定义了匹配该污点的规则的Pod才能被调度到该节点上。如果Pod没有定义容忍度或者容忍度不匹配节点上的污点,则该Pod将不会被调度到该节点上。 举个例子,假设我们在节点node1上设置了一个污点,key为k1,value为v1,effect为NoSchedule。如果一个Pod的容忍定义了匹配这个污点的规则,比如key为test,value为16,effect为NoSchedule,那么这个Pod就可以被调度到拥有这个污点的node1节点上。 总结来说,污点容忍度是相互匹配的关系。通过在节点上设置污点和在Pod上设置容忍度,我们可以控制Pod的调度行为,避免将Pod调度到不合适的节点上。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [k8s--基础--20--污点容忍度](https://blog.csdn.net/zhou920786312/article/details/126241579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值