一、污点(taint)
1.1 污点简介
①节点亲和性,是Pod的一种属性(偏好或硬性要求),它是Pod被吸引到一类特定的节点。Taint则相反,它使得节点能够排斥一类特定的pod。
②Taint与Toleration相互配合,可以用来避免pod被分配到不合适的节点上。每个节点上的都可以应用一个或者多个Taint,这表示对于那些不能容忍这些 taint 的 Pod,是不会被该节点接受的。如果将 toleration 应用于 Pod 上,则表示这些 Pod 可以(但不一定)被调度到具有匹配 taint 的节点上。
③使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去。
1.2 污点组成格式
key=value:effect
## 每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。
1.3 当前taint effect支持如下三个选项:
①NoSchedule:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
②PreferNoSchedule:表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上
③NoExecute:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去
1.4 查看node节点上的污点
格式:kubectl describe nodes <节点名称> | grep Taints
或者是kubectl describe nodes <节点名称> | grep -i taints
eg:查看master01的污点
kubectl describe nodes master01 |grep -i taints
1.5 设置污点
格式kubectl taint node 指定的node key1=value1:NoSchedule
eg:给node01 设置污点进行测试
kubectl taint node node01 abc=a:NoSchedule
1.6 清除污点
格式:kubectl taint node 指定的node key:NoSchedule-
eg:清除node01 设置的污点
kubectl taint node node01 abc:NoSchedule-
1.7 示例一
查看pod状态,模拟驱逐node02上的pod
[root@master01 ~]]#kubectl get pods -owide
查看pod状态
设置驱逐node02
kubectl taint node node02 check=mycheck:NoExecute
再次查看pod状态
kubectl get pods -owide
NAME