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


    一、污点的概念

            所谓的污点,是给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:            
    Unschedulable:      false
    Lease:
    --
                        volumes.kubernetes.io/controller-managed-attach-detach: true
    CreationTimestamp:  Fri, 29 Mar 2024 16:39:55 +0800
    Taints:            
    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

  • 相关阅读:
    手把手带你体验一场属于Linux的学习之旅
    八个鲜为人知但很实用的Web API
    好玩的js特效
    初识容器Docker
    Chrome修改主题颜色
    Arduino驱动MAX30102心率血氧传感器模块
    计算机毕业设计Python+djang高校教室管理系统(源码+系统+mysql数据库+Lw文档)
    SciChart WPF Charts SDK v6.x
    Spring系列25:Spring AOP 切点详解
    银行存款问题:整存零取
  • 原文地址:https://blog.csdn.net/weixin_39941298/article/details/138133350