云原生之Kubernetes:24、污点和容忍度详解
文章目录
- 前言
- 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、污点和容忍度详解相关推荐
- Kubernetes 调度 - 污点和容忍度详解
当我们使用节点亲和力(Pod 的一个属性)时,它会将Pod吸引到一组节点(作为偏好或硬性要求).污点的行为完全相反,它们允许一个节点排斥一组 Pod. 在 Kubernetes 中,您可以标记(污染) ...
- 【云原生之k8s】k8s管理工具kubectl详解
[云原生之k8s]k8s管理工具kubectl详解 前言 一.陈述式管理 (1)陈述式资源管理方法 (2)k8s相关信息查看 ①查看版本信息 ②查看节点信息 ③查看资源对象简写 ④查看集群信息 ⑤配置 ...
- kubernetes 【调度和驱逐】【1】污点和容忍度
kubernetes 学习污点和容忍度 tags: 策略 文章目录 kubernetes 学习污点和容忍度 1. 概念 2. 示例 3. 基于污点的驱逐 4. 基于节点状态添加污点 1. 概念 节点亲 ...
- Kubernetes 笔记(08)— Daemonset 产生缘由、yaml 描述、使用方法、污点和容忍度的定义及使用、静态 Pod
DaemonSet,它会在 Kubernetes 集群的每个节点上都运行一个 Pod,就好像是 Linux 系统里的"守护进程"(Daemon). 1. 产生缘由 Deployme ...
- 【云原生】Kubernetes集群升级
[云原生]Kubernetes集群升级指南 前言 一.集群升级过程辅助命令 二.升级master节点 2.1.升级kubeadm. 2.2.验证升级计划 2.3.master节点升级 三.升级node ...
- 《Kubernetes知识篇:Kubernetes污点和容忍度》
文章目录 一.简介 二.pod对象的排斥等级 三.污点且无容忍度 3.1.污点之排斥等级NoSchedule 3.2.污点之排斥等级NoExecute 3.3.污点之排斥等级PreferNoSched ...
- 【云原生之kubernetes实战】在k8s环境下部署Snipe-IT固定资产管理平台
[云原生之kubernetes实战]在k8s环境下部署Snipe-IT固定资产管理平台 一.Snipe-IT介绍 二.检查本地k8s环境 1.检查工作节点状态 2.检查系统pod状态 3.检查kube ...
- 【云原生】Kubernetes CRD 详解(Custom Resource Definition)
文章目录 一.概述 二.定制资源 1)定制资源 和 定制控制器 2)定制控制器 3)Operator 介绍 1.Operator Framework 2.Operator 安装 3.安装 Operat ...
- 【云原生之kubernetes实战】在k8s环境下部署OneNav个人书签工具
[云原生之kubernetes实战]在k8s环境下部署OneNav个人书签工具 一.OneNav介绍 1.OneNav简介 2.OneNav特点 二.检查本地k8s环境 1.检查工作节点状态 2.检查 ...
最新文章
- 【面试系列】6种单例模式(Singleton)实现方法比较
- Tomcat下的work目录
- 中国地质大学c语言程序设计答案,2016年中国地质大学(北京)信息工程学院C语言程序设计(同等学力加试)考研复试题库...
- 中国企业云计算应用现状及需求
- SAP UI5 初学者教程之十四 - 嵌入视图的使用方式试读版
- php mail 在线,在线web e-mail发送
- HashMap中的hash算法的几个思考
- 2018年三月份计算机一级考试试题,2018年3月计算机一级考试MSOFFICE模拟试题(4)
- 计算机图形学E9——裁剪——固定矩形窗口裁剪多边形(凸多边形/凹多边形)
- 【转】斐波那契数列算法分析
- APICloud可视化编程
- Vue----ele-admin1
- 先有鸡还是先有蛋?应用程序开发与安全
- 项目记录——ANSYS Fluent入门翼型风洞模型计算
- Mac 苹果系统没有WIFI选项自检出现-1005D
- 哪些数学特征可以用来描述一组数据
- springBoot员工管理系统
- ESXI-vCenter-NSX-系统虚拟化
- 大数据时代,揭露个人数据泄漏和秘密跟踪内幕
- 施工部署主要不包括_施工部署包括哪些?