文章目录

  • 前言
  • 1、概念引入
  • 2、污点和容忍度配置
  • 3、该如何配置?
  • 4、内置污点
  • 5、常用命令补充
  • 6、实战:Taints and Tolerations

前言

Taint(污点)和Toleration(容忍度)可以作用于node和pod上,其目的是优化pod在集群间的调度,这跟节点亲和性类似;

只不过它们作用的方式相反,其用作确保pod不会被调度在指定的节点上。

1、概念引入


如图所示,node节点上分别有云、五角星、十字架这三个不同组合的污点;Pod-A上有云和五角星的污点容忍度,Pod—B上则没有容忍度。

最终调度结果为:

1、Pod-A:调度至node-1和node-3
2、Pod-B:只会调度至node-3

注意:Taints(污点)存在于node,Tolerations(容忍度)存在于pod

2、污点和容忍度配置

污点的容忍度配置主要有三个字段:key、value和effect,其中:

1、key:表示字段名,如图形
2、value:表示字段值,如云、五角星、十字架
3、effect:表示调度规则,其又细分:Noschedule、PreferNoSchedule和NoExecute三种

具体描述可参考下面的表格:

参数 描述
key string类型,最大长度253个字符,必须小写或数字开头
value string类型,最大长度63个字符,必须小写或数字开头
effect:Noschedule 1.不允许非法pod调度上来。2.taints变更后,不会驱离非法的pod
effect:PreferNoSchedule 1.最好不要把非法pod调度上来。2.taints变更后,不会驱离非法的pod
effect:NoExecute 1.不允许非法pod调度上来。2.taints变更后,会驱离非法的pod,驱离时间为tolerationSeconds

3、该如何配置?

就如我上面所说,无论是Taints还是Tolerations(污点和容忍度),都有三个字段:key、value和effect,那么他们是如何匹配工作的呢?

此时会用到一个判断控制器operator,具体匹配规则如下:

operator 描述
Equal (默认) key、value和effect必须都相同
Exists key和effect必须相同

需要注意operator没指定的话,默认是Equal。

另外,这里还有两个特殊用法:

tolerations:
- operator: "Exists"

1、Exists:空字段key,会匹配所有的keys, values and effects,意味着容忍所有

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

2、Exists:空effect,会匹配所有的键为"key"的effect

4、内置污点

从K8S1.6开始支持了很多封装好的驱离式effect,node controller会根据实际情况,自动给node节点打上对应污点,保证了Pod调度的合理性和安全性,从而对生产环境保驾护航。

具体如下所示:

taint effect 描述
node.kubernetes.io/not-ready 节点未就绪
node.kubernetes.io/unreachable 节点不可达
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 节点未初始化,不可用

试想一下,如果没有这些内置的effect帮助会怎么样呢?

如果节点还未就绪,就有pod调度上来,又比如节点的硬盘资源已经满了,pod再调度上来?等等;
这是不是很不合理,也很可怕呢?

5、常用命令补充

命令 说明
kubectl taint -h taint的帮助命令
kubectl taint nodes foo dedicated=special-user:NoSchedule 给node打污点,修改时需要使用–overwrite=true进行覆盖
kubectl taint nodes foo dedicated:NoSchedule- 移除taint污点

6、实战:Taints and Tolerations

1、首先给centos-3这个节点打上污点,其key=department,value=ops,effect=NoSchedule

kubectl taint nodes centos-3.shared department=ops:NoSchedule

NoSchedule的策略:
1、不允许非法pod调度上来。
2、taints变更后,不会驱离非法的pod。

2、接着,我们编辑filebeat-ds,并apply

注意:这时候的ds应该不会调度至我们打了污点的centos-3.shared节点上。
apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeat-dslabels:app: filebeat
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: filebeatimage:  prima/filebeat:6.4.2env:- name: REDIS_HOSTvalue: db.ikubernetes.is:6379- name: LOG_LEVELvalue: info

3、发现ds并没有部署到centos-3节点,污点配置生效,且和预期一致

[root@centos-1]# kubectl get pod -o wide
NAME                     READY   STATUS              RESTARTS   AGE    IP           NODE              NOMINATED NODE   READINESS GATES
filebeat-ds-tg7gf        0/1     ContainerCreating   0          3m2s   <none>       centos-2.shared   <none>           <none>

4、接着,我们delete之前的yaml,重新编辑file-ds-tolerations.yaml(增加相关容忍度,希望能容忍centos-3.shared节点的污点),并apply

apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeat-dslabels:app: filebeat
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: filebeatimage:  prima/filebeat:6.4.2env:- name: REDIS_HOSTvalue: test.db:6379- name: LOG_LEVELvalue: infotolerations:- key: "department"operator: "Equal"value: "ops"effect: "NoSchedule"

5、观察pod,发现centos-3.shared已经运行pod,新增的容忍度功能成功

[root@centos-1]# kubectl get pod -o wide
NAME                     READY   STATUS              RESTARTS   AGE     IP           NODE              NOMINATED NODE   READINESS GATES
filebeat-ds-l2png        0/1     ContainerCreating   0          2m43s   <none>       centos-2.shared   <none>           <none>
filebeat-ds-qq2nc        0/1     ContainerCreating   0          2m43s   <none>       centos-3.shared   <none>           <none>

6、接下来我们修改node3污点,测试Noschedule策略是否如期一致,是否会在taints变更后,不会驱离非法的pod?

kubectl taint nodes centos-3.shared department=test:NoSchedule --overwrite=true

7、我们发现pod还是在运行,并不会驱离,和预期一致

[root@centos-1]# kubectl get pod -o wide
NAME                     READY   STATUS              RESTARTS   AGE     IP           NODE              NOMINATED NODE   READINESS GATES
filebeat-ds-l2png        0/1     ContainerCreating   0          5m18s   <none>       centos-2.shared   <none>           <none>
filebeat-ds-qq2nc        0/1     ContainerCreating   0          5m18s   <none>       centos-3.shared   <none>           <none>

8、最后,我们将node3的污点effect修改为NoExecute,观察pod是否被驱离

如果没指定tolerationSeconds,就会马上驱离
kubectl taint nodes centos-3.shared department=test:NoExecute --overwrite=true

9、发现centos-3.shared上已经没有pod了,和预期一致

[root@centos-1]# kubectl get pod -o wide
NAME                     READY   STATUS             RESTARTS   AGE     IP           NODE              NOMINATED NODE   READINESS GATES
filebeat-ds-l2png        0/1     ImagePullBackOff   0          7m37s   10.244.1.7   centos-2.shared   <none>           <none>

云原生之Kubernetes:24、污点和容忍度详解相关推荐

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

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

  2. 【云原生之k8s】k8s管理工具kubectl详解

    [云原生之k8s]k8s管理工具kubectl详解 前言 一.陈述式管理 (1)陈述式资源管理方法 (2)k8s相关信息查看 ①查看版本信息 ②查看节点信息 ③查看资源对象简写 ④查看集群信息 ⑤配置 ...

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

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

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

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

  5. 【云原生】Kubernetes集群升级

    [云原生]Kubernetes集群升级指南 前言 一.集群升级过程辅助命令 二.升级master节点 2.1.升级kubeadm. 2.2.验证升级计划 2.3.master节点升级 三.升级node ...

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

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

  7. 【云原生之kubernetes实战】在k8s环境下部署Snipe-IT固定资产管理平台

    [云原生之kubernetes实战]在k8s环境下部署Snipe-IT固定资产管理平台 一.Snipe-IT介绍 二.检查本地k8s环境 1.检查工作节点状态 2.检查系统pod状态 3.检查kube ...

  8. 【云原生】Kubernetes CRD 详解(Custom Resource Definition)

    文章目录 一.概述 二.定制资源 1)定制资源 和 定制控制器 2)定制控制器 3)Operator 介绍 1.Operator Framework 2.Operator 安装 3.安装 Operat ...

  9. 【云原生之kubernetes实战】在k8s环境下部署OneNav个人书签工具

    [云原生之kubernetes实战]在k8s环境下部署OneNav个人书签工具 一.OneNav介绍 1.OneNav简介 2.OneNav特点 二.检查本地k8s环境 1.检查工作节点状态 2.检查 ...

最新文章

  1. 【面试系列】6种单例模式(Singleton)实现方法比较
  2. Tomcat下的work目录
  3. 中国地质大学c语言程序设计答案,2016年中国地质大学(北京)信息工程学院C语言程序设计(同等学力加试)考研复试题库...
  4. 中国企业云计算应用现状及需求
  5. SAP UI5 初学者教程之十四 - 嵌入视图的使用方式试读版
  6. php mail 在线,在线web e-mail发送
  7. HashMap中的hash算法的几个思考
  8. 2018年三月份计算机一级考试试题,2018年3月计算机一级考试MSOFFICE模拟试题(4)
  9. 计算机图形学E9——裁剪——固定矩形窗口裁剪多边形(凸多边形/凹多边形)
  10. 【转】斐波那契数列算法分析
  11. APICloud可视化编程
  12. Vue----ele-admin1
  13. 先有鸡还是先有蛋?应用程序开发与安全
  14. 项目记录——ANSYS Fluent入门翼型风洞模型计算
  15. Mac 苹果系统没有WIFI选项自检出现-1005D
  16. 哪些数学特征可以用来描述一组数据
  17. springBoot员工管理系统
  18. ESXI-vCenter-NSX-系统虚拟化
  19. 大数据时代,揭露个人数据泄漏和秘密跟踪内幕
  20. 施工部署主要不包括_施工部署包括哪些?

热门文章

  1. 按键控制LED亮灭(CC2530)
  2. 厉建宇的阿里巴巴离职信
  3. 打印机计算机名称怎么看,打印机名称在哪里找
  4. 两个div右侧固定,左侧自适应屏幕
  5. 发热内衣的优势在哪里
  6. 解决内存占用比应用进程占用高的问题
  7. 宿舍路由器设置傻瓜教程
  8. V4L2框架-视频流的停止(VIDIOC_STREAMOFF)
  9. 线上故障等级和处理规范,看阿里测试工程师如何拿捏
  10. 您所说的话:您如何与Bacn打交道