高级调度 —— 污点、容忍

随笔3个月前发布 红茶百合
28 0 0

合集 – Kubernetes(21)
1.K8S基础2023-10-072.搭建 Kubernetes 集群 —— 搭建方案 kubeadm2023-10-103.搭建 Kubernetes 集群 —— 命令行工具 kubectl2023-10-114.搭建 Kubernetes 集群 —— API 概述2023-10-115.深入Pod —— 配置文件2023-10-116.深入Pod —— 探针2023-10-127.深入Pod —— 生命周期 及 PreStop事件的应用2023-10-128.资源调度 —— Label 和 Selector:标签和选择器2023-10-129.资源调度 —— Deployment(针对部署的无状态应用)2023-10-1310.资源调度 —— StatefulSet(针对部署的有状态应用)2023-10-1311.资源调度 —— DaemonSet:守护进程应用场景(Fluent日志收集程序)2023-10-1312.资源调度 —— HPA:Pod基于负载指标自动水平扩容 / 缩容2023-10-1313.服务发现 —— Service(主要用于服务内的网络共享)2023-10-1414.服务发现 —— Ingress(用于外部服务的发现和统一入口)2023-10-1415.配置与存储 —— 配置管理2023-10-1516.配置与存储 —— 持久化存储2023-10-1717.高级调度 —— CronJob计划任务、初始化容器 InitContainer2023-11-03
18.高级调度 —— 污点、容忍2023-11-0319.高级调度 —— 亲和力(Affinity)2023-11-0320.身份认证与权限2023-11-0421.Helm 包管理器2023-11-04

收起

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

一、污点(Taint)

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

2、污点的影响:

NoSchedule:不能容忍的 pod 不能被调度到该节点,但是已经存在的节点不会被驱逐
NoExecute:不能容忍的节点会被立即清除,能容忍且没有配置 tolerationSeconds 属性,则可以一直运行,设置了 tolerationSeconds: 3600 属性,则该 pod 还能继续在该节点运行 3600 秒

1、NoSchedule

如果不能容忍该污点,那么 Pod 就无法调度到该节点上

2、NoExecute

如果 Pod 不能忍受这类污点,Pod 会马上被驱逐。
如果 Pod 能够忍受这类污点,但是在容忍度定义中没有指定 tolerationSeconds, 则 Pod 还会一直在这个节点上运行。
如果 Pod 能够忍受这类污点,而且指定了 tolerationSeconds, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。

3、当前内置的污点包括:

node.kubernetes.io/not-ready:节点未准备好。这相当于节点状况 Ready 的值为 "False"。
node.kubernetes.io/unreachable:节点控制器访问不到节点. 这相当于节点状况 Ready 的值为 "Unknown"。
node.kubernetes.io/memory-pressure:节点存在内存压力。
node.kubernetes.io/disk-pressure:节点存在磁盘压力。
node.kubernetes.io/pid-pressure:节点的 PID 压力。
node.kubernetes.io/network-unavailable:节点网络不可用。
node.kubernetes.io/unschedulable:节点不可调度。
node.cloudprovider.kubernetes.io/uninitialized:如果 kubelet 启动时指定了一个“外部”云平台驱动, 它将给当前节点添加一个污点将其标志为不可用。在 cloud-controller-manager 的一个控制器初始化这个节点后,kubelet 将删除这个污点。

二、容忍(Toleration)

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

# pod 的 spec 下面配置容忍
tolerations:
- key: "污点的 key"
  value: "污点的 value"
  effect: "NoSchedule" # 污点产生的影响
  operator: "Equal" # 表是 value 与污点的 value 要相等,也可以设置为 Exists 表示存在 key 即可,此时可以不用配置 value

1、Equal

比较操作类型为 Equal,则意味着必须与污点值做匹配,key/value都必须相同,才表示能够容忍该污点

2、Exists

容忍与污点的比较只比较 key,不比较 value,不关心 value 是什么东西,只要 key 存在,就表示可以容忍。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...