K8s的亲和、反亲和、污点、容忍

1 亲和与反亲和

亲和性的原理其实很简单,主要利用label标签结合nodeSelector选择器来实现

1.1 Pod和Node

  • 从pod出发,可以分成亲和性和反亲和性,分别对应podAffinity和podAntiAffinity。
  • 从node出发,也可以分成亲和性和反亲和性,分别对应nodeAffinity和nodeAntiAffinity。
  • 从操作指令来讲,可以有ln、Notln、Exists、DoesNotExist等等。
针对亲和性来讲,in代表我要调度到有这个标签的位置
针对反亲和性来讲,in代表我不要调度到有这个标签的位置

1.2 硬亲和和软亲和

软亲和:preferredDuringSchedulingIgnoredDuringExecution 

软策略:结合下面的 “operator: NotIn”,意思就是尽量不要将 pod 调度到匹配到的节点,但是如果没有不匹配的节点的话,也可以调度到匹配到的节点。

硬亲和:requiredDuringSchedulingIgnoredDuringExecution 

 硬策略:结合下面的 “operator: In”,意思就是必须调度到满足条件的节点上,否则就等着 Pending。 

 不管哪种方式,最终还是要依赖 label 标签:

kubectl get pods -n company xxx -oyaml | grep nodeSelector -B 5 -A 5
apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:   #硬策略
        nodeSelectorTerms:
        - matchExpressions:
          - key: node-role.kubernetes.io/gray
            operator: In
            values:
            - gray
      preferredDuringSchedulingIgnoredDuringExecution:  #软策略
          - weight: 1
            preference:
              matchExpressions:
              - key: pc-app
                operator: NotIn
                values:
                - luna

2 污点与容忍

       K8s 每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有相应 taint 的节点上。

2.1 污点(Taint)

       如果一个节点被标记为有污点,那么意味着不允许pod调度到该节点,除非pod也被标记为可以容忍污点节点。
       在使用kubeadm部署的k8s集群的时候应该会发现,通常情况下,应用是不会调度到master节点的。因为kubeadm部署的k8s集群默认给master节点加了Taints(污点)。

2.1.1 污点的组成 

      使用kubectl taint命令可以给某个Node节点设置污点,Node被设置上污点之后就和Pod之间存在了一种相斥的关系,可以让Node拒绝Pod的调度执行,甚至将Node已经存在的Pod驱逐出去。

 每个污点的组成如下

#每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用
key=value:effect   

污点有三种策略: 

PreferNoSchedule:

  • NoSchedule的软策略版本,表示尽量不调度到污点节点上去

NoExecute:

  • 表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod驱逐出去
  • 注:(若节点上设置了污点并用的是NoExecute策略,node节点上的pod会被全部驱逐,但是如果是 Deployment 或者 StatefulSet 资源类型,为了维持副本数量则会在别的 Node 上再创建新的 Pod)

NoSchedule:

  • 表示k8s将不会将Pod调度到具有该污点的Node上

 

NoExecute和NoSchedule的区别:

  • NoSchedule只是不调度,但并不影响已经调度好的容器,即使给宿主机新增了污点,这些Pod依然会正常运行。同样PreferNoSchedule也是。
  • NoExecute就不一样了,会将Pod驱逐到其他宿主,除非该Pod容忍。

2.1.2 污点的设置和去除 

使用kubectl设置和去除污点的命令示例如下:

# 设置污点
kubectl taint nodes node1 xtz=value1:NoSchedule

# 去除污点
kubectl taint nodes node1 xtz:NoSchedule-

#节点说明中,查找 Taints 字段
kubectl describe node node-name  

接下来看一个具体的例子,使用kubeadm部署和初始化的Kubernetes集群,master节点被设置了一个node-role.kubernetes.io/master:NoSchedule的污点,可以使用kubectl describe node 命令查看。这个污点表示默认情况下master节点将不会调度运行Pod,即不运行工作负载。

对于使用二进制手动部署的集群设置和移除这个污点的命令如下:

kubectl taint nodes <node-name> node-role.kubernetes.io/master=:NoSchedule
kubectl taint nodes <node-name> node-role.kubernetes.io/master:NoSchedule-

2.2 容忍(Tolerations)

       设置了污点的Node将根据taint的effect:NoSchedule、PreferNoSchedule、NoExecute和Pod之间产生互斥的关系,Pod将在一定程度上不会被调度到Node上。 但我们可以在Pod上设置容忍(Toleration),意思是设置了容忍的Pod将可以容忍污点的存在,可以被调度到存在污点的Node上。

2.2.1Toleration 基本用法

pod 的 Toleration 声明中的 key 和 effect 需要与 Taint 的设置保持一致,并且满足以下条件之一:

  • operator 的值为 Exists,这时无需指定 value
  • operator 的值为 Equal 并且 value 相等
  • 如果不指定 operator,则默认值为 Equal。

另外还有如下两个特例:

  • 空的 key 配合 Exists 操作符能够匹配所有的键和值
  • 空的 effect 匹配所有的 effect

上面的例子中 effect 的取值为 NoSchedule,下面对 effect 的值作下简单说明: 

  • NoSchedule:如果一个 pod 没有声明容忍这个 Taint,则系统不会把该 Pod 调度到有这个 Taint 的 node 上
  • PreferNoSchedule:NoSchedule 的软限制版本,如果一个 Pod 没有声明容忍这个Taint,则系统会尽量避免把这个 pod 调度到这一节点上去,但不是强制的。
  • NoExecute:定义 pod 的驱逐行为,以应对节点故障。

 NoExecute 这个 Taint 效果对节点上正在运行的 pod 有以下影响:

  • 没有设置 Toleration 的 Pod 会被立刻驱逐
  • 配置了对应 Toleration 的 pod,如果没有为 tolerationSeconds 赋值,则会一直留在这一节点中
  • 配置了对应 Toleration 的 pod 且指定了 tolerationSeconds 值,则会在指定时间后驱逐

 2.2.2 Toleration案例

tolerations:
 - key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
tolerationSeconds: 3600
 - key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
 - key: "key2"
operator: "Exists"
effect: "NoSchedule" 

  • 其中key, vaule, effect要与Node上设置的taint保持一致
  • operator的值为Exists将会忽略value值
  • tolerationSeconds用于描述当Pod需要被驱逐时可以在Pod上继续保留运行的时间

 下面看一下在Pod上设置容忍的两个特例:

示例1: 当不指定key值时,表示容忍所有的污点key:

tolerations:
- operator: "Exists"

示例2:当不指定effect值时,表示容忍所有的污点作用:

tolerations:
- key: "key"
operator: "Exists"

注意:  在节点故障情况下,为了保持现存的 pod 驱逐的限速设置,系统将会以限速的模式逐步给 node 设置 Taint,这就能防止在一些特定情况下(比如 master 暂时失联)造成的大量 pod 被驱逐的后果。这一功能兼容于 tolerationSeconds,允许 pod 定义节点故障时持续多久才被逐出。

 2.3 多污点与多容忍配置

       系统允许在同一个 node 上设置多个 taint,也可以在 pod 上设置多个 Toleration。**Kubernetes 调度器处理多个 Taint 和 Toleration 能够匹配的部分,剩下的没有忽略掉的 Taint 就是对 Pod 的效果了。下面是几种特殊情况:

  • 如果剩余的 Taint 中存在 effect=NoSchedule,则调度器不会把该 pod 调度到这一节点上。
  • 如果剩余的 Taint 中没有 NoSchedule 的效果,但是有 PreferNoSchedule 效果,则调度器会尝试不会 pod指派给这个节点
  • 如果剩余 Taint 的效果有 NoExecute 的,并且这个 pod已经在该节点运行,则会被驱逐;如果没有在该节点运行,也不会再被调度到该节点上。
kubectl taint nodes node1 key1=value1:NoSchedule  
kubectl taint nodes node1 key1=value1:NoExecute  
kubectl taint nodes node1 key2=value2:NoSchedule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/551756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例 如下图所示,在电脑的开始菜单中找到”Robot Neiborhood”,点击进入, 如下图所示,设置要连接的机器人名称和主机IP地址(要确保自己的电脑和机器人IP地址在同一网段内),点击Add添加, 添加在线…

[Qt网络编程]之获取基本网络信息

前言 获取主机的网络地址和接口信息是进行网络编程的第一步&#xff0c;也是网络编程的基础。Qt提供了网络接口类 QNetworkInterface、网络地址人口类 QNetworkAddressEntry 和主机地址类 QHostAddress 来获取和使用地址信息。其中网络接口类 QNetworkInterface 描述了主机的卫…

光电水位开关数字信号与模拟信号的区别

如今随着液位检测技术的不断发展&#xff0c;检测液位的方法也越来越多&#xff0c;在小家电领域应用最多的液位检测方法就是光电液位传感器&#xff0c;光电液位传感器分为数字信号和模拟信号两种&#xff0c;都是输出高低电压信号&#xff0c;但输出的电压不一样。 数字信号…

OJ 连续数的和 球弹跳高度的计算【C判断是否为完全平方数】【格式输出%g输出全部小数部分】

连续数的和 判断是否为完全平方数有两种方法 1.遍历所有小于该数的整数&#xff0c;有一个满足平方与该数相等&#xff0c;则是完全平方数 2.用sqrt()或pow()函数对该数开方&#xff0c;取整&#xff08;舍去小数部分&#xff09;&#xff0c;再平方&#xff0c;与该数相等则…

项目7-音乐播放器4

1.喜欢/收藏音乐模块设计 1.1 请求响应模块设计 请求&#xff1a; { post, /lovemusic/likeMusic data: id//音乐id } 响应&#xff1a; { "status": 0, "message": "点赞音乐成功", "da…

力扣:120. 三角形最小路径和

力扣&#xff1a;120. 三角形最小路径和 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正…

特殊文件-XML文件

简介 XML全称&#xff1a;Etensible Markup Language&#xff0c;可扩展标记语言 特点 标签都是成对出现的&#xff0c;一个标签就是一个元素一个xml文件中有且只有一个根标签标签也是可以携带属性的 IDEA创建XML 简单示例 必须有抬头标签是可以携带属性的&#xff0c;但是属性…

c++程序员简历中项目怎么写?避免踩坑!

C开发 9 年&#xff0c;目前人在大厂&#xff0c;做 C 相关的开发&#xff0c;作为资深 C 面试官&#xff0c;我来聊聊面试官眼中的校招简历中的 C 项目吧&#xff0c;希望对各位学弟学妹有帮助。 1. 简历中如何介绍自己的项目&#xff1f; 从面试官的角度来说&#xff0c;我…

QAnything部署Mac m1环境

本次安装时Qanything已经更新到了v1.3.3&#xff0c;支持纯python安装。安装过程比较简单&#xff0c;如下&#xff1a; QAnything/README_zh.md at qanything-python-v1.3.1 netease-youdao/QAnything GitHub 首先需要用Anaconda3创建隔离环境&#xff0c;简要说明下Anaco…

中型企业用CRM管理软件,求推荐?

中型企业是指哪些企业呢&#xff1f; 指的是员工人数在数百至数千人之间&#xff0c;年营业额在几千万至数亿元之间的企业。这些企业通常已经形成了较为稳定的业务模式和市场定位&#xff0c;有一定的市场份额和客户基础&#xff0c;同时也在积极拓展新的业务领域和市场空间。…

工业控制(ICS)---OMRON

OMRON FINS 欧姆龙厂商 命令代码(Command CODE)特别多&#xff0c;主要关注读写相关&#xff0c;如&#xff1a; Memory Area Read (0x0101) Memory Area Write (0x0102) Multiple Memory Area Read (0x0104) Memory Area Transfer (0x0105) Parameter Area Read (0x0201) Pa…

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容&#xff1a; 煤矿安全知识基础学习VR系统内容包括&#xff1a;下井流程&#xff08;正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全&#xff09;&#xff1b;运煤流程…

Windows平台RTMP推送|轻量级RTSP服务如何实现摄像头叠加到屏幕输出

技术背景 我们在用Windows平台RTMP推送、轻量级RTSP服务实现无纸化同屏、智慧教室等场景的时候&#xff0c;有个需求是&#xff0c;需要主讲人&#xff08;或老师&#xff09;的摄像头数据&#xff0c;叠加到屏幕上输出出去&#xff0c;这就是今天我们需要讲的视频视频叠加。 …

appium2报错:Failed to create session. ‘automationName‘ can‘t be blank

1、问题概述&#xff1f; 今天在window环境中安装了appium2.5.2版本&#xff0c;通过appium inspector连接真机的时候报错如下&#xff1a; Failed to create session. automationName cant be blank 原因分析&#xff1a;这是因为appium2的比appium1有了很大的改进&#xff…

C++ 类和对象(二)

目录 1.前言 2.类的六个默认成员函数 3.构造函数 3.1概念 3.2特性 3.2.1 函数名与类名相同 3.2.2 无返回值 3.2.3对象实例化时自动调用 3.2.4 构造函数可以重载 3.2.5 默认构造函数的自动生成 3.2.6 默认构造函数对内置类型成员的初始化 3.2.7 默认构造函数的定义 4…

小红书app缓存清除

1.背景 小伙伴们&#xff0c;手机app运行产生的缓存在不断侵占着我们的收集的内存&#xff0c;运行个半年发现内存不足20%。其实很多情况我们通过各个手机自带的缓存清除功能&#xff0c;就可以把app运行过程中产生的内存清除掉&#xff0c;节省我们不少的空间。想一想手机上a…

二分查找的时间复杂度的讲解

二分查找的代码&#xff1a; 二分查找的时间复杂度&#xff1a; 最坏的情况&#xff1a; 就是找不到和查找区间只剩一个值的时候&#xff0c;这两种都是最坏的结果&#xff0c;假设查找了x次&#xff0c;达到了最坏的结果&#xff1a; N代表每一次折半区间数据的个数&#xf…

当你拥有Xbox-GamePass就能更快体验NewGame

如果你有游戏通行证终极通行证&#xff0c;那么你就可以看到很多预售的游戏&#xff0c;以及更多游戏内容。 Shadow of the Tomb Raider: Definitive Edition《古墓丽影:暗影&#xff08;终极版&#xff09;》 征服残酷无情的丛林&#xff0c;并活着走出来。探索充满裂隙和幽深…

I2C,UART,SPI(STM32、51单片机)

目录 基本理论知识&#xff1a; 并行通信/串行通信&#xff1a; 异步通信/同步通信&#xff1a; 半双工通信/全双工通信: UART串口&#xff1a; I2C串口&#xff1a; SPI串口&#xff1a; I2C在单片机中的应用&#xff1a; 软件模拟&#xff1a; 51单片机&#xff1a;…

Linux的进程管理

进程 程序运行在操作系统中&#xff0c;是被操作系统所管理的。 为管理运行的程序&#xff0c;每一个程序在运行的时候&#xff0c;便被操作系统注册为系统中的一个&#xff1a;进程 并会为每一个进程都分配一个独有的&#xff1a;进程ID&#xff08;进程号&#xff09; 查看…