k8s污点和容忍

在Kubernetes中,污点(Taints)和容忍(Tolerations)是一种机制,用于控制Pod的调度行为。以下是关于污点和容忍的详细信息:

概念:

污点(Taints):污点是一种将节点标记为不适宜运行某些Pod的机制。污点可以用来确保Pod不会被调度到不合适的节点上。与节点亲和性(Node Affinity)相反,污点是一种排斥机制。

容忍(Tolerations):容忍允许Pod被调度到具有匹配污点的节点上。Pod可以通过设置容忍来忽略节点上的污点。

污点的组成

污点由以下三个部分组成:

**键(Key):**表示污点的唯一标识符。

**值(Value):**与键相关联的值,通常用来表示污点的具体信息。

**效果(Effect):**表示污点的作用,有以下几个可选值:
NoSchedule:Kubernetes不会将新Pod调度到具有该污点的节点上,历史存在Pod不受影响。
PreferNoSchedule:Kubernetes会尽量避免将Pod调度到具有该污点的节点上,但不是强制的。
NoExecute:如果Pod已经在具有该污点的节点上运行,它将被驱逐;同时,Kubernetes不会将新的Pod调度到该节点上。

配置污点

添加污点:

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

例如:

bash 复制代码
kubectl taint nodes node1 key1=value1:NoSchedule

移除污点:

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

例如:

bash 复制代码
kubectl taint nodes node1 key1=value1:NoSchedule-

配置容忍

在Pod的配置中,可以通过设置tolerations来容忍特定的污点。以下是一个示例:

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      tolerations:	#定义 Pod 的容忍策略,用于与节点的污点(Taints)匹配。
      - key: "key1"	#容忍的污点键为 key1。
        operator: "Equal"	#操作符为 Equal,表示污点的值必须等于 value1。
        value: "value1"	#污点的值为 value1。
        effect: "NoSchedule"	#污点的效果为 NoSchedule,表示不允许调度新的 Pod 到该节点。
        tolerationSeconds: 3600	#容忍的时长为 3600 秒(1 小时)。
      - key: "key2"	#容忍的污点键为 key2。
        operator: "Exists"	#操作符为 Exists,表示只要污点键存在即可。
        effect: "NoExecute"	#污点的效果为 NoExecute,表示如果污点存在,Pod 会被驱逐。
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

容忍的operator:

Equal

含义:容忍的污点(Taint)的键值对必须完全匹配。

-用 法:需要同时指定 key、value 和 operator。

示例:

bash 复制代码
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

这表示容忍的污点必须满足键为 key1、值为 value1,并且污点的效果为 NoSchedule。

Exists

-含义 ****:只要污点的键存在即可,不需要匹配具体的值。

用法:只需要指定 key 和 operator,不需要指定 value。

示例:

bash 复制代码
tolerations:
- key: "key2"
  operator: "Exists"
  effect: "NoExecute"

这表示容忍的污点只要键为 key2 即可,无论它的值是什么,只要污点的效果为 NoExecute。

查看污点

bash 复制代码
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
相关推荐
工具罗某人13 小时前
docker compose 部署MySQL InnoDB Cluster + Router 高可用集群-亲测可用
mysql·docker·容器
cyber_两只龙宝13 小时前
【Nginx】Nginx配置负载均衡详解
linux·运维·nginx·云原生·负载均衡
一只小bit14 小时前
Docker 实用命令手册:包含Docker简介与常用命令
运维·docker·容器
云水木石14 小时前
Docker 内使用Claude Code
运维·docker·容器
斌味代码14 小时前
Docker + Kubernetes 生产环境部署:从容器化到自动扩缩容完整方案
docker·容器·kubernetes
A.说学逗唱的Coke14 小时前
【K8S专题】深入浅出 Kubernetes 探针:存活、就绪与启动探针的原理与实战指南
云原生·容器·kubernetes
筱顾大牛14 小时前
docker教程(从0到1, 一小时入门到精通)
运维·docker·容器
yumgpkpm2 天前
华为昇腾910B上用Kubernetes(K8s)部署LLM和用Docker部署LLM的区别
docker·chatgpt·容器·stable diffusion·kubernetes·llama·gpu算力
雪可问春风2 天前
docker环境部署
运维·docker·容器
AI攻城狮2 天前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc