k8s的Pod调度之污点容忍
kubernetes中,节点的污点(taint)用于标记节点上的一些特殊条件或限制,例如节点的资源已经过载或者需要进行维护等。这些污点会阻止Pod被调度到这样的节点上。
但是,如果某些Pod有特殊的要求,需要被调度到被污点标记的节点上,就可以使用污点容忍(taint toleration)的功能。污点容忍允许Pod在被污点标记的节点上调度。
在创建Pod时,可以通过在Pod的spec中添加tolerations 字段来实现污点容忍。tolerations字段告诉Kubernetes该Pod能够容忍哪些污点。例如,下面是一个tolerations字段的示例:
tolerations:
- key: example.com/my-taint-key
operator: Exists
effect: NoSchedule
其中,key指定了污点的名称,operator指定了条件运算符,effect指定了污点的作用方式。
当Pod遇到被容忍的污点后,它就有机会调度到被污点标记的节点上运行。
案例:
cat 01-tolerations.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-tolerations
spec:
replicas: 10
selector:
matchExpressions:
- key: apps
values:
- "v1"
- "v2"
operator: NotIn
template:
metadata:
labels:
school: baimei
spec:
# 配置污点容忍
tolerations:
# - key: school
# value: baimei
# effect: NoExecute
# - key: school
# value: baimei
# effect: PreferNoSchedule
# - key: class
# effect: NoSchedule
# - key: node-role.kubernetes.io/master
# effect: NoSchedule
#
# 若不指定key,则operator值必须为Exists,表示匹配所有的key,此时也不需要指定value。
# 若不指定effect时,则会匹配所有的影响度,即NoExecute,PreferNoSchedule,NoSchedule。
# 综上所述,如果按照下面的方式配置,则表示无视污点。不建议使用,仅测试时可以使用!
- operator: Exists
containers:
- name: v1
image: harbor.baimei.com/baimei-apps/apps:v1