ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

污点taints和容忍toleration_v1

2022-05-12 19:02:01  阅读:198  来源: 互联网

标签:node toleration io effect taints v1 key 污点 Pod


污点taints和容忍toleration

查看taints

root@node81[14:12:09]:/home/k8s_conf/saas# kubectl describe nodes node81 
...
CreationTimestamp:  Tue, 10 May 2022 17:31:08 +0800
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false

分别对应=:

=node-role.kubernetes.io/master

= 空

=NoSchedule

effect可以取值:

  • PreferNoSchedule: 尽量不要调度。
  • NoSchedule: 一定不能被调度。
  • NoExecute: 不仅不会调度, 还会驱逐 Node 上已有的 Pod。
  • 设置taints
kubectl taint node node81 node-role.kubernetes.io/master:PreferNoSchedule

删除taints

#root@node81[14:41:26]:/home/k8s_conf/saas# kubectl taint node node81 node-role.kubernetes.io/master:NoSchedule-
node/node81 untainted
#root@node81[14:41:33]:/home/k8s_conf/saas# kubectl describe nodes node81
...
CreationTimestamp:  Tue, 10 May 2022 17:31:08 +0800
Taints:             <none>
Unschedulable:      false
...

容忍

一个 Node 可以有多个污点,一个 Pod 可以有多个容忍。

想要pod调度到有污点node,需要pod容忍包含该node所有污点(PreferNoShedule除外)

设置容忍tolerations

apiVersion: apps/vl
kind: Deployment
metadata: 
  name: example 
spec: 
  replicas: 3 
  template:
    spec: 
      ......
      tolerations: 
      - key: "key"
        operator: "Equal"
        value: "value"
        effect: "NoSchedule"
        tolerationSeconds: 3600

tolerationSeconds用于设置多长时间以后再踢掉pod,单位秒

operator:可选值Equal 和 Exists

Exists: 匹配容忍在已有条件下的所有污点

key为空,则匹配所有key

tolerations:
- operator: "Exists"

key不为空,effect为空,则匹配该key的所有值

tolerations:
- key: "key"
  operator: "Exists"

Equal

Node 和 Pod 的 key 为 key1、value1 与 effect 相同则能调度

#污点
key1=value1:NoSchedule

#Pod设置
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

Node 的污点的 key、value、effect 和 Pod 容忍都相同则能调度

# 设置污点
key1=value1:NoSchedule
key2=value2:NoExecute

# Pod设置容忍
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key2"
  operator: "Equal"
  value: "value2"
  effect: "NoExecute"

Node 的污点和 Pod 的大部分都相同,不同的是 Node 污点 effect 为 PreferNoSchedule 的,可能会调度

# 污点
key1=value1:NoSchedule
key2=value2:NoExecute
key3=value3:PreferNoSchedule

# Pod设置容忍
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key2"
  operator: "Equal"
  value: "value2"
  effect: "NoExecute"

Node 的污点和 Pod 的大部分都相同,不同的是 Node 污点 effect 为 NoSchedule 和 NoExecute 的,不会被调度

# 污点
key1=value1:NoSchedule
key2=value2:NoExecute
key3=value3:PreferNoSchedule

# Pod设置容忍
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key3"
  operator: "Equal"
  value: "value3"
  effect: "PreferNoSchedule"

驱逐

污点的 effect 可以设置为 NoExecute时

  • 立即将没有配置容忍的 Pod 逐出。
  • 设置容忍但是没有指定 tolerationSeconds 参数的,那么该容忍永久生效。
  • 设置容忍但是有指定 tolerationSeconds 参数的,那么在指定的时间内容忍有效,超过指定时间后将被剔除。

当某些条件为 true 时,节点控制器会自动污染节点。内置以下污点:

  • node.kubernetes.io/not-ready: 节点尚未准备好。这对应于 NodeCondition Ready 为 false。
  • node.kubernetes.io/unreachable: 无法从节点控制器访问节点。这对应于 NodeCondition Ready 为 Unknown。
  • node.kubernetes.io/out-of-disk: 节点磁盘不足。
  • node.kubernetes.io/memory-pressure: 节点有内存压力。
  • node.kubernetes.io/disk-pressure: 节点有磁盘压力。
  • node.kubernetes.io/network-unavailable: 节点的网络不可用。
  • node.kubernetes.io/unschedulable: 节点不可调度。
  • node.cloudprovider.kubernetes.io/uninitialized: 当 kubelet 从 "外部" 云提供程序开始时,此污点在节点上设置为将其标记为不可用。来自 cloud-controller-manager 的控制器初始化此节点后,kubelet 删除此污点。

节点失效 pod转移等待时间

当某个 Pod 运行所在的 Node 变成 unready 或者 unreachable 不可用状态时,Kubernetes 可以等待该 Pod 被调度到其他节点的最长等待时间

tolerations:
- effect: NoExecutekey: node.alpha.kubernetes.io/notReady
  operator: Exists
  tolerationSeconds: 300
- effect: NoExecutekey: node.alpha.kubernetes.io/unreachable 
  key: operator: Exists 
  tolerationSeconds: 300 

这两个容忍度表示,该 Pod 将容忍所在节点处于 notReady 或者 unreachable 状态维持 300 秒。 当 Kubernetes 控制器检测到有节点处 notReady 或者 unreachable 状态时, 将会等待 300 秒,如果超过指定时间的话 Kubernetes 将会把该 Pod 重新调度到其他节点上。

参考:http://www.mydlq.club/article/69/#

标签:node,toleration,io,effect,taints,v1,key,污点,Pod
来源: https://www.cnblogs.com/gkmin/p/16263729.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有