【k8s】Taint污点)、Toleration(容忍)

文章目录

  • [1. 什么是Taint](#1. 什么是Taint)
    • [1.1 Master 节点的 Taint 示例](#1.1 Master 节点的 Taint 示例)
    • [1.2 普通 Pod 默认不容忍 master taint](#1.2 普通 Pod 默认不容忍 master taint)
    • [1.3 示例:Pod 添加 toleration 来容忍 master taint](#1.3 示例:Pod 添加 toleration 来容忍 master taint)
  • [2. Taint 和 Label 概念区别](#2. Taint 和 Label 概念区别)

1. 什么是Taint

Taint(污点)是 Kubernetes 给节点贴的"禁止调度标签",它告诉调度器:"除非 Pod 明确表示可以容忍,否则不要把它调度到这个节点上。"

通俗点说:

🧱 节点说:"我有特殊情况,不欢迎一般 Pod,除非你能接受我(加 toleration)。"

【Taint 的结构】:

一个 Taint 由三个部分组成:

text 复制代码
key=value:effect

例如:

text 复制代码
node-role.kubernetes.io/master=:NoSchedule

含义如下:

字段 解释
key 污点的名称,比如节点角色、资源状态
value 可选,比如说 taint 的值
effect 生效方式:见下方解释

【Taint 的 effect(生效方式)】:

effect 意义
NoSchedule 不调度新的 Pod 到这个节点(除非 Pod 有 toleration)
PreferNoSchedule 尽量不要调度,但不是强制的(调度器尽量避免)
NoExecute 不仅不调度新的 Pod,还会驱逐已经在运行但不容忍的 Pod

1.1 Master 节点的 Taint 示例

你可以运行下面命令看看 master 节点带了什么 taint:

复制代码
kubectl describe node <master-node-name> | grep -i taint

结果通常类似这样:

复制代码
Taints: node-role.kubernetes.io/master:NoSchedule

这个 taint 的含义是:

一般情况下,master节点不希望pod部署到其上面,因此会增加污点

1.2 普通 Pod 默认不容忍 master taint

如果你的 Pod 没有添加 toleration,它就会被默认 scheduler 拒之门外:

yaml 复制代码
## 1.3 普通 Pod(默认不带 toleration)
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sleep", "3600"]

这个 Pod 无法调度到 master 节点。

1.3 示例:Pod 添加 toleration 来容忍 master taint

如果你想让这个 Pod 可以调度到 master 节点,需要这样添加 toleration:

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  tolerations:
    - key: "node-role.kubernetes.io/master"
      operator: "Exists"
      effect: "NoSchedule"
  containers:
    - name: busybox
      image: busybox
      command: ["sleep", "3600"]

2. Taint 和 Label 概念区别

对象 用于 示例
Label 选择目标节点(配合 nodeSelector/affinity) node-role.kubernetes.io/master=true
Taint 驱逐策略,Pod不能调度上去 node-role.kubernetes.io/master:NoSchedule
Toleration Pod 对 taint 的容忍 toleration: key=node-role.kubernetes.io/master
相关推荐
Hadoop_Liang3 小时前
使用Kubernetes Gateway API实现域名访问应用
容器·kubernetes·gateway
java_cj6 小时前
深入kubectl create源码:从YAML到Pod的完整链路拆解
运维·云原生·容器·kubernetes
万能的知了16 小时前
K8s到底需不需要GPU节点?集群资源分配的底层逻辑
云原生·容器·kubernetes
卧室小白17 小时前
K8S基础-控制器&deploy&pod回滚更新&service
docker·容器·kubernetes
OceanBase数据库官方博客17 小时前
OceanBase × Flink 数据集成系列——旁路导入连接器的批量写入能力
架构·kubernetes·oceanbase
皮皮蟹虾饺1 天前
DNS协议指南:从报文格式到安全加密与 K8s 实战
安全·容器·kubernetes
lihongbao801 天前
kuboard v3创建用户分配命名空间
kubernetes·kuboard
java_cj2 天前
从kubectl源码学pprof:生产环境性能分析的实战指南
运维·云原生·容器·kubernetes
爱吃龙利鱼2 天前
K8s 监控实战:victoria-metrics-k8s-stack 高可用部署,资源占用直降 70%,比 Prometheus 省 5 倍磁盘
docker·kubernetes·prometheus
STDD2 天前
Kubeflow ML 流水线 K8s 部署教程:机器学习工作流编排全攻略
机器学习·容器·kubernetes