十二、K8S之污点和容忍

污点和容忍

一、概念

k8s 集群中可能管理着非常庞大的服务器,这些服务器可能是各种各样不同类型的,比如机房、地理位置、配置等,有些是计算型节点,有些是存储型节点,此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。

此时就需要用到污点(Taint)和容忍(Toleration),这些配置都是 key: value 类型的。

K8S的污点和容忍是其中一种高级调度功能,作用是让 Kubernetes 集群中的节点有选择地接受或拒绝来自不同类型 Pod 的调度请求,可以帮助运维人员更好地管理、调度和控制应用程序的部署。

二、污点

在节点上设置污点,当我们在一个节点上打上污点以后,k8s 会认为尽量不要将 pod 调度到该节点上。

配置污点主要分为两类

  • NoSchedule

设置了 NoSchedule 污点的节点将不会被调度器分配新的 Pod,但已经运行的 Pod 不受影响。这个污点用于标记节点暂时无法接受新的 Pod 的情况,例如节点维护或故障。

  • NoExecute

设置了 NoExecute 污点的节点将不会被调度器分配新的 Pod,并且已经运行在该节点上的 Pod,如果它们不容忍该污点,则会被驱逐出该节点。这个污点用于标记节点上的某些服务或资源已经不再可用,而正在运行的 Pod 需要尽快迁移到其他节点。

  • PreferNoSchedule

“软性”的 NoSchedule,尽量避免往该节点上调度,但不能保证完全避免

2.1、使用到的命令
# 为节点打上污点, 这里的key和value是自定义的标签,主要作用是为了解释为什么打污点
kubectl taint node k8s-master key=value:NoExecute

# 移除污点,就是打污点的命令后面加一个-
kubectl taint node k8s-master key=value:NoSchedule-

# 查看污点
kubectl describe no k8s-master
------------------- 看Taints数据
Taints:             node-role.kubernetes.io/master:NoSchedule

2.2、示例

在K8S中,master节点默认有一个NoSchedule类型的污点,现在我是想通过配置污点的方式将一个运行在节点1的pod转移到 master节点上。

  • 1、去除master污点

    kubectl taint node  node-role.kubernetes.io/master:NoSchedule-
    
  • 2、给节点1添加一个NoExecute 类型的污点

    kubectl taint node k8s-node1 ceshi=t:NoExecute
    

做完这两步之后就会发现pod转移到master节点上运行了

三、容忍

容忍是标注在 pod 上的,当 pod 被调度时,如果没有配置容忍,则该 pod 不会被调度到有污点的节点上,只有该 pod 上标注了满足某个节点的所有污点,则可能会被调度到这些节点

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  #容忍配置 
  tolerations:
  - key: "test"
    operator: "Equal"
    value: "t"
    effect: "NoSchedule"
  • key

表示要匹配的污点的键(Key),就是标签的key。必须与节点上设置的污点键一致。

  • operator

表示匹配操作符,可以取值为 “Equal”、“Exists” 或 “DoesNotExist”,分别表示完全匹配、存在匹配和不存在匹配。如果为Exists,则不需要value

  • value

标签的值

  • effect

表示匹配效果(Effect),可以取值为 “NoSchedule”、“PreferNoSchedule” 或 “NoExecute”,分别表示不可调度、尽量避免调度和驱逐。

这四个参数中,前三个主要是为了匹配标签的key-value,effect匹配污点类型

存在两种特殊情况:

如果一个容忍度的 key 为空且 operatorExists, 表示这个容忍度与任意的 key、value 和 effect 都匹配,即这个容忍度能容忍任何污点。

如果 effect 为空,则可以与所有键名 key1 的效果相匹配。

相关推荐

  1. K8S污点容忍

    2023-12-31 14:32:02       34 阅读
  2. K8S(七)—污点容忍

    2023-12-31 14:32:02       41 阅读
  3. 持续集成部署-k8s-高级调度-污点容忍

    2023-12-31 14:32:02       27 阅读
  4. k8s污点去除

    2023-12-31 14:32:02       17 阅读
  5. k8s-master增加删除污点

    2023-12-31 14:32:02       40 阅读
  6. k8s 节点打污点

    2023-12-31 14:32:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 14:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 14:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 14:32:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 14:32:02       20 阅读

热门阅读

  1. 速盾高防ip:专业防御ddos

    2023-12-31 14:32:02       42 阅读
  2. Linux虚拟文件系统

    2023-12-31 14:32:02       35 阅读
  3. 设计模式之装饰者模式

    2023-12-31 14:32:02       38 阅读
  4. ubuntu 安装docker GPG error缺少公钥解决方法

    2023-12-31 14:32:02       45 阅读
  5. 4. 深入 Python 流程控制

    2023-12-31 14:32:02       35 阅读
  6. 排查 JVM 中的 OOM 问题详细指南

    2023-12-31 14:32:02       37 阅读
  7. 解释区块链技术的应用场景和优势

    2023-12-31 14:32:02       44 阅读
  8. Vue3使用WangEditor编辑器

    2023-12-31 14:32:02       38 阅读
  9. Linux cat 命令

    2023-12-31 14:32:02       46 阅读
  10. 【WPF.NET开发】预览事件

    2023-12-31 14:32:02       39 阅读
  11. 关于WPF MVVM 的详细使用过程以及注意的问题

    2023-12-31 14:32:02       26 阅读