kubernetes中Pod调度-Taints污点和污点容忍

一、污点的概念

所谓的污点,是给k8s集群中的节点设置的,通过设置污点,来规划资源创建是所在的节点

污点的类型 解释说明
PreferNoshedule 节点设置这个污点类型后; 表示,该节点接收调度,但是会降低调度的概率
NoSheule 表示,该节点不接收新的调度,以前有的资源,也依然存在
NoExecute 表示,不接收信息的调度,驱逐以前的资源调度

根据节点设置污点

二、污点的管理

1、查看污点

查看过滤数据的前后两行

root@master deployment-demo#kubectl describe nodes | grep -i taint -A 2 -B 2

volumes.kubernetes.io/controller-managed-attach-detach: true

CreationTimestamp: Fri, 29 Mar 2024 16:03:58 +0800

Taints: node-role.kubernetes.io/master:NoSchedule

Unschedulable: false

Lease:

--

volumes.kubernetes.io/controller-managed-attach-detach: true

CreationTimestamp: Fri, 29 Mar 2024 16:09:38 +0800

Taints: <none>

Unschedulable: false

Lease:

--

volumes.kubernetes.io/controller-managed-attach-detach: true

CreationTimestamp: Fri, 29 Mar 2024 16:39:55 +0800

Taints: <none>

Unschedulable: false

Lease:

2、创建污点

2.1 创建资源

root@master deployment-demo# cat taint.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: taint-demo

spec:

replicas: 5

selector:

matchLabels:

k8s: dolphin

template:

metadata:

name: pod01

labels:

k8s: dolphin

spec:

containers:

  • name: c1

image: nginx

ports:

  • containerPort: 80

root@master deployment-demo# kubectl apply -f taint.yaml

deployment.apps/taint-demo created

我们可以看到资源是随机分布的

2.2 创建污点

创建污点有两种方式:

  • 第一种:key=value:污点类型
  • 第二种:key:污点类型

创建污点

root@master deployment-demo# kubectl taint node node1 dolphin:NoExecute

查看状态,全都被驱离到node2节点上了

2.3 删除污点

root@master deployment-demo#kubectl taint node node1 dolphin:NoExecute-

node/node1 untainted

我们看到删除pod,node1节点又能重新分配pod资源了

2.4 修改污点

root@master deployment-demo# kubectl taint node node1 dolphin:NoExecute

root@master deployment-demo# kubectl taint node node1 dolphin2=123:NoExecute --overwrite

node/node1 modified

3、 污点容忍tolerations

3.1 污点容忍的概念

通过上文,我们知道可以通过给k8s集群节点设置不同类型的"污点",来控制资源创建的节点范围;

那么,k8s也同时提供了"污点容忍",就是即便你的节点设置了"污点",我的资源也可以创建在这个节点上的能力;

假设:一个节点上有两个污点,但是你创建pod的时候,还想在这个节点上创建,那么你就需要在资源清单中,写如"容忍这两个污点",才会创建成功

3.2 污点容忍案例

上边案例中我们已经创建了2个污点,且创建资源时,node1节点不允许分配资源

3.2.1 修改资源清单,设置污点容忍

root@master deployment-demo# cat taint.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: taint-demo

spec:

replicas: 5

selector:

matchLabels:

k8s: dolphin

template:

metadata:

name: pod01

labels:

k8s: dolphin

spec:

设置污点容忍

**tolerations:

  • key: node-role.kubernetes.io/master # master节点的污点
    effect: NoSchedule #指定污点类型
    operator: Exists #只要匹配到key就满足这个条件
  • key: dolphin
    effect: NoExecute
    operator: Equal
  • key: dolphin2
    value: "123"
    effect: NoExecute
    operator: Equal #key和value都要满足匹配条件**

containers:

  • name: c1

image: nginx

ports:

  • containerPort: 80

root@master deployment-demo# kubectl apply -f taint.yaml

deployment.apps/taint-demo created

通过以上污点容忍配置,我们可以看到三个节点都能分配pod资源了

3.2.2 无视所有污点配置

root@master deployment-demo# cat taint.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: taint-demo

spec:

replicas: 5

selector:

matchLabels:

k8s: dolphin

template:

metadata:

name: pod01

labels:

k8s: dolphin

spec:

设置污点容忍

tolerations:

**# 不写污点key的相关属性表示匹配所有key

  • operator: Exists**

containers:

  • name: c1

image: nginx

ports:

  • containerPort: 80
相关推荐
spider_xcxc1 小时前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
窝子面2 小时前
认识Docker与启动容器与镜像的关系
运维·docker·容器
张忠琳14 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
阿里云云原生16 小时前
让 AI Agent 看见正在发生的业务,阿里云 EventHouse 正式商业化
云原生
Elastic 中国社区官方博客16 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
AOwhisky17 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
风曦Kisaki19 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着201319 小时前
docker 安装 ,在centos7.9
运维·docker·容器
微三云 - 廖会灵 (私域系统开发)20 小时前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
骑上单车去旅行21 小时前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka