首页 > 其他分享 >高级调度 —— 污点、容忍

高级调度 —— 污点、容忍

时间:2023-11-03 22:55:47浏览次数:23  
标签:node 容忍 调度 value 污点 pod 节点

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

一、污点(Taint)

1、污点:是标注在节点上的,当我们在一个节点上打上污点以后,k8s 会认为尽量不要将 pod 调度到该节点上,除非该 pod 上面表示可以容忍该污点,且一个节点可以打多个污点,此时则需要 pod 容忍所有污点才会被调度该节点。

# 为节点打上污点
kubectl taint node k8s-master key=value:NoSchedule
# 移除污点
kubectl taint node k8s-master key=value:NoSchedule-
# 查看污点
kubectl describe no k8s-master

2、污点的影响:

NoSchedule:不能容忍的 pod 不能被调度到该节点,但是已经存在的节点不会被驱逐
NoExecute:不能容忍的节点会被立即清除,能容忍且没有配置 tolerationSeconds 属性,则可以一直运行,设置了 tolerationSeconds: 3600 属性,则该 pod 还能继续在该节点运行 3600 秒

1、NoSchedule

如果不能容忍该污点,那么 Pod 就无法调度到该节点上

2、NoExecute

  • 如果 Pod 不能忍受这类污点,Pod 会马上被驱逐。
  • 如果 Pod 能够忍受这类污点,但是在容忍度定义中没有指定 tolerationSeconds, 则 Pod 还会一直在这个节点上运行。
  • 如果 Pod 能够忍受这类污点,而且指定了 tolerationSeconds, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。

3、当前内置的污点包括:

node.kubernetes.io/not-ready:节点未准备好。这相当于节点状况 Ready 的值为 "False"。
node.kubernetes.io/unreachable:节点控制器访问不到节点. 这相当于节点状况 Ready 的值为 "Unknown"。
node.kubernetes.io/memory-pressure:节点存在内存压力。
node.kubernetes.io/disk-pressure:节点存在磁盘压力。
node.kubernetes.io/pid-pressure:节点的 PID 压力。
node.kubernetes.io/network-unavailable:节点网络不可用。
node.kubernetes.io/unschedulable:节点不可调度。
node.cloudprovider.kubernetes.io/uninitialized:如果 kubelet 启动时指定了一个“外部”云平台驱动, 它将给当前节点添加一个污点将其标志为不可用。在 cloud-controller-manager 的一个控制器初始化这个节点后,kubelet 将删除这个污点。

二、容忍(Toleration)

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

# pod 的 spec 下面配置容忍
tolerations:
- key: "污点的 key"
  value: "污点的 value"
  effect: "NoSchedule" # 污点产生的影响
  operator: "Equal" # 表是 value 与污点的 value 要相等,也可以设置为 Exists 表示存在 key 即可,此时可以不用配置 value

1、Equal

比较操作类型为 Equal,则意味着必须与污点值做匹配,key/value都必须相同,才表示能够容忍该污点

2、Exists

容忍与污点的比较只比较 key,不比较 value,不关心 value 是什么东西,只要 key 存在,就表示可以容忍。

标签:node,容忍,调度,value,污点,pod,节点
From: https://www.cnblogs.com/yifanSJ/p/17808685.html

相关文章

  • 高级调度 —— CronJob计划任务、初始化容器 InitContainer
    一、CronJob计划任务在k8s中周期性运行计划任务,与linux中的crontab相同注意点:CronJob执行的时间是controller-manager的时间,所以一定要确保controller-manager时间是准确的,另外cronjob一)cron表达式#┌─────────────分钟(0-59)#│┌───......
  • 分布式任务调度(00)-xxlJob综述
    1配置属性1.1执行器任务的绑定的执行器:任务触发调度时,将自动发现注册成功的执行器,实现任务自动发现也方便进行任务分组每个任务须绑定一个执行器,可在"执行器管理"设置。1.2任务描述便于任务管理1.3路由策略当执行器集群部署时,提供的路由策略FIRST(第一个):固定选......
  • [Linux环境编程]Linux程序设置调度策略和优先级
    可以使用chrt命令设置进程的调度策略和优先级。以下命令将11528进程的调度策略设置为RR,调度优先级设置为20:chrt-r--pid2011528具体使用见其help信息,如下:ighthouse@cpp_template$chrt--helpShoworchangethereal-timeschedulingattributesofaprocess.Setpol......
  • Go 并发编程 - runtime 协程调度(三)
    GoRuntimeGoruntime可以形象的理解为Go程序运行时的环境,类似于JVM。不同于JVM的是,Go的runtime与业务程序直接打包在一块,是一个可执行文件,直接运行在操作系统上,效率很高。runtime包含了一些Go的一些非常核心的功能:协程调度、垃圾回收、内存分配等。本文将着重介绍......
  • 记一次 .NET 某工厂无人车调度系统 线程爆高分析
    一:背景1.讲故事前些天有位朋友找到我,说他程序中的线程数爆高,让我帮忙看下怎么回事,这种线程数爆高的情况找问题相对比较容易,就让朋友丢一个dump给我,看看便知。二:为什么会爆高1.查看托管线程别人说的话不一定是真,得自己拿数据出来说话,可以用!t命令观察一下便知。0:000>......
  • 1020. 【软件认证】任务调度算法
    题目描述某分布式任务调度系统有taskNum个任务(编号从1到taskNum)需要调度,调度策略:任务之间可能存在依赖关系,且无循环依赖,如任务1依赖任务2,那么要等待任务2执行完才能执行任务1;如果任务之间没有依赖关系,则可以并发执行(假设并发所需资源是充足的)。现给出任务间的依赖关系,并......
  • 【NO.98】LeetCode HOT 100—621. 任务调度器
    题目:621.任务调度器给你一个用字符数组tasks表示的CPU需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在1个单位时间内执行完。在任何一个单位时间,CPU可以完成一个任务,或者处于待命状态。然而,两个相同种类的任务之间......
  • 【专题】数字孪生在电网调度运行中的应用报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34041本次报告合集分为数字孪生综述、技术架构建设、核心技术分享、新型技术成果展示以及重点行业应用五大内容版块。从数字孪生应用建设路径的角度出发,着重提出了“数智视融合,虚实人联动”的观点,并提供数字孪生应用技术的参考。同时,本报告合集还完......
  • Android平台GB28181记录仪如何对接应急指挥调度系统?
    技术方案将Android平台的GB28181客户端记录仪与应急指挥调度系统对接,可以实现实时视频监控和数据传输,以协助应急指挥中心对工地的监控和调度。具体的对接方法如下:1.配置GB28181设备接入端记录仪:在Android设备上安装和配置GB28181客户端记录仪,确保其连接到智慧工地国标服务平台,实现......
  • 怎样实现可靠的数据调度同步,数据同步方案看一下!
    随着企业规模不断扩大,分支机构越来越多,跨区域跨国的集团越来越多,越来越多的企业要求内部各种业务数据在服务器、数据中心甚至云上,能够进行实时的调度和同步,从而需要部署一套数据同步方案,实现服务器与服务器之间的文件数据同步。但在实际应用中存在诸多问题,主要表现在:大部分同步......