简介:

污点(taints):  打上了污点的node就不会承载新pod的调度

容忍(toleration): 设置了有容忍的pod,仍能调度到有污点的node上

一、污点介绍:

1、污点的4种类型:

1、NoSchedule :表示K8S不会把pod调度到有该污点的节点上,但不影响该节点已存在的pod

2、PreferNoschedule: 表示K8S尽量不调度pod到有该污点的节点上

3、NoExecute : 表示K8S不会把pod调度到有这个污点的节点上,同时还会把有这个污点的节点上已经存在的pod全部驱逐

4、cordon: 表示不会调度新的pod,并且不会强制驱逐已有的pod

2、添加污点:

1、kubectl taint node 172.31.7.101 key=value:NoSchedule
2、kubectl taint node 172.31.7.101 key=value:NoExecute

3、取消污点:

1、kubectl taint node 172.31.7.101 key:NoSchedule-
2、kubectl taint node 172.31.7.101 key:NoExecute-

master节点默认是不调度pod的,它们默认就拥有cordon污点

 取消172.31.7.101的污点,查看污点都已经取消了

重新把master节点再打上cordon污点

其它几个类型的污点也是一样的设置方法

 二、容忍介绍:

容忍类型:

1、toleration

        定义pod的容忍度(可以接受哪些类型的污点),而后可以调度到这种污点类型的node

2、operator

        如果operator是Exists,那么容忍度不需要value而是直接匹配污点类型

        如果operator是Equal,那么需要指定value并且value的值需要等于node污点的key

三、测试容忍案例

1、node节点打NoSchedule污点

root@master1:/pod# kubectl taint nodes 172.31.7.111 key1=value1:NoSchedule

2、查看污点信息

3、创建具有容忍的pod

root@master1:/pod# cat taint-tolerations.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-tomcat-app1-deployment-label
  name: magedu-tomcat-app1-deployment
  namespace: magedu
spec:
  replicas: 3
  selector:
    matchLabels:
      app: magedu-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: magedu-tomcat-app1-selector
    spec:
      containers:
      - name: magedu-tomcat-app1-container
        #image: harbor.magedu.net/magedu/tomcat-app1:v7
        image: tomcat:7.0.93-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
      tolerations:           #污点容忍
      - key: "key1"          #污点的key是key1
        operator: "Equal"       #操作符是Equal,所以需要指定value,并且值等于node污点的那个value
        value: "value1"         #因为刚刚手动打的node污点value是value1
        effect: "NoSchedule"

---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: magedu-tomcat-app1-service-label
  name: magedu-tomcat-app1-service
  namespace: magedu
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    #nodePort: 40003
  selector:
    app: magedu-tomcat-app1-selector

4、创建pod

root@master1:/pod# kubectl apply -f taint-tolerations.yaml

5、查看调度结果

可以看见虽然172.31.7.111打了污点,但是三个副本已经调度到了172.31.7.111和172.31.7.112节点了

可以尝试把yaml文件中容忍的配置注释掉,再重新创建下看看调度结果

 

重新创建pod

root@master1:/pod# kubectl apply  -f taint-tolerations.yaml

很显然是无法调用到7.111节点上的

 

 

Logo

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

更多推荐