k8s 集群中可能管理着非常庞大的服务器,这些服务器可能是各种各样不同类型的,比如机房、地理位置、配置等,有些是计算型节点,有些是存储型节点,此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。
此时就需要用到污点(Taint)和容忍(Toleration),这些配置都是 key: value 类型
1 污点
标注在节点上,当我们在一个节点上打上污点以后,k8s 会认为尽量不要将 pod 调度到该节点上,除非该 pod 上面表示可以容忍该污点,且一个节点可以打多个污点,此时则需要 pod 容忍所有污点才会被调度该节点
1.1 使用
# 为节点打上污点
kubectl taint node k8s-master key=value:NoSchedule
#example:为k8s-node1打上一个污点,表示内存低,造成影响为NoSchedule
kubectl taint node k8s-node1 memory=low:NoSchedule
# 移除污点
kubectl taint node k8s-master key=value:NoSchedule-
# 查看污点
kubectl describe no k8s-master
1.2 污点的影响
-
NoSchedule
不能容忍的 pod 不能被调度到该节点,但是已经存在的节点不会被驱逐
-
PreferNoSchedule
尽量不要部署到有该污点的节点上
-
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
operator设置:与污点进行匹配的规则
-
Equal:对比key和value都相等
-
Exists:只对比key,只要key存在即可,此时可以不用配置value文章来源:https://www.toymoban.com/news/detail-625736.html
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations: # 配置容忍
- key: "node" # 污点的key
value: "slave" # 污点的value
operator: "Exists" # 容忍操作
effect: "NoSchedule" # 容忍效果
tolerationSeconds: 6000
文章来源地址https://www.toymoban.com/news/detail-625736.html
到了这里,关于k8s概念-污点与容忍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!