K8S-污点(taints)与容忍(toleration)
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-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节点上的
更多推荐
所有评论(0)