流程:

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

操作命令:

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

Shell

 

1

2

3

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分配到该节点

2. node删除污点

Shell

 

1

kubectl taint nodes kube11 key:NoSchedule-

3. pod设置容忍一个污点

YAML

 

1

2

3

4

5

6

    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

 

1

kubectl taint nodes node1 disktype=ssd:NoExecute

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

YAML

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

---

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

Logo

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

更多推荐