k8s调度

发布时间 2023-08-09 16:25:12作者: 东行天下

一、污点和容忍

k8s 集群中可能管理着非常庞大的服务器,这些服务器可能是各种各样不同类型的,比如机房、地理位置、配置等,有些是计算型节点,有些是存储型节点,此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。

 

此时就需要用到污点(Taint)和容忍(Toleration),这些配置都是 key: value 类型的。

1.污点

污点:是标注在节点上的,当我们在一个节点上打上污点以后,k8s 会认为尽量不要将 pod 调度到该节点上,除非该 pod 上面表示可以容忍该污点,且一个节点可以打多个污点,此时则需要 pod 容忍所有污点才会被调度该节点。

# 为节点打上污点

kubectl taint node k8s-master key=value:NoSchedule

# 移除污点

kubectl taint node k8s-master key=value:NoSchedule-

# 查看污点

kubectl describe no k8s-master

 

污点的影响:

NoSchedule:不能容忍的 pod 不能被调度到该节点,但是已经存在的节点不会被驱逐

NoExecute:不能容忍的节点会被立即清除,能容忍且没有配置 tolerationSeconds 属性,则可以一直运行,设置了 tolerationSeconds: 3600 属性,则该 pod 还能继续在该节点运行 3600 秒

 

2.容忍

容忍:是标注在 pod 上的,当 pod 被调度时,如果没有配置容忍,则该 pod 不会被调度到有污点的节点上,只有该 pod 上标注了满足某个节点的所有污点,则会被调度到这些节点

# pod 的 spec 下面配置容忍

tolerations:

- key: "污点的 key"

value: "污点的 value"

offect: "NoSchedule" # 污点产生的影响

operator: "Equal" # 表是 value 与污点的 value 要相等,也可以设置为 Exists 表示存在 key 即可,此时可以不用配置 value