【Kubernetes】污点和容忍

一、概述

在 Kubernetes(k8s)中,污点(Taints) 是定义在节点上的一种机制,用于拒绝某些 Pod 调度到该节点,除非这些 Pod 具有对应的容忍度(Tolerations)。污点可以用来控制 Pod 的调度行为,确保特定的 Pod 不会被分配到不合适的节点上。

容忍(Tolerations) 是与污点(Taints)相对应的一种机制。容忍允许 Pod 被调度到带有特定污点的节点上,或者在节点被添加了特定污点后,允许已经运行在该节点上的 Pod 继续运行。简而言之,容忍是对污点的一种"豁免"机制。

污点的组成

  • Key:污点的键,用于标识污点的类型。

  • Value:污点的值,通常与 Key 一起用于标识污点的具体属性。

  • Effect:污点的作用效果,有以下三种类型:

    • NoSchedule:没有配置此污点容忍度的新 Pod 不能调度到此节点,但节点上已存在的 Pod 不受影响。

    • PreferNoSchedule:没有配置此污点容忍度的新 Pod 尽量不要调度到此节点,但如果找不到合适的节点,仍然会调度到此节点。

    • NoExecute:没有配置此污点容忍度的新 Pod 不能调度到此节点,同时节点上已存在的 Pod 也会被驱逐。

污点的使用场景

  • 独占节点:通过给节点添加污点,可以确保只有特定的 Pod 能够调度到该节点。例如,某些节点可能具有特殊的硬件资源(如 GPU),可以通过污点和容忍度来限制只有特定的 Pod 能够使用这些节点。

  • 驱逐 Pod :当节点出现故障或资源不足时,Kubernetes 会自动为节点添加污点(如 node.kubernetes.io/memory-pressure),并使用 NoExecute 作为排斥等级,此时没有设置此类污点容忍度的 Pod 会被驱逐。

污点的操作

  • 添加污点 :可以使用 kubectl taint 命令为节点添加污点。例如:

    复制代码
    kubectl taint nodes <node-name> <key>=<value>:<effect>
  • 查看污点 :可以使用 kubectl describe node 命令查看节点的污点信息:

    bash 复制代码
    kubectl describe node <node-name> | grep 'Taints'
  • 删除污点 :可以使用 kubectl taint 命令删除节点的污点:

    bash 复制代码
    kubectl taint nodes <node-name> <key>=<value>:<effect>-

二、PreferNoSchedule

bash 复制代码
kubectl taint node node1 tag=huaiche:PreferNoSchedule

三、NoSchedule

bash 复制代码
kubectl taint node node1 tag=huaiche:NoSchedule

四、NoExecute

bash 复制代码
kubectl taint node node1 tag=huaiche:NoExecute

五、编写容忍对应污点的Pod.yaml

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  tolerations:
  - key: "check-nginx"
    operator: "Equal"
    value: "web"
    effect: "NoSchedule"
  containers:
  - name: my-container
    image: my-image
相关推荐
nuczzz1 小时前
GPU虚拟化
docker·kubernetes·k8s·gpu·nvidia
Johny_Zhao2 小时前
2025年6月Docker镜像加速失效终极解决方案
linux·网络·网络安全·docker·信息安全·kubernetes·云计算·containerd·yum源·系统运维
爱瑞瑞2 小时前
云原生学习笔记(五) 构建 Docker 镜像与运行容器
云原生
大咖分享课3 小时前
云原生监控体系建设:Prometheus+Grafana的企业级实践
云原生·grafana·prometheus
藥瓿亭3 小时前
K8S认证|CKS题库+答案| 7. Dockerfile 检测
运维·ubuntu·docker·云原生·容器·kubernetes·cks
容器魔方4 小时前
KubeCon 抢鲜 | Kmesh与你共创高性能流量治理更优方案
云原生·容器·云计算
Gold Steps.6 小时前
Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志
运维·docker·云原生·es
上海运维Q先生6 小时前
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
云原生·k8s·cilium
AWS官方合作商7 小时前
Amazon RDS on AWS Outposts:解锁本地化云数据库的混合云新体验
云原生·云计算·aws
有个傻瓜10 小时前
PHP语言核心技术全景解析
开发语言·kubernetes·php