文章目录

  • 一、污点和容忍度介绍
    • 1、显示污点信息
    • 2、显示容忍度信息
    • 3、污点因子
  • 二、污点应用
  • 三、污点容忍度应用

上一章节介绍了,pod的调度方式有选择器、节点亲和性、pod亲和性和反亲和性,本章节继续介绍pod的其他调度方式:污点和容忍度。

一、污点和容忍度介绍

污点是相对于节点说的,一旦给某个节点上打了污点了标签,pod调度时就会阻止pod调度在该节点上,如果pod设置了容忍这个节点的污点的话,pod也可以调度在有污点的节点上。

1、显示污点信息

在集群上部署pod时经常发现,pod一般被调度在各个子节点上进行部署的,没有被调度在master主节点上,正是因为master主节点上打了污点标签,所以一般pod不会调度在主节点上的。通过如下命令可以查看master主节点的污点信息

kubectl describe node k8s-master01  #其中k8s-master01为主节点名

执行完上述命令后,会发现如下

图中表示有一个污点Taints: node-role.kubernetes.io/master:NoSchedule,Taints表示污点,污点标签为 node-role.kubernetes.io/master,污点的value值为空,NoSchedule为影响因子。
污点一般是由一个key、value,以及一个effect组成,表现为 =:。
图中显示污点将阻止pod调度到主节点上,除非有pod能容忍这个污点。

2、显示容忍度信息

尽管主节点设置了污点,但还是有些系统的pod调度在了主节点上,那是因为这些系统pod设置了容忍度,可以容忍主节点的污点。首先查看系统的pod,

[root@k8s-master01 affinity_work]# kubectl get pod -o wide -n kube-system
NAME                                   READY   STATUS             RESTARTS   AGE    IP                NODE           NOMINATED NODE   READINESS GATES
etcd-k8s-master01                      1/1     Running            15         124d   192.168.137.100   k8s-master01   <none>           <none>
kube-apiserver-k8s-master01            1/1     Running            16         124d   192.168.137.100   k8s-master01   <none>           <none>
kube-controller-manager-k8s-master01   1/1     Running            17         124d   192.168.137.100   k8s-master01   <none>           <none>
kube-flannel-ds-amd64-2hb24            1/1     Running            6          123d   192.168.137.20    k8s-node02     <none>           <none>
kube-flannel-ds-amd64-5cb5g            1/1     Running            18         123d   192.168.137.100   k8s-master01   <none>           <none>
kube-flannel-ds-amd64-hr4w9            1/1     Running            6          123d   192.168.137.10    k8s-node01     <none>           <none>
kube-proxy-5tqnc                       1/1     Running            6          123d   192.168.137.10    k8s-node01     <none>           <none>
kube-proxy-959qc                       1/1     Running            16         124d   192.168.137.100   k8s-master01   <none>           <none>
kube-proxy-rqmfm                       1/1     Running            6          123d   192.168.137.20    k8s-node02     <none>           <none>
kube-scheduler-k8s-master01            1/1     Running            15         124d   192.168.137.100   k8s-master01   <none>           <none>

如上所示,发现有些系统pod是调度在了master主节点上的,以最下面的kube-scheduler-k8s-master01为例,查看该节点的容忍度信息,执行命令

kubectl describe pod kube-scheduler-k8s-master01 -n kube-system

发现如下信息

从图中显示可知,该pod设置了Tolerations: :NoExecute容忍度信息,所以该pod可以调度在master主节点上。

3、污点因子

从前面可知,master主节点用的污点因子为NoSchedule,表示pod没有容忍污点就不允许调度在master主节点上,污点因子除了NoSchedule外,还有PreferNoSchedule和NoExecute因子。

  • NoSchedule:表示如果pod没有容忍这些污点,Pod则不能调度到包含这些污点的节点上;
  • PreferNoSchedule:是 NoSchedule的一个宽松版本,表示尽量阻止pod被调度在PreferNoSchedule污点类型的节点上,但是如果没有其他节点可以调度,pod依然会被调度在该类型的节点上。
  • NoExecute:NoExecute不同于NoSchedule和PreferNoSchedule,后两者只在调度期间起作用,而NoExecute也会影响正在节点上运行着的pod。如果在一个节点上添加了NoExecut类型污点,哪些在该节点上运行着的pod,如果没有容忍这个NoExecute污点,将会从这个节点中去除。

二、污点应用

集群包含一个主节点k8s-master02和两个子节点,分别为k8s-node01和k8s-node02,现在在k8s-node01节点上打一个污点,pod调度时没有设置容忍度会全部调度在k8s-node02节点的

 kubectl taint node k8s-node01 prod=dev:NoSchedule

在k8s-node01节点打的污点标签为prod=dev,污点因子设置的为NoSchedule,表示如果pod不能容忍prod=dev污点就不会调度在k8s-node01节点上,如下所示,pod全部调度在了k8s-node02节点上。

[root@k8s-master01 affinity_work]# kubectl get pod -o wide
NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
taint-replica-849hz   1/1     Running   0          36s   10.244.2.175   k8s-node02   <none>           <none>
taint-replica-9472b   1/1     Running   0          36s   10.244.2.176   k8s-node02   <none>           <none>
taint-replica-s62zl   1/1     Running   0          36s   10.244.2.174   k8s-node02   <none>           <none>

三、污点容忍度应用

上面案例在k8s-node01设置了prod=dev的污点,类型为NoSchedule,下面部署pod时设置pod可以容忍该污点,pod就可以调度到k8s-node01节点上了

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:name: taint-replica
spec:replicas: 3selector:matchLabels:app: busyboxtemplate:metadata:labels:app: busyboxspec:containers:- name: busyboximage: busyboxcommand: ["sh", "-c", "sleep 3600"]imagePullPolicy: IfNotPresenttolerations:   #设置pod的容忍度,可以忍受带prod=dev的污点节点,类型为NoSchedule- key: prodoperator: Equalvalue: deveffect: NoSchedule

通过该yaml文件创建replicaset后,发现pod可以调度在了k8s-node01上

[root@k8s-master01 affinity_work]# kubectl get pod -o wide
NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
taint-replica-7k9rn   1/1     Running   0          6s    10.244.2.178   k8s-node02   <none>           <none>
taint-replica-pmb9s   1/1     Running   0          6s    10.244.2.177   k8s-node02   <none>           <none>
taint-replica-rhzdx   1/1     Running   0          6s    10.244.1.193   k8s-node01   <none>           <none>

注意:本案例operator设置的为Equal,即key=value,表示污点的标签要等于污点value值。operator还可以取值Exists,此时会忽略values值,表示只要节点存在key就满足容忍条件,pod可以调度在污点所在标签上。


污点的容忍度还有如下应用案例总结:

1.只要节点存在标签prod,不管标签的value值如何,影响作用为NoExecute的节点,pod都可以容忍

      tolerations:- key: prodoperator: Existseffect: NoExecute

2.当不指定effect时,表示容忍所有污点的作用,如下,凡是节点上有标签prod,不管容忍因子是什么否可以忍受,即可以同时忍受NoSchedule、PreferNoSchedule、NoExecute作用。

  tolerations:- key: prodoperator: Exists

3.当不指定key,只定义operator,如下所示,表示只要存在污点的节点,无论容忍因子是什么,pod都可以在该节点上调度(如下定义,pod也可以调度到master节点上)

  tolerations:- operator: Exists

4.多个master存在时,防止资源浪费,可如下设置,表示node无资源时可以调度到master节点

kubectl taint nodes k8s-master01 prod=uat:PreferNoSchedule

5.定义pod时如果设置了tolerationSeconds,表示该pod被删除之前可以运行多长时间。比如pod正在某节点,一旦该节点打上了污点,并且容忍因子为NoExecute,则就会删除运行在该节点上的pod(除非pod设置了容忍NoExecute),如果设置了tolerationSeconds=60,表示pod在被删除前允许运行60s。

  tolerations:- key: prodoperator: Equalvalue: deveffect: NoscheduletolerationSeconds: 60

3.11 污点和容忍度相关推荐

  1. Kubernetes 调度 - 污点和容忍度详解

    当我们使用节点亲和力(Pod 的一个属性)时,它会将Pod吸引到一组节点(作为偏好或硬性要求).污点的行为完全相反,它们允许一个节点排斥一组 Pod. 在 Kubernetes 中,您可以标记(污染) ...

  2. K8S 污点和容忍度

    污点和容忍度 节点亲和性(详见这里) 是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点. 这可能出于一种偏好,也可能是硬性要求. Taint(污点)则相反,它使节点能够排斥一类特定的 Po ...

  3. Pod 污点和容忍度

    Pod 污点和容忍度 给了节点选则的主动权,我们给节点打一个污点,不容忍的pod就运行不上来,污点就是定义在节点上的键值属性数据,可以定决定拒绝那些pod: taints是键值数据,用在节点上,定义污 ...

  4. 《Kubernetes知识篇:Kubernetes污点和容忍度》

    文章目录 一.简介 二.pod对象的排斥等级 三.污点且无容忍度 3.1.污点之排斥等级NoSchedule 3.2.污点之排斥等级NoExecute 3.3.污点之排斥等级PreferNoSched ...

  5. 云原生之Kubernetes:24、污点和容忍度详解

    文章目录 前言 1.概念引入 2.污点和容忍度配置 3.该如何配置? 4.内置污点 5.常用命令补充 6.实战:Taints and Tolerations 前言 Taint(污点)和Tolerati ...

  6. kubernetes 【调度和驱逐】【1】污点和容忍度

    kubernetes 学习污点和容忍度 tags: 策略 文章目录 kubernetes 学习污点和容忍度 1. 概念 2. 示例 3. 基于污点的驱逐 4. 基于节点状态添加污点 1. 概念 节点亲 ...

  7. 图解 K8S(06):调度利器之污点与容忍度(压力驱逐)

    本系列教程目录(已发布): 图解 K8S(01):基于ubuntu 部署最新版 k8s 集群 图解 K8S(02):认识 K8S 中的资源对象 图解 K8S(03):从 Pause 容器理解 Pod ...

  8. Kubernetes 笔记(08)— Daemonset 产生缘由、yaml 描述、使用方法、污点和容忍度的定义及使用、静态 Pod

    DaemonSet,它会在 Kubernetes 集群的每个节点上都运行一个 Pod,就好像是 Linux 系统里的"守护进程"(Daemon). 1. 产生缘由 Deployme ...

  9. k8s污点容忍度概念介绍

    1. 概念介绍 污点(Taint) 应用于node身上,表示该节点有污点了,如果不能忍受这个污点的pod,你就不要调度/运行到这个节点上.如果是不能运行到这个节点上,那就是污点驱逐了. 容忍度(Tol ...

最新文章

  1. wpf在presenter(VM)中异步更新viewer中数据
  2. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(3)
  3. jupyter notebook上完美运行tensorflow、keras
  4. spring jdbcTemplate使用queryForList示例
  5. Android --修改arr文件
  6. java的iterator接口_java Iterator接口和LIstIterator接口分析_java_脚本之家
  7. 总结!进入libvirt的虚拟化世界(一)得到libvirt的连接
  8. 我是一个硬盘(开始以为是一个笑话,看到最后会发 ...
  9. Leetcode每日一题:136.single-number(只出现一次的数字)
  10. mc有什么红石机器人_我的世界:MC黑科技!毁图仅需一秒 红石机器人真能移动!...
  11. drool-6.5的自学demo
  12. ASC转换BCD,ASC2BCD
  13. 圆点横线圆点 html,目录的点怎么打(目录中小圆点横线上的点要一个个打上去?)...
  14. 【差分约束 模板题】 洛谷P5960(未完待续)
  15. 玩转直播:如何从 0 到 1 构建简单直播系统
  16. 宿舍路由器设置傻瓜教程
  17. PATC语言1-50
  18. 病案系统实施-基本知识-持续更新
  19. 坐月子 请月嫂吗?如何请月嫂?
  20. 关键字super的含义及应用

热门文章

  1. vue el-table 表格宽度无法缩小自适应
  2. spack file hierarchy system
  3. 一个人运营公众号,像是一场马拉松
  4. 十个Python图像处理工具,不可不知!
  5. 《论文阅读》Knowledge-Enriched Transformer for Emotion Detection in Textual Conversations
  6. LTE语音业务-VOLTE(一)
  7. Mybatis操作Oracle中的Clob和Blob字段
  8. c语言统计n个正整数中每个数出现的次数,C语言怎么统计每个数出现的个数
  9. 对camera的计划
  10. 计算机老师能叫少儿编程,少儿编程教师适合哪些人做?需要具备什么能力?