k8s查看污点和删除污点
-
NoExecute
这会影响已在节点上运行的 Pod,具体影响如下:如果 Pod 不能容忍这类污点,会马上被驱逐。如果 Pod 能够容忍这类污点,但是在容忍度定义中没有指定
tolerationSeconds
, 则 Pod 还会一直在这个节点上运行。如果 Pod 能够容忍这类污点,而且指定了tolerationSeconds
, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。 这段时间过去后,节点生命周期控制器从节点驱除这些 Pod。 -
NoSchedule
除非具有匹配的容忍度规约,否则新的 Pod 不会被调度到带有污点的节点上。 当前正在节点上运行的 Pod 不会被驱逐。
-
PreferNoSchedule
PreferNoSchedule
是“偏好”或“软性”的NoSchedule
。 控制平面将尝试避免将不能容忍污点的 Pod 调度到的节点上,但不能保证完全避免。
你可以给一个节点添加多个污点,也可以给一个 Pod 添加多个容忍度设置。 Kubernetes 处理多个污点和容忍度的过程就像一个过滤器:从一个节点的所有污点开始遍历, 过滤掉那些 Pod 中存在与之相匹配的容忍度的污点。余下未被过滤的污点的 effect 值决定了 Pod 是否会被分配到该节点。需要注意以下情况:
- 如果未被忽略的污点中存在至少一个 effect 值为
NoSchedule
的污点, 则 Kubernetes 不会将 Pod 调度到该节点。 - 如果未被忽略的污点中不存在 effect 值为
NoSchedule
的污点, 但是存在至少一个 effect 值为PreferNoSchedule
的污点, 则 Kubernetes 会 尝试 不将 Pod 调度到该节点。 - 如果未被忽略的污点中存在至少一个 effect 值为
NoExecute
的污点, 则 Kubernetes 不会将 Pod 调度到该节点(如果 Pod 还未在节点上运行), 并且会将 Pod 从该节点驱逐(如果 Pod 已经在节点上运行)。
简单说
NoExecute
驱除podNoSchedule
不调度PreferNoSchedule
尽可能不调度。当其他节点都不满足时,还是会调度。
添加:
kubectl taint nodes <NodeName> node=:NoExecute
kubectl taint nodes <NodeName> node=:NoSchedule
kubectl taint nodes <NodeName> node=:PreferNoSchedule
当不清楚集群中node的污点时,可以用以下命令查看和删除污点
查看:
kubectl describe nodes k8s-master |grep Taints
Taints: gameble=true:NoSchedule
[root@k8s-master ~]# kubectl describe nodes k8s-slave1 | grep Taints
Taints: drunk=true:NoSchedule
[root@k8s-master ~]# kubectl describe nodes k8s-slave2 | grep Taints
Taints: smke=true:NoSchedule
删除:
根据上边命令查出来的污点名来删。
gameble-
gameble
就是污点名,后加减号就删掉了
[root@k8s-master ~]# kubectl taint node k8s-master gameble-
node/k8s-master untainted
[root@k8s-master ~]# kubectl taint node k8s-slave1 drunk-
node/k8s-slave1 untainted
[root@k8s-master ~]# kubectl taint node k8s-slave2 smke-
node/k8s-slave2 untainted
禁止master部署pod
kubectl taint nodes k8s-master(节点名称) node-role.kubernetes.io/master=true:NoSchedule
查看污点
kubectl describe nodes 节点名称
删除污点(根据上述的常看,或者禁止来删除)
kubectl taint nodes 节点名称 node-role.kubernetes.io/master-