当前位置: 首页 > news >正文

k8s-----23、Taint和Toleration、污点和容忍

1、使用场景

生产环境部署规则
1、master节点不允许部署其他类型的pod节点
2、新增node节点需要经过测试才可投入使用,才允许pod部署在该节点
3、维护/升级node节点时,需要将节点上的pod提前进行迁移
4、特殊节点:比如这个节点是SSD/GPU类型的。 不能随便一个pod都部署在这个节点

设置了污点和容忍后,并一定就必须按照这个污点和容忍去走,并不一定非要部署在有污点的节点,类似于回家有5个门,有些门设置了污点,也就是有锁的,但是有些门没有设置,刚好没锁,然后刚好走到了这个门,直接就可以进去了。所以pod并不会一定走到这个节点。

2、概念

Taint能够使节点排斥一类特定的Pod,Taint和Toleration相互配合可以用来避免Pod被分配到不合适的节点,比如Master节点不允许部署系统组件之外的其他Pod。每个节点上都可以应用一个或多个Taint,这表示对于那些不能容忍这些Taint的Pod是不会被该节点接受的。如果将Toleration应用于Pod上,则表示这些Pod可以(但不要求)被调度到具有匹配Taint的节点上。

2.1 taint 污点

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

2.2 Toleration容忍

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

2.3 官网

官网文档

3、配置解析

3.1 Taint配置解析

创建一个污点(一个节点可以有多个污点):kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT #nodes表示节点主机名,key 和 value,冒号后面是调度策略
比如:kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule #示例
调度策略:
NoSchedule:禁止调度到该节点,已经在该节点上的Pod不受影响 
NoExecute:禁止调度到该节点,如果不符合这个污点,会立马被驱逐(或在一段时间后) 
PreferNoSchedule:尽量避免将Pod调度到指定的节点上,如果没有更合适的节点,可以部署到该节点

3.2 Toleration配置解析

策略:
方式1 完全匹配:key value effect完全和污点的节点相同tolerations:- key: "taintKey"operator: "Equal" value: "taintValue" effect: "NoSchedule"
方式2 不完全匹配:满足key的就可以调度到这个节点上tolerations:- key: "taintKey"operator: "Exists" effect: "NoSchedule"
方式3 大范围匹配(不推荐key为内置Taint)tolerations:- key: "taintKey" operator: "Exists"
方式4 匹配所有(不推荐)tolerations:- operator: "Exists"
停留时间配置:tolerations: - key: "key1"operator: "Equal"value: "value1"effect: "NoExecute"  #驱逐tolerationSeconds: 3600 # 可以在node上停留的时间,不会立即驱逐

4、使用案例

有一个节点是纯SSD硬盘的节点,现需要只有一些需要高性能存储的Pod才能调度到该节点上
#给节点打上污点和标签:
1. kubectl taint nodes k8s-node01 ssd=true:NoExecute(此时会驱逐没有容忍该污点的Pod)
2. kubectl taint nodes k8s-node01 ssd=true:NoSchedule
3. kubectl label node k8s-node01 ssd=true
#配置pod
apiVersion: v1 
kind: Pod 
metadata:name: nginx labels:env: testspec:containers:- name: nginx image: nginximagePullPolicy: IfNotPresent nodeSelector:ssd: "true" tolerations: - key: "ssd"operator: "Exists"

5、内置污点

➢ 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。
节点不健康,6000秒后再驱逐(默认是300秒): 这里的时间需要合理配置,有时候由于网络抖动导致的,所以时间设置不可以太短,但是时间设置过长,可能导致业务受损。
tolerations:
- key: "node.kubernetes.io/unreachable"operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000  #只容忍这么长时间

6、taint命令常用示例

创建一个污点(一个节点可以有多个污点):kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT
比如:
查看一个节点的污点: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
http://www.lryc.cn/news/205900.html

相关文章:

  • 全面解析优化企业Microsoft 365网络的加速方案
  • Xilinx MicroBlaze定时器中断无法返回主函数问题解决
  • Spark SQL概述与基本操作
  • KDChart3.0编译过程-使用QT5.15及QT6.x编译
  • 一、PHP环境搭建[phpstorm]
  • 光影之梦2:动画渲染前后对比,揭示视觉艺术的惊人转变!
  • pytorch_lightning:Validation sanity check: 0%| | 0/2 [00:00<?, ?it/s]
  • 2、Linux权限理解
  • Linux 通过 sed 命令过滤指定日期的日志文件并输出到新文件
  • 景联文科技:针对敏感数据的安全转录服务,护航信息安全
  • Excel宏(VBA)自动化标准流程代码
  • vue vue3开发 vue2和vue3的选择
  • 华为OD 数列描述(100分)【java】A卷+B卷
  • μCOS-Ⅲ中断管理,这样理解非常简单!
  • Vue 项目进行 SEO 优化
  • 【C++入门篇】保姆级教程篇【上】
  • 用傲梅分区软件分割分区重启系统蓝屏BAD_SYSTEM_CONFIG_INFO,八个解决参考方案
  • 7-1、S曲线加减速原理【51单片机控制步进电机-TB6600系列】
  • golang 通過ssh連接遠程服務器 控制
  • Python深度学习实战-基于tensorflow.keras六步法搭建神经网络(附源码和实现效果)
  • 单片机核心/RTOS必备 (ARM汇编)
  • 2023/10/25
  • 如何做一个无符号数识别程序
  • C++初阶:C/C++内存管理
  • 新成果展示:AlGaN/GaN基紫外光电晶体管的设计与制备
  • Ivs+keepalived:高可用集群
  • win10安装spark
  • 基于Spring Boot 的毕业生实习就业管理系统(绿色)
  • 1600*C. Remove Adjacent(贪心字符串)
  • CRC校验码2018-架构师(六十一)