说明:

  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. virtualenv 配置(windows)

    1.在线安装 virtualenv pip install virtualenv 2.离线安装 下载virtualenv包,解压并进入setup.py所在文件夹中 python setup.py in ...

  2. 国产paozhu c++ web framework 正式版发布

    经过大半个月测试修改 paozhu c++ web framework 正式版发布, 1.0.5 release 官方第一次发布正式版,可以用于生产环境. 易用性 超越国外各种 c++ web fra ...

  3. RocketMQ Compaction Topic的设计与实现

    本文作者:刘涛,阿里云智能技术专家. 01 Compaction Topic介绍 一般来说,消息队列提供的数据过期机制有如下几种,比如有基于时间的过期机制--数据保存多长时间后即进行清理,也有基于数据 ...

  4. Linux中的infuxdb安装及数据迁移

    一.安装influxdb 1.更新yum源 cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo   [influxdb]   baseu ...

  5. 使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决

    使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决   摘要:我昨天花了一天时间学习了SSM项目搭建,却在最终的编码问题上拉胯了,在使用Spring MVC框架进行前 ...

  6. P7914 [CSP-S 2021] 括号序列

    简要题意 给定 \(k\),定义 "超级括号序列"(简称括号序列,下同) 字符串为: 仅由 ( ) * 三种字符组成. 下面令 \(S\) 为不超过 \(k\) 个 \(\ast\ ...

  7. [1]SpinalHDL安装环境

    [1]SpinalHDL安装环境 最好的教程是官方文档!不过推荐英文文档 英文版 中文版 一.安装java环境 SpinalHDL相当于是scala的一个包,而scala是运行在jvm上的.所以我们先 ...

  8. 前端Linux部署命令与流程记录

    以前写过一篇在Linux上从零开始部署前后端分离的Vue+Spring boot项目,但那时候是部署自己的个人项目,磕磕绊绊地把问题解决了,后来在公司有了几次应用到实际生产环境的经验,发现还有很多可以 ...

  9. angular---处于激活状态的路由加样式

  10. 【Android 4.4】内存文件系统(tmpfs)的创建与使用

    前言说明 某些情况下,需要缓存一些文件到磁盘中,我们可以借助 tmpfs 文件系统,来提升读写缓存文件的速度,并且也可以避免频繁读写缓存文件所带来的对 flash 的寿命影响. 使用方法 通过 mkd ...