zoukankan      html  css  js  c++  java
  • 污点和容忍度

    污点:主体是node,在node上标记特定的键值对,以此来标识该node的特殊属性
    容忍度:主体是pod,当pod被调度到有污点的node时,该pod能否容忍node的污点标记

    在查看master节点的信息

    ~]# kubectl describe node master-node | grep Taints
    Taints:     node-role.kubernetes.io/master:NoSchedule

    可以看到master的节点集群在创建时已经被自动标记了taint,保证了创建未经指定容忍度的pod时,不会调度到master节点

    节点污点

    三种类型:

    • NoSchedule:不能容忍此污点的新Pod对象不可调度至当前节点,属于强制型约束关系,节点上现存的Pod对象不受影响。
    • PreferNoSchedule:NoSchedule的柔性约束版本,即不能容忍此污点的新Pod对象尽量不要调度至当前节点,不过无其他节点可供调度时也允许接受相应的Pod对象。节点上现存的Pod对象不受影响。
    • NoExecute:不能容忍此污点的新Pod对象不可调度至当前节点,属于强制型约束关系,而且节点上现存的Pod对象因节点污点变动或Pod容忍度变动而不再满足匹配规则时,Pod对象将被驱逐。

    污点设置:

    kubectl taint nodes node2 test=slave:NoSchedule

    撤销污点:

    kubectl taint nodes node2 test:NoSchedule-

    pod容忍度

    当node已经设定了污点,通过设置容忍度将pod调度到相应的节点上

    示例:

    ...
    tolerations:
      - key: "key"
        operator: "Equal" 
        value: "value"
        effect: "NoScheduale"
    ...

    operator: 没指定默认为Equal,当为Equal时value必须指定并且key的值和vaule的值匹配才能执行,当为Exists时可以不写value

    此外,空的 key(是指key没有指定,而不是指key为空字符串) 如果再配合operator Exists 就能匹配所有的 key 与 value,也是能容忍所有 node 的所有 Taints,空的 effect 匹配所有的 effect

    当配置NoExecute时,pod可以通过设定tolerationSeconds(秒),表示pod可以容忍该节点并在该节点继续运行指定的时间

    比如,一个使用了很多本地状态的应用程序在网络断开时,仍然希望停留在当前节点上运行一段较长的时间, 愿意等待网络恢复以避免被驱逐。在这种情况下,Pod 的容忍度可能是下面这样的:

    tolerations:
    - key: "node.kubernetes.io/unreachable"
      operator: "Exists"
      effect: "NoExecute"
      tolerationSeconds: 6000

    在k8s的集群中,当某种条件为真时,节点控制器会自动给节点添加一个污点。包括如下:

    • node.kubernetes.io/not-ready:节点未准备好。这相当于节点状态 Ready 的值为 "False"。
    • node.kubernetes.io/unreachable:节点控制器访问不到节点. 这相当于节点状态 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 将删除这个污点。

    daemonset 容忍度的添加

    DaemonSet 控制器自动为所有守护进程添加如下 NoSchedule 容忍度(不同版本有差别)以防 DaemonSet 崩溃:

    • node.kubernetes.io/memory-pressure
    • node.kubernetes.io/disk-pressure
    • node.kubernetes.io/out-of-disk (只适合关键 Pod)
    • node.kubernetes.io/unschedulable (1.10 或更高版本)
    • node.kubernetes.io/network-unavailable (只适合主机网络配置)
      添加上述容忍度确保了向后兼容,您也可以选择自由向 DaemonSet 添加容忍度

    另外:在集群运行的过程中当节点由于资源的紧缺,会出现集群自动将资源紧缺的节点标记污点,让无法忍受的pod自动剥离该node

  • 相关阅读:
    背景qwq
    关于Oracle数据库空表无法导出问题
    Linux 备份 Oracle11g 数据库
    Linux Tomcat安装
    Linux JDK安装
    Oracle 监听与服务器
    Xftp强制更新
    Linux 安装 Oracle11g 数据库
    Vue 动态获取组件与动态路由获取组件
    Linux 防火墙
  • 原文地址:https://www.cnblogs.com/fat-girl-spring/p/14950180.html
Copyright © 2011-2022 走看看