当前位置: 首页 > news >正文

k8s污点与容忍

1.前言

污点是给node节点打上污点标签,使得pod不能往该node节点上调度,污点有三种模式,分别是NoSchedule、PreferNoSchedule、NoExecute,容忍是给pod打上和node节点一样的污点标签,使pod能调度到带有该污点标签的node节点上

2.污点

NoSchedule:禁止所有pod往该node节点上调度,原本已经在节点上的pod没有影响

PreferNoSchedule:尽量不将pod调度到该节点上,但还是可以接受pod的调度,但是pod的调度一般都会优先调度到没有污点的node上

NoExecute:禁止所有pod往该node节点上调度,原本已经在节点上运行的pod也将被驱逐出去

接下来使用一下以上的三个污点模式,一个节点可以被设置多个污点

kubectl taint node 节点名称 key=value:effect

kubectl taint node k8s-node01 web=true:NoSchedule

kubectl taint node k8s-node02 app=true:PreferNoSchedule

kubectl taint node k8s-node01 web=true:NoExecute

查看节点中的污点

kubectl describe node k8s-node02

接下来说一下去除污点

删除特定的一个污点

kubectl taint node k8s-node01 web=true:NoSchedule-

也可以不指定value去删除

kubectl taint node k8s-node02 app:PreferNoSchedule-

删除关于该key的所有污点

kubectl taint node k8s-node01 web-

 3.容忍

如果一个节点有多个污点,则pod必须包含该节点上的所有污点标签才可以被调度到该节点上,当然了PreferNoSchedule的污点标签是不影响的,接下来展示一下容忍的使用

新建一个yaml文件

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: labels:app: nginxname: nginxnamespace: default
spec:replicas: 3progressDeadlineSeconds: 600minReadySeconds: 10strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdateselector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec: containers:- name: nginximage: nginx:1.21imagePullPolicy: IfNotPresentports:- containerPort: 80resources:requests:memory: 50Micpu: 0.5limits:memory: 100Micpu: 1

这个yaml文件中没有设置容忍,接下来给node节点打上污点

kubectl taint node k8s-node01 web=true:NoSchedule

kubectl taint node k8s-node02 key1=value1:NoExecute

给两个node节点都打上了不可调度的污点,现在来执行一下yaml文件看一下效果

kubectl apply -f deployment-nginx.yaml

查看一下pod的状态

kubectl get pod -o wide -n default -l app=nginx

可以看到所有三个pod都是pending状态,node列也显示是none,说明没有适合的node给pod调度

现在更改一下yaml文件,给pod加上k8s-node01的容忍策略

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: labels:app: nginxname: nginxnamespace: default
spec:replicas: 3progressDeadlineSeconds: 600minReadySeconds: 10strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdateselector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec: containers:- name: nginximage: nginx:1.21imagePullPolicy: IfNotPresentports:- containerPort: 80resources:requests:memory: 50Micpu: 0.5limits:memory: 100Micpu: 1tolerations:   #配置容忍策略- key: web      #k8s-node01中配置的污点keyoperator: Equal  #Equal为等于,即key=value,使用Equal为精确匹配,只有当节点上 key 的值等于 value 时,才可以容忍这个 Taint,还可以使用Exists模糊匹配,使用Exists不用配置value值,只要节点上存在对应的 key,就可以容忍这个 Taintvalue: "true"  #k8s-node01中配置的污点valueeffect: NoSchedule   #k8s-node01中配置的污点effect

重新加载一下 yaml文件配置

kubectl apply -f deployment-nginx.yaml

查看一下pod的状态

kubectl get pod -o wide -n default -l app=nginx

 可以看到增加了k8s-node01污点的容忍策略后,pod都调度到了k8s-node01节点上

容忍策略以上四个常用的配置项外,还有一个配置项tolerationSeconds,此配置项在污点模式为NoExecute时使用,tolerationSeconds 的作用是为了在节点的 Taint 被移除之前,给予一定的时间让 Pod 在该节点上运行。这对于一些需要在节点上运行一段时间的任务非常有用,例如数据迁移、数据备份等

http://www.lryc.cn/news/89854.html

相关文章:

  • 市面上有哪些软件可以结合agentgpt的?众包平台结合的好处!
  • 【js】对象属性的拦截和Proxy代理与Reflect映射的用法与区别
  • Yolov8涨点神器:ODConv+ConvNeXt提升小目标检测能力
  • git代码回滚是使用reset还是revert
  • 深入理解Java ThreadLocal及其内存泄漏防范
  • 介绍10款ChatGPT替代产品
  • 数字逻辑 期末
  • MT4交易外汇平台有哪些优势?为何是外汇投资首选?
  • 问卷调查工具实力榜单发布
  • javascript中property和attribute有什么区别?
  • 快速上手kettle
  • Leetcode 399. 除法求值
  • kotlin协程并发/并行与串行互相切换,CoroutineScope与await
  • 初识linux之简单了解TCP协议与UDP协议
  • 【String——简单使用】
  • Python下Taobao封装API接口的优势
  • LeetCode 49 字母异位词分组
  • ( 链表) 142. 环形链表 II——【Leetcode每日一题】
  • 论文解读 | 基于改进点对特征的点云6D姿态估计
  • Shell脚本while循环语句应用
  • Kubernetes Dashboard + Ingress 及其 yaml 文件分析
  • 【SpringCloud组件——Nacos】
  • pinia状态管理 用法
  • Oracle客户端版本安装
  • 基于Android studio二手车交易系统app
  • 【LCD应用编程】绘制点、线、矩形框
  • 第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向
  • 【MySQL】MySQL主从同步延迟原因与解决方案
  • 学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】
  • 测试计划模板一