1. 介绍

node打上污点(可以想象成一个标签),pod如果不定义容忍这个污点,那么pod就不会被调度器分配到这个node

操作命令:

  1. node打上污点方法 的三种类型以及介绍

Shell

kubectl taint nodes node1 key=value:NoSchedule

kubectl taint nodes node1 key=value:NoExecute

kubectl taint nodes node1 key=value:PreferNoSchedule

NoSchedule:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响

NoExecute:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能调度过来,老的pod也会被驱逐

PreferNoSchedule:pod会尝试将pod分配到该节点

  1. node删除污点

Shell

kubectl taint nodes kube11 key:NoSchedule-
  1. pod设置容忍一个污点

YAML

tolerations:  #containers同级

- key: "key1"          #能容忍的污点key

  operator: "Equal"    #Equal等于表示key=value , Exists不等于,表示当值不等于下面value正常

  value: "value1"      #值

  effect: "NoExecute"  #effect策略,见上面

  tolerationSeconds: 3600  #原始的pod多久驱逐,注意只有effect: "NoExecute"才能设置,不然报错

 

示例:

  1. 给pod打一个污点

Shell

kubectl taint nodes node1 disktype=ssd:NoExecute

说明:给node1打上一个污点disktype值是ssd,并且原先分配的pod也驱逐
2. deployment添加容忍这个污点

YAML

---

apiVersion: apps/v1Beta1

kind: Deployment

metadata:

  name: nginx-deploy

spec:

  replicas: 1

    selector:

      matchLabels:

        app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        images: nginx:laste

        ports:

        - containerPort: 80

    tolerations:

    - key: "disktype"

      operator: "Equal"

      value: "value1"

      effect: "NoExecute"

      tolerationSeconds: 3600

 

可以看到 如果pod打上这个污点,那么这个pod就会分配到这个node1,其他pod未打污点无法分配,并且old的pod也被驱赶出这个node

2 . 实操–在master 上进行打污点,防止资源创建在此上

[root@master ~]# kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   16d   v1.17.0
node1    Ready    <none>   16d   v1.17.0
node2    Ready    <none>   16d   v1.17.0
添加污点
[root@master ~]# kubectl taint nodes master key=value:NoSchedule
node/master tainted
去除污点
[root@master ~]# kubectl taint nodes master key:NoSchedule-
node/master untainted
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐