k8s概念-污点与容忍

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

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

猜你喜欢

转载自blog.csdn.net/hey_lie/article/details/132097768