Kubernetes Taints and Tolerations
Taints:污点,应用于node
Tolerations:容忍,应用于pod
Taints
和Tolerations
配合使用可以使特定的pod
调度到特定的node
,这对于某些场景来说非常有用。
概念
通过kubectl taint
添加taint
到节点:
kubectl taint node node1 key=value:NoSchedule
删除taint
:
kubectl taint nodes node1 key:NoSchedule-
Tolerations
配置:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
tolerations:
- key: "key"
operator: "Exists"
effect: "NoSchedule"
- 当
operator
是Exists
时,value
可以为空 - 当
operator
是Equal
时,value
是必须的
在没有指定的情况下,operator
默认值是Equal
effect
除了NoSchedule
之外,还有PreferNoSchedule
和NoExecute
- PreferNoSchedule:轻量版本的
NoSchedule
,对于没有设置toleration
的pod
,集群尽量避免调度到PreferNoSchedule
的节点,但它不是必需的,还是有可能调度到PreferNoSchedule
的节点; - NoExecute:设置
NoExecute
之后,在节点上已经运行的但是没有设置toleration
的pod
都会被驱逐出该节点,新的pod
,如果没有设置toleration
也不会调度到该节点;
例子
需要设置两个专用的node
来运行es
- 设置
taint
kubectl taint nodes lognode1 dedicated=es:NoSchedule kubectl taint nodes lognode2 dedicated=es:NoSchedule kubectl labels nodes lognode1 role=es kubectl labels nodes lognode2 role=es
pod template
配置spec: contains: ... tolerations: - key: "dedicated" value: "es" effect: NoSchedule nodeSelector: role: es