kubernetes中Pod调度-Taints污点和污点容忍

devtools/2024/11/15 4:42:49/

一、污点的概念

        所谓的污点,是给k8s集群中的节点设置的,通过设置污点,来规划资源创建是所在的节点

污点的类型 解释说明
PreferNoshedule

节点设置这个污点类型后;

表示,该节点接收调度,但是会降低调度的概率

NoSheule表示,该节点不接收新的调度,以前有的资源,也依然存在
NoExecute表示,不接收信息的调度,驱逐以前的资源调度

根据节点设置污点

二、污点的管理

1、查看污点

查看过滤数据的前后两行

[root@master deployment-demo]# kubectl describe nodes | grep -i taint -A 2 -B 2
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Fri, 29 Mar 2024 16:03:58 +0800
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false
Lease:
--
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Fri, 29 Mar 2024 16:09:38 +0800
Taints:             <none>
Unschedulable:      false
Lease:
--
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Fri, 29 Mar 2024 16:39:55 +0800
Taints:             <none>
Unschedulable:      false
Lease:
 

2、创建污点

2.1 创建资源

[root@master deployment-demo]# cat taint.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: taint-demo
spec:
  replicas: 5
  selector:
    matchLabels:
      k8s: dolphin
  template:
    metadata:
      name: pod01
      labels:
        k8s: dolphin
    spec:
      containers:
      - name: c1
        image: nginx
        ports:
        - containerPort: 80

[root@master deployment-demo]# kubectl apply -f taint.yaml 
deployment.apps/taint-demo created
 

我们可以看到资源是随机分布的

2.2 创建污点 

创建污点有两种方式:

  •         第一种:key=value:污点类型
  •         第二种:key:污点类型

创建污点

[root@master deployment-demo]# kubectl taint node node1 dolphin:NoExecute

查看状态,全都被驱离到node2节点上了

2.3 删除污点

[root@master deployment-demo]# kubectl taint node node1 dolphin:NoExecute-
node/node1 untainted

我们看到删除pod,node1节点又能重新分配pod资源了

2.4 修改污点

[root@master deployment-demo]#  kubectl taint node node1 dolphin:NoExecute
[root@master deployment-demo]#  kubectl taint node node1 dolphin2=123:NoExecute --overwrite
node/node1 modified

3、 污点容忍tolerations

3.1 污点容忍的概念

        通过上文,我们知道可以通过给k8s集群节点设置不同类型的“污点”,来控制资源创建的节点范围;

        那么,k8s也同时提供了“污点容忍”,就是即便你的节点设置了“污点”,我的资源也可以创建在这个节点上的能力;

        假设:一个节点上有两个污点,但是你创建pod的时候,还想在这个节点上创建,那么你就需要在资源清单中,写如“容忍这两个污点”,才会创建成功

3.2 污点容忍案例

上边案例中我们已经创建了2个污点,且创建资源时,node1节点不允许分配资源

3.2.1 修改资源清单,设置污点容忍

[root@master deployment-demo]# cat taint.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: taint-demo
spec:
  replicas: 5
  selector:
    matchLabels:
      k8s: dolphin
  template:
    metadata:
      name: pod01
      labels:
        k8s: dolphin
    spec:
      # 设置污点容忍
      tolerations:
      - key: node-role.kubernetes.io/master # master节点的污点
        effect: NoSchedule #指定污点类型
        operator: Exists #只要匹配到key就满足这个条件
      - key: dolphin
        effect: NoExecute
        operator: Equal
      - key: dolphin2
        value: "123"
        effect: NoExecute
        operator: Equal #key和value都要满足匹配条件

      containers:
      - name: c1
        image: nginx
        ports:
        - containerPort: 80

[root@master deployment-demo]# kubectl apply -f taint.yaml 
deployment.apps/taint-demo created

通过以上污点容忍配置,我们可以看到三个节点都能分配pod资源了

3.2.2 无视所有污点配置

[root@master deployment-demo]# cat taint.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: taint-demo
spec:
  replicas: 5
  selector:
    matchLabels:
      k8s: dolphin
  template:
    metadata:
      name: pod01
      labels:
        k8s: dolphin
    spec:
      # 设置污点容忍
      tolerations:

        # 不写污点key的相关属性表示匹配所有key
      - operator: Exists

      containers:
      - name: c1
        image: nginx
        ports:
        - containerPort: 80


http://www.ppmy.cn/devtools/23808.html

相关文章

《统计学习方法》——第六章 逻辑斯谛回归与最大熵模型

文章目录 前言一、逻辑斯谛回归模型1.1逻辑斯谛分布1.2二项逻辑斯谛回归模型1.3 模型的参数估计1.4 多项逻辑斯谛回归 二、最大熵模型2.1 最大熵原理2.2定义2.3最大熵模型的学习2.4极大似然估计2.5模型学习的最优化算法1.改进的迭代尺度法IIS 总结 前言 本文只要记录一些书中的…

SqlSessionFactory

在Java中&#xff0c;SqlSessionFactory是MyBatis框架中的一个重要类&#xff0c;它用于创建SqlSession对象。SqlSession是MyBatis框架中用于执行SQL语句的主要对象&#xff0c;它提供了对数据库操作的各种方法。 SqlSessionFactory的主要作用是创建SqlSession对象&#xff0c…

mmdetection3.1.0 bug(已解决)

mmdetection版本3.1.0 想这训练rpn网络&#xff0c;但是训练后val的时候出现了问题&#xff0c;根据Traceback&#xff0c;找到bug。 报错信息&#xff1a;ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dim…

Spring Boot | Spring Security、Spring Security中的 “自定义用户认证“

目录 : Spring Boot 安全管理 &#xff1a;一、Spring Security 介绍二、Spring Security 快速入门2.1 基础环境搭建 :① 创建Spring Boot 项目② 创建 html资源文件③ 编写Web控制层 2.2 开启安全管理效果测试 :④ 添加 spring-boot-starter-security 启动器⑤ 项目启动测试 三…

C#如何动态解析条件表达式字符串并计算结果

在C#中&#xff0c;如果条件表达式是一个字符串&#xff0c;你可以使用C#的编译器服务提供的功能来动态解析该字符串并计算结果。你可以使用CSharpCodeProvider类来编译和执行C#代码字符串。 以下是一个简单的示例&#xff0c;演示了如何将字符串作为条件表达式&#xff0c;然…

美国站群服务器如何解决跨国运营中的网络延迟问题?

美国站群服务器如何解决跨国运营中的网络延迟问题? 在当今全球化的商业环境中&#xff0c;跨国企业面临的一个重要挑战是网络延迟问题。网络延迟不仅影响用户体验&#xff0c;还可能导致交易失败或数据传输错误&#xff0c;对企业造成不利影响。然而&#xff0c;利用美国站群…

监听el-table滚动

mounted() {// 监听el-table滚动window.addEventListener("scroll", this.loadMore, true);}, 后端接口没有分页&#xff0c;一次性返回全部数据&#xff0c;前端监听滚动条加载数据。 this.tableList当前表格展示的数据 this.allTableData接口获取的全部数据 load…

【笔记目录】

目录 001、流程 - - 入金申请 002、流程 - - 出金申请 003、流程 - - 用户注册 004、关系 - - 客服业绩统计报表 005、单词 - - 业务单词