目录
1.4.3 验证污点的作用——PreferNoSchedule
一、污点(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 驱逐出去
master 就是因为有 NoSchedule 污点,k8s 才不会将 Pod 调度到 master 节点上
1.4污点的增删改查
#设置污点
kubectl taint node node01 key1=value1:NoSchedule
#节点说明中,查找 Taints 字段
kubectl describe node node-name
#去除污点
kubectl taint node node01 key1:NoSchedule-
kubectl taint node node01 键名=键值:NoSchedule
#增加污点
kubectl taint node node01 键名=键值:NoSchedule-
kubectl taint node node01 键名-
#删除
kubectl describe nodes node01|grep -A5 -i taint
#查看
设置污点
kubectl taint node node01 jiangsu=nanjing:NoSchedule
键=值
节点说明中,查找 Taints 字段
kubectl describe node node01|grep -i taints
去除污点
kubectl taint node node01 jiangsu:NoSchedule-
查看 Pod 状态,会发现 node02 上的 Pod 已经被全部驱逐(注:如果是 Deployment 或者 StatefulSet 资源类型,为了维持副本数量则会在别的 Node 上再创建新的 Pod)
1.4.1验证污点的作用——NoExecute
kubectl taint node node01 check=no:NoExecute
置了污点为NoExecute效果会不允许新的pod调度到该node 还会自动驱逐运行中的pod
1.4.2验证污点的作用——NoSchedule
不会驱逐pod 也是强制污点
1.4.3 验证污点的作用——PreferNoSchedule
不是强制的 污点