本文主要是介绍K8S-污点(taints)与容忍(toleration),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介:
污点(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-labelname: magedu-tomcat-app1-deploymentnamespace: magedu
spec:replicas: 3selector:matchLabels:app: magedu-tomcat-app1-selectortemplate:metadata:labels:app: magedu-tomcat-app1-selectorspec:containers:- name: magedu-tomcat-app1-container#image: harbor.magedu.net/magedu/tomcat-app1:v7image: tomcat:7.0.93-alpineimagePullPolicy: IfNotPresentports:- containerPort: 8080protocol: TCPname: httptolerations: #污点容忍- key: "key1" #污点的key是key1operator: "Equal" #操作符是Equal,所以需要指定value,并且值等于node污点的那个valuevalue: "value1" #因为刚刚手动打的node污点value是value1effect: "NoSchedule"---
kind: Service
apiVersion: v1
metadata:labels:app: magedu-tomcat-app1-service-labelname: magedu-tomcat-app1-servicenamespace: magedu
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: 8080#nodePort: 40003selector: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节点上的
这篇关于K8S-污点(taints)与容忍(toleration)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!