k8s查看污点和删除污点

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 驱除pod
  • NoSchedule 不调度
  • 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-