说明:

  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. 软件工程大作业——“你帮我助”软件开发v2.0

    项目简介 在疫情管控期间,很多物资由于信息不对称,不能达成资源的有效分配,尽管这样的事件已经基本不会在新冠疫情的场景中出现,但是开发出一个物品交换的公开信息平台在任何一个社区中都是有必要的,这是构建完 ...

  2. 使用linux的ffmpeg进行B站直播推流

    很久之前买了个友善的开发板R2S,一直在家吃灰.最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程. 第一步:安装ffmpeg sudo apt update ...

  3. [LeetCode]爬楼梯

    题目 假设你正在爬楼梯.需要 n 步你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: ...

  4. Ubuntu 22.04 安装 utools 时的疑难杂症

    Error: libcrypto.so.1.1 原因:libcrypto.so.1.1 该依赖的版本不对,ubuntu 默认是使用的 openssl3 的依赖 这个是 openssl1 的 wget ...

  5. 什么是C语言

    什么是C语言? C语言是一门计算机语言 计算机语言是什么呢? 人和计算机交流的语言,如C/C++.Java.python 计算机语言的发展? 二进制语言(硬件-电-正电1/负电0 1010100101 ...

  6. MySQL 合并查询join 查询出的不同列合并到一个表中

    为了求解问题时思路清晰,建议先分列查询,再将列合并到一个表中,这样相当于将复杂问题拆解为简单问题,一一解决.优点是避免所有问题混在一起,代码逻辑清晰,可迁移性强,下次遇到类似的查询问题能快速求解,缺点 ...

  7. Vue13 样式动态绑定

    1 class样式的动态绑定 1.1 说明 通过命令v-bind:class设置一个对象,动态切换class.可以简写为:class. class=""可以和:class=&quo ...

  8. Quartz与Topshelf结合实现window定时服务

    一,新建控制台应用程序 二,选中项目,右键 - 管理 NuGet 程序包,添加四个: Quartz Quartz.Plugins Topshelf log4net 三,创建项目文件 三个配置文件:必须 ...

  9. SRS视频流服务器初试

    目录 1.关于协议理解 2.快速开始 1.SRS安装 2.推流 3.拉流 注: 1)方式一:SRS网页播放器(推荐) 2)方式二:VLC播放器(需要下载,延迟高,不推荐) 1.关于协议理解 在前面的博 ...

  10. Ubuntu vmware共享文件夹自动挂载

    自动挂载 修改/etc/fstab,加入如下内容 .host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0 手动挂载 修改/etc/fst ...