目录
名词解释
污点(taints)是定义在节点上的键值型数据,如果一个节点上设置了污点,那么此节点将拒绝Pod调度运行在上面,除非该Pod对象具有接纳节点污点的容忍度。
容忍度(tolerations)是定义在Pod对象上的键值型数据,用于配置其可容忍的节点污点,而且调度器仅能将Pod对象调度至其能够容忍该节点污点的节点之上。
环境
kubernetes版本:v1.23.7
污点语法
key=value:Effect
可以分配三个不同的值effect:
NoSchedule:如果至少有一个未被忽略的污点NoSchedule生效,那么Kubernetes不会将pod调度到该节点上。已经存在的不容忍这种污点的Pod不会被从该节点驱逐或删除。但是除非有匹配的容忍度,否则不会在这个节点上安排更多的 Pod,这是一个硬约束。
PreferNoSchedule:如果至少有一个不可容忍的污点有影响,Kubernetes将尝试不在节点上调度Pod。但是如果有一个pod可以容忍一个taint,它可以被调度。这是一个软约束。
NoExecute:如果至少有一个未被忽略的NoExecute taint生效,那么Pod将从节点中被逐出(如果它已经在节点上运行),并且不会被调度到节点上(如果它还没有在节点上运行)节点。这是一个强约束。
可以对单个节点应用多个污点,对单个Pod应用多个容忍度。
举例说明
向节点添加污点的命令
kubectl taint nodes <node_name> key=value:effect
查看pod运行在哪些节点上
kubectl get pod -A -o wide
如果是:
Taints: <none>
表示节点没有设置污点
举例:在nodes节点上打上污点
kubectl taint nodes master-k8s-6 devops=ops:NoExecute
去除节点上的污点
kubectl taint nodes master-k8s-6 devops=ops:NoExecute-