当前位置: 首页 > news >正文

K8S之运用污点、容忍度设置Pod的调度约束

污点、容忍度

  • 污点
  • 容忍度

taints 是键值数据,用在节点上,定义污点;
tolerations 是键值数据,用在pod上,定义容忍度,能容忍哪些污点。

污点

污点是定义在k8s集群的节点上的键值属性数据,可以决定拒绝那些pod。
给了Node选则的主动权,给Node打个污点,不容忍 的Pod就调度不上来。

现象:刚部署好的K8S集群,默认master节点上不会被调度来任何pod。
原因:master节点上有个污点

看 master节点的信息

kubectl describe nodes k8s-master1

在这里插入图片描述

Taints: node-role.kubernetes.io/control-plane:NoSchedule(排斥等级)

查看帮助命令,看如何设置Node的污点(taints是spec字段下的子字段)

kubectl explain node.spec.taints

在这里插入图片描述

解释说明

taints的 effect 字段(必填) 用来定义对pod对象的排斥等级

  • NoSchedule:仅影响pod调度过程,仅对未调度的pod有影响。(例如:这个节点的污点改了,使得之前调度的pod不能容忍了,对现存的pod对象不产生影响)
  • NoExecute:既影响调度过程,又影响现存的pod对象(例如:如果现存的pod不能容忍节点后来加的污点,这个pod就会被驱逐)排斥等级最高
  • PreferNoSchedule:最好不,也可以,是NoSchedule的柔性版本。(例如:pod实在没其他节点调度了,也可以到到这个污点等级的节点上)排斥等级最低

上面看到的 master节点的污点是Noschedule
所以默认创建的pod都不会调度到master上,因为创建的pod没有容忍度

查看部署后master节点上Pod的信息

kubectl describe pods kube-apiserver-k8s-master1 -n kube-system

相关信息的片段
在这里插入图片描述

可以看到这个pod的容忍度是NoExecute,则可以调度到k8s-master1上。
兼容了等级比NoExecute低的污点。

注意:在自建pod里污点等级,必须完全匹配才行

示例1: 使用污点排斥等级是NoSchedule

给k8s-node2打上污点
污点的key为node-type,值为production,排斥等级是NoSchedule

kubectl taint node k8s-node2 node-type=production:NoSchedule

ps. 排斥等级":NoSchedule"必填,否则创建失败

在这里插入图片描述

给k8s-node2打污点后,pod如果不能容忍就不会调度过来
创建pod资源文件

vim taint-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: taint-podnamespace: defaultlabels:tomcat:  tomcat-pod
spec:containers:- name:  taint-podports:- containerPort: 8080image: tomcat:8.5-jre8-alpine
imagePullPolicy: IfNotPresent 

创建pod资源

kubectl apply -f taint-pod.yaml

查看pod

kubectl get pods -o wide

在这里插入图片描述

可以看到被调度到k8s-node1上了,因为k8s-node2这个节点打了污点,而在创建pod的时候没有容忍度,所以k8s-node2上不会有pod调度上去的

示例2 :使用污点类型是NoExecute

在示例1的基础上,给刚刚的k8s-node1打污点

kubectl taint node k8s-node1 node-type=dev:NoExecute

查看pod

kubectl get pods -o wide

在这里插入图片描述
上面可以看到已经存在的pod节点都被撵走了

只看节点的污点

kubectl describe node k8s-node1|grep Taints

在这里插入图片描述
ps. 删除污点的方式

kubectl taint nodes k8s-node2 node-type-

在这里插入图片描述

容忍度

重新给node1打上污点,保证2个工作节点node上都打了污点。通过配置Pod的容忍度完成调度

查看帮助命令,看如何设置Pod的容忍度(tolerations是spec字段下的子字段)

kubectl explain pod.spec.tolerations

重点部分截图:
在这里插入图片描述

解释说明

  • effect:用来匹配node的污点等级
  • key:node标签的键
  • operator:匹配表达式
  • value:node标签的值
  • tolerationSeconds:与NoExecute搭配使用表示驱逐时间

tolerations 中的 effect 字段 用来匹配污点等级

  • NoExecute
  • NoSchedule
  • PreferNoSchedule

示例1 创建pod时,指定具体可容忍的node的特征

创建pod资源文件

vim vim pod-demo-1.yaml 
apiVersion: v1
kind: Pod
metadata:name: myapp-deploynamespace: default
spec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80tolerations:  # 设置Pod的容忍度- key: "node-type"   # node标签的键operator: "Equal"  # 匹配方式为等值匹配value: "production" # node标签的值effect: "NoExecute" # node的污点等级tolerationSeconds: 3600 # 与NoExecute搭配使用表示驱逐时间

创建pod资源

kubectl apply -f pod-demo-1.yaml

查看pod

kubectl get pods -o wide

在这里插入图片描述

还是显示pending,因使用的是equal(等值匹配),所以 key、value和effect 必须和 node 节点定义的污点完全匹配才可以。
把上面yaml文件调整一下:
1、配置effect: “NoExecute"变成"NoSchedule”
2、去掉tolerationSeconds

apiVersion: v1
kind: Pod
metadata:name: myapp-deploynamespace: default
spec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80tolerations:  - key: "node-type"   operator: "Equal"  value: "production" effect: "NoSchedule"  

重建pod资源

kubectl delete -f pod-demo-1.yamlkubectl apply -f pod-demo-1.yaml

查看pod

kubectl get pods -o wide

在这里插入图片描述

上面就可以调度到k8s-node2上了,因为在pod中定义的容忍度能容忍node节点上的污点

示例2:使用非精准容忍度匹配

再调整 pod-demo-1.yaml 的部分配置

apiVersion: v1
kind: Pod
metadata:name: myapp-deploynamespace: default
spec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80tolerations:  - key: "node-type"   operator: "Exists"    # 调整了匹配方式value: ""             # 去掉了node的污点值effect: "NoSchedule"  # 匹配的等级

只要对应的键是存在的,exists,其值被自动定义成通配符

重建pod资源

kubectl delete -f pod-demo-1.yamlkubectl apply -f pod-demo-1.yaml

查看pod

kubectl get pods -o wide

在这里插入图片描述

发现还是调度到k8s-node2上

再次修改

apiVersion: v1
kind: Pod
metadata:name: myapp-deploynamespace: default
spec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80tolerations:  - key: "node-type"   operator: "Exists"  # 调整了匹配方式value: ""           # 去掉了值effect: ""          # 去掉node的污点等级

有一个node-type的键,不管值是什么,不管是什么污点等级,都能容忍

重建pod资源

kubectl delete -f pod-demo-1.yamlkubectl apply -f pod-demo-1.yaml

查看pod

kubectl get pods -o wide

可以看到k8s-node2和k8s-node1节点上都有可能有pod被调度
在这里插入图片描述
在这里插入图片描述

相关文章:

K8S之运用污点、容忍度设置Pod的调度约束

污点、容忍度 污点容忍度 taints 是键值数据,用在节点上,定义污点; tolerations 是键值数据,用在pod上,定义容忍度,能容忍哪些污点。 污点 污点是定义在k8s集群的节点上的键值属性数据,可以决…...

Sora爆火,普通人的10个赚钱机会

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…...

【C++】C++入门—初识构造函数 , 析构函数,拷贝构造函数,赋值运算符重载

C入门 六个默认成员函数1 构造函数语法特性 2 析构函数语法特性 3 拷贝构造函数特性 4 赋值运算符重载运算符重载赋值运算符重载特例:前置 与 后置前置:返回1之后的结果后置: Thanks♪(・ω・)ノ谢谢阅读&…...

沁恒CH32V30X学习笔记04--外部中断

外部中断 CH32V2x 和 CH32V3x 系列内置可编程快速中断控制器(PFIC– Programmable Fast Interrupt Controller),最多支持 255 个中断向量。当前系统管理了 88 个外设中断通道和 8 个内核中断通道 PFIC 控制器 88个外设中断,每个中断请求都有独立的触发和屏蔽控制位,有专…...

基础IO[三]

close关闭之后文件内部没有数据, stdout和stderr 他们一起重定向,只会重定向号文件描述符,因为一号和二号描述符虽然都是sydout,但是并不一样,而是相当于一个显示器被打开了2次。 分别重定向到2个文件的写法和直接写道…...

Leetcode 392 判断子序列

题意理解: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde&quo…...

基于微信小程序的校园跑腿系统的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…...

力扣 第 124 场双周赛 解题报告 | 珂学家 | 非常规区间合并

前言 整体评价 T4的dp解法没想到,走了一条"不归路", 这个区间合并解很特殊,它是带状态的,而且最终的正解也是基于WA的case,慢慢理清的。 真心不容易,太难了。 T1. 相同分数的最大操作数目 I 思路: 模拟 c…...

2024年华为OD机试真题-生成哈夫曼树-Java-OD统一考试(C卷)

题目描述: 给定长度为n的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。 为了保证输出的二叉树中序遍历结果统一,增加以下限制:二叉树节点中,左节点权…...

【实战】二、Jest难点进阶(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(六)

文章目录 一、Jest 前端自动化测试框架基础入门二、Jest难点进阶2.mock 深入学习 学习内容来源:Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程,我在学习开始时(2023.08)采用的是当前最新版本: 项版本babel/co…...

(一)【Jmeter】JDK及Jmeter的安装部署及简单配置

JDK的安装和环境变量配置 对于Linux、Mac和Windows系统,JDK的安装和环境变量配置方法略有不同。以下是针对这三种系统的详细步骤: 对于Linux系统: 下载适合Linux系统的JDK安装包,可以选择32位或64位的版本。 将JDK的安装包放置在服务器下,创建一个新的文件夹来存储JDK,…...

HAL/LL/STD STM32 U8g2库 +I2C SSD1306/sh1106 WouoUI磁贴案例

HAL/LL/STD STM32 U8g2库 I2C SSD1306/sh1106 WouoUI磁贴案例 📍基于STM32F103C8T6 LL库驱动版本:https://gitee.com/chcsx/platform-test/tree/master/MDK-ARM🎬视频演示: WouoUI移植磁贴案例,新增确认弹窗 &#x1f…...

手机如何改自己的ip地址

在现如今的数码时代,手机已经成为人们生活中不可或缺的一部分。然而,有时候我们可能需要改变手机的IP地址来实现一些特定的需求。本文将向大家介绍如何改变手机的IP地址,帮助大家更好地应对各种网络问题。 更改手机IP地址的原因:…...

ajax函数库axios基本使用

ajax函数库Axios基本使用 简介&#xff1a;Axios 对原生的Ajax进行了封装&#xff0c;简化书写&#xff0c;快速开发。 官网&#xff1a;https://www.axios-http.cn/ Axios使用步骤 引入Axios的js文件(参考官网)使用Axios发送请求,获取相应结果 <script src"https:…...

【nginx实践连载-4】彻底卸载Nginx(Ubuntu)

步骤1&#xff1a;停止Nginx服务 打开终端&#xff08;Terminal&#xff09;。停止Nginx服务&#xff1a;sudo systemctl stop nginx步骤2&#xff1a;卸载Nginx软件包 运行以下命令卸载Nginx软件包&#xff1a;sudo apt purge nginx nginx-common nginx-core步骤3&#xff1…...

究极小白如何自己搭建一个自动发卡网站-独角数卡

首页 | 十画IOSID​shihuaid.cn/​编辑 如果你也是跟我一样,什么都不懂,也想要搭建一个自己的自动发卡网站,可以参考一下我的步骤,不难,主要就是细心,一步步来一定成功!! 独角数卡: 举个例子:独角数卡就是一个店面,而且里面帮你装修好了,而你要做的就是把开店之…...

Java_方法(重载方法签名等详解)

在之前我们学习C语言时&#xff0c;当我们想要重复使用某段代码的功能时&#xff0c;我们会将这段代码定义为一个函数&#xff0c;而在java中我们把这段重复使用的代码叫做方法。 方法的定义 类体的内容分为变量的声明和方法的定义&#xff0c;方法的定义包括两部分&#xff1…...

VQ35 评论替换和去除(char_length()和replace函数的使用)

代码 select id ,replace(comment,&#xff0c;,) as comment from comment_detail where char_length(comment)>3知识点 要注意替换的是中文逗号 由于题目说的是汉字长度大于3&#xff0c;所以这里就要使用char_length()而不是length() char_length()&#xff1a;单位为字…...

【MySQL】学习多表查询和笛卡尔积

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...