Taints污点的组成
使用kubectl taint命令可以给某个Node节点设置污点,Node被设置污点之后就和Pod之间存在一种相斥的关系,可以让Node拒绝Pod的调度执行,甚至将Node上已经存在的Pod驱逐出去。
每个污点的组成如下:
key=value:effect
每个污点有一个key和value作为污点的标签,effect描述污点的作用。当前taint effect支持如下选项:
NoSchedule:表示K8S将不会把Pod调度到具有该污点的Node节点上
PreferNoSchedule:表示K8S将尽量避免把Pod调度到具有该污点的Node节点上
NoExecute:表示K8S将不会把Pod调度到具有该污点的Node节点上,同时会将Node上已经存在的Pod驱逐出去
污点taint的NoExecute详解
taint 的 effect 值 NoExecute,它会影响已经在节点上运行的 pod:
如果 pod 不能容忍 effect 值为 NoExecute 的 taint,那么 pod 将马上被驱逐
如果 pod 能够容忍 effect 值为 NoExecute 的 taint,且在 toleration 定义中没有指定 tolerationSeconds,则 pod 会一直在这个节点上运行。
如果 pod 能够容忍 effect 值为 NoExecute 的 taint,但是在toleration定义中指定了 tolerationSeconds,则表示 pod 还能在这个节点上继续运行的时间长度。
可见已经添加上了污点
[root@k8s-master taint]# kubectl describe node k8s-node01
Name: k8s-node01
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
cpu-num=12
disk-type=ssd
kubernetes.io/arch=amd64
kubernetes.io/hostname=k8s-node01
kubernetes.io/os=linux
mem-num=48
Annotations: flannel.alpha.coreos.com/backend-data: {"VtepMAC":"3e:15:bb:f8:85:dc"}
flannel.alpha.coreos.com/backend-type: vxlan
flannel.alpha.coreos.com/kube-subnet-manager: true
flannel.alpha.coreos.com/public-ip: 10.0.0.111
kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Tue, 12 May 2020 16:50:54 +0800
**Taints: test=true:NoSchedule** ### 可见已添加污点
Unschedulable: false```
通过添加Tolerations来匹配容忍度然后调度到相应的节点
其中key、value、effect要与Node上设置的taint保持一致
operator的值为Exists时,将会忽略value;只要有key和effect就行
tolerationSeconds:表示pod 能够容忍 effect 值为 NoExecute 的 taint;当指定了 tolerationSeconds【容忍时间】,则表示 pod 还能在这个节点上继续运行的时间长度。
tolerations:
- key: “key”
operator: “Equal”
value: “value”
effect: “NoSchedule”
tolerations:
- key: “key”
operator: “Exists”
effect: “NoSchedule”
tolerations:
- key: “key”
operator: “Equal”
value: “value”
effect: “NoExecute”
tolerationSeconds: 3600 (容忍度持续的时间)