说明:

  Taint在一类服务器上打上污点,让不能容忍这个污点的Pod不能部署在打了污点的服务器上。

  Toleration是让Pod容忍节点上配置的污点,可以让一些需要特殊配置的Pod能够调用到具有

  污点和特殊配置的节点上

一、Taint配置解析

  1-1、创建一个污点(一个节点可以有多个污点)

kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT

  创建基本命令。例如在node1节点上面创建污点命令如下:

[root@k8s-master1 ~]# kubectl taint node node-1 node=node:NoSchedule
node/node-1 tainted

  1-2、污点类型

    NoSchedule:禁止调度到该节点,已经在该节点上的Pod不受影响

    NoExecute:禁止调度到该节点,如果不符合这个污点,会立马被驱逐(或在一段时间后)

    PreferNoSchedule:尽量避免将Pod调度到指定的节点上,如果没有更合适的节点,可以部署到该节点

  1-3、Toleration配置解析

#方式一完全匹配:
tolerations:
- key: "taintKey"
operator: "Equal"
value: "taintValue"
effect: "NoSchedule" #方式二不完全匹配:
tolerations:
- key: "taintKey"
operator: "Exists"
effect: "NoSchedule" #方式三大范围匹配(不推荐key为内置Taint)
tolerations:
- key: "taintKey"
operator: "Exists" #方式四匹配所有(不推荐):
tolerations:
- operator: "Exists" #停留时间配置:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 120 #停留120秒后在驱逐

  1-4、利用Deployment 控制器配置nginx容器指定到node-1节点部署示例

  • 节点上打上污点和标签
#禁止调度到该解决,如果不符合这个污点会立马驱逐(或在一段时间内)
[root@k8s-master1 taint]# kubectl taint node node-1 web=web:NoExecute
node/node-1 tainted #禁止调度到该节点,已经存在该节点上的pod不受影响。
[root@k8s-master1 taint]# kubectl taint node node-1 web=web:NoSchedule
node/node-1 tainted #给节点打上标签,利用spec.nodeSelector把创建的pod调度到设置的标签节点上面
[root@k8s-master1 taint]# kubectl label nodes node-1 web=web
node/node-1 labeled
  • 利用nodeSelector指定标签key:value部署容器到node-1节点。及结合Toleration配置Deployment。

  

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-taint
name: nginx-taint spec:
replicas: 1
selector:
matchLabels:
app: nginx-taint
template:
metadata:
labels:
app: nginx-taint
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine
name: nginx-taint
nodeSelector:
web: "web" #这里是上面设置web=web标签。key:value例如:上面设置的是web:web
tolerations:
- key: "web" #这里是taint key名称 web
operator: "Equal" #匹配规则
value: "web" #这里是taint value值 web
  • 创建状态
[root@k8s-master1 taint]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-taint-68c7f46677-vk8xh 1/1 Running 0 6s 172.23.119.165 node-1 <none> <none>

  注:在使用nodeSelector的时候不能在tolerations下设置effect 匹配Taint规则

  • 在不使用nodeSelector指定标签。创建示例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-taint
name: nginx-taint spec:
replicas: 1
selector:
matchLabels:
app: nginx-taint
template:
metadata:
labels:
app: nginx-taint
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine
name: nginx-taint
tolerations:
- key: "web"
operator: "Equal"
value: "web"
effect: "NoExecute" #指定Taint 污点规则
  • 创建状态
[root@k8s-master1 taint]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-taint-667d7688dd-mlhcd 1/1 Running 0 9s 172.24.247.48 node-2 <none> <none>

  注:在没有使用nodeSelector 指定标签的时候,创建的容器部署到了其它节点上面

二、内置污点

  ➢ node.kubernetes.io/not-ready:节点未准备好,相当于节点状态Ready的值为False。

  ➢ node.kubernetes.io/unreachable:Node Controller访问不到节点,相当于节点状态Ready的值为Unknown。

  ➢node.kubernetes.io/out-of-disk:节点磁盘耗尽。

  ➢ node.kubernetes.io/memory-pressure:节点存在内存压力。

  ➢ node.kubernetes.io/disk-pressure:节点存在磁盘压力。

  ➢ node.kubernetes.io/network-unavailable:节点网络不可达。

  ➢ node.kubernetes.io/unschedulable:节点不可调度。

  ➢ node.cloudprovider.kubernetes.io/uninitialized:如果Kubelet启动时指定了一个外部的cloudprovider,它

   将给当前节点添加一个Taint将其标记为不可用。在cloud-controller-manager的一个controller初始化这个
   节点后,Kubelet将删除这个Taint。
  
  2-1、节点宕机快速恢复示例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-taint
name: nginx-taint spec:
replicas: 1
selector:
matchLabels:
app: nginx-taint
template:
metadata:
labels:
app: nginx-taint
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine
name: nginx-taint
nodeSelector:
web: "web"
tolerations:
- key: "web"
operator: "Equal"
value: "web"
- effect: NoExecute
key: node.kubernetes.io/unreachable #设置的是内置污点
operator: Exists #设置的tolerations不完全匹配规则
tolerationSeconds: 10 #节点不健康,10秒以后迁移该节点
- effect: NoExecute #指定Taint污点规则
key: node.kubernetes.io/not-ready #内置污点规则
operator: Exists
tolerationSeconds: 10 #节点状态为NotReady 10秒以后迁移

  注:在设置nodeSelector指定节点部署容器的时候。节点宕机后其它节点要有相同的标签key和value如果不相同

    或没有迁移后会一直处于Pending状态

  2-2、查看节点机器宕机后迁移状态

[root@k8s-master1 taint]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-taint-5f69bb844-8mq54 1/1 Terminating 0 11m 172.23.119.167 node-1 <none> <none>
nginx-taint-5f69bb844-khrmt 1/1 Running 0 5m3s 172.24.247.49 node-2 <none> <none>
taint-nginx-6bfcd7dff-wx768 1/1 Terminating 0 14m 172.23.119.166 node-1 <none> <none>
taint-nginx-6bfcd7dff-zttzj 1/1 Running 0 13s 172.24.247.50 node-2 <none> <none>

  注:从上面状态可以看出设置了内置污点10秒健康检查很快进行了迁移,另一个容器没有设置使用默认时间(300秒)等很长时间进行迁移。

    Terminating状态会在该节点启动会自动去除

三、Taint 常用命令

#创建一个污点(一个节点可以有多个污点):
kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT
#示例:
kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule #查看一个节点的污点:
kubectl get node k8s-node01 -o go-template --template {{.spec.taints}}
kubectl describe node k8s-node01 | grep Taints -A 10 #删除污点(和label类似):
基于Key删除: kubectl taint nodes k8s-node01 ssd-
基于Key+Effect删除: kubectl taint nodes k8s-node01 ssd:PreferNoSchedule- #修改污点(Key和Effect相同):
kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule --overwrite

  

容忍和污点Taint和Toleration的更多相关文章

  1. kubernetes调度之污点(taint)和容忍(toleration)

    系列目录 节点亲和性(affinity),是节点的一种属性,让符合条件的pod亲附于它(倾向于或者硬性要求).污点是一种相反的行为,它会使pod抗拒此节点(即pod调度的时候不被调度到此节点) 污点和 ...

  2. Kubernetes 配置 Taint 和 Toleration(污点和容忍)

    通过污点和容忍让pod运行在特定节点上 参考官网:https://k8smeetup.github.io/docs/concepts/configuration/taint-and-toleratio ...

  3. 【云原生 · Kubernetes】Taint和Toleration(污点和容忍)

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Taint和Toleration(污点和容忍) 概念 添加多个tainit(污点) 使用例子 ...

  4. 调度《Taint(污点) 和 Toleration(容忍)》

    节点亲和性(详见这里),是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点.Taint 则相反,它使 节点 能够 排斥 一类特定的 pod. Taint 和 tolerat ...

  5. pod(九):污点taint 与容忍度tolerations

    目录 一.系统环境 二.前言 三.污点taint 3.1 污点taint概览 3.2 给节点添加污点taint 四.容忍度tolerations 4.1 容忍度tolerations概览 4.2 设置 ...

  6. Kubernetes高级调度- Taint和Toleration、Node Affinity分析

    此文分享了污点和Node Affinity实际使用过程中的细节.坑和思维误区.同时整理且回答了诸多细节问题,尤其那些在官方文档中不曾提及的细节. 阅读提示:文中的节点指Node (避免Pod和Node ...

  7. Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration

    由于博客园不支持markdown,推荐以下url阅读: 原创url:https://blog.csdn.net/weixin_42495873/article/details/103364868 ## ...

  8. 七、kubernetes污点和容忍

    Kubernetes污点和容忍 一.Taint 和 Toleration介绍 节点亲和性,是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点.Taint 则相反,它使节点能 ...

  9. Kubernetes之调度器和调度过程

    scheduler 当Scheduler通过API server 的watch接口监听到新建Pod副本的信息后,它会检查所有符合该Pod要求的Node列表,开始执行Pod调度逻辑.调度成功后将Pod绑 ...

  10. K8S 高级调度方式

    可以使用高级调度分为: 节点选择器: nodeSelector.nodeName 节点亲和性调度: nodeAffinity Pod亲和性调度:PodAffinity Pod反亲和性调度:podAnt ...

随机推荐

  1. 如何在C#中接受或拒绝 Excel 中的修订

    修订功能可以跟踪文档所有的修改,了解修改的过程,这对于团队协同文档编辑.审阅是非常有用的一个功能.将工作簿发送给他人审阅时,我们可以开启修订功能,共享工作簿被修改后,用户查看文档时可以选择接受或者拒绝 ...

  2. 2021 & 2022年终回顾:山河无恙,烟火寻常

    前言 又到了一年一度年终回顾的时候了,回想起去年年底圣诞节的时候由于忙着参加黑客松大赛,一下子就进入了新的一年,失去了年终回顾的动力,所以今年提前两个月开始进行回顾,这样的话今年最后一天就可以顺利发文 ...

  3. [常用工具] PyAutoGUI使用教程

    PyAutoGUI使用教程 目录 PyAutoGUI使用教程 1 基础知识 2 一般函数 3 故障保险 4 鼠标函数 4.1 鼠标移动 4.2 鼠标拖动 4.3 鼠标单击 4.4 鼠标滚动 4.5 鼠 ...

  4. [编程基础] Python命令行解析库argparse学习笔记

    Python argparse教程展示了如何使用argparse模块解析Python中的命令行参数. 文章目录 1 使用说明 1.1 Python argparse可选参数 1.2 Python ar ...

  5. 基于云基础设施快速部署 RocketMQ 5.0 集群

    本文作者:蔡高扬,Apache RocketMQ Committer, 阿里云智能技术专家. 背景 上图左侧为 RocketMQ 4.x版本集群,属于非切换架构.NameServer 作为无状态节点可 ...

  6. [C++标准模板库:自修教程与参考手册]关于deque

    Deque的基本概念 deque和vector很相似,也提供随机存取的能力,将元素都动态地存储在一个数组中,最大的区别就是:deque的头和尾都是开放的,非常方便在头尾两端进行一些操作.(重点在于:d ...

  7. Ubuntu 22.04 运行 Appimage 文件

    解决方法 sudo apt-get update sudo apt install fuse libfuse2 chmod a+x *.appimage 参考资料 https://bynss.com/ ...

  8. Ubuntu下的LGT8F328P MiniEVB Arduino开发和烧录环境

    基于 LGT8F328P LQFP32 的 Arduino MiniEVB, 这个板型资料较少, 记录一下开发环境和烧录过程以及当中遇到的问题. 关于 LGT8F328P 芯片参数 8位RISC内核 ...

  9. CF1779C Least Prefix Sum 题解

    CF链接:Least Prefix Sum Luogu链接:Least Prefix Sum $ {\scr \color {CornflowerBlue}{\text{Solution}}} $ 先 ...

  10. Win10环境下yolov8(ultralytics) 快速配置与测试

    win10下亲测有效!(如果想在tensorrt+cuda下部署,直接看第五5章) 一.win10下创建yolov8环境 # 注:python其他版本在win10下,可能有坑,我已经替你踩坑了,这里p ...