K8S中的学区招生简章和学区房—污点和容忍

kubernetes 集群搭建好后 node 一直处于 NotReady 状态 kubernetes 集群搭建好后 node 一直处于 NotReady 状态 1. 问题描述 kubectl get node NAME STATUS ROLES AGE VERSION izm5e3cntl0pztm4dj3phrz NotReady master 69s v1.15.4 根据 kubelet 状... 阅读详情

前言

在刚开始接触到K8S的时候,曾经遇到了一个卡住我两天的一个问题,情况就是我要创建一个三节点的zookeeper,但是创建后发现只有两个节点能够正常调度,有一个节点总是无法调度,如下图所示:

当时一直通过日志想了解到底是哪里的问题,结果后来经高人指点才知道是K8S的亲和性以及污点造成的。具体的原因是zookeeper的yaml文件中由于亲和性的配置,导致zookeeper的实例一个节点上只能有一个,而5台机器的K8S集群,有三台机器被打上了污点,导致无法被调度,这就造成了三个zookeeper实例只能调度两个,总有一个节点无法调度。

亲和性后续的文章我们再来讲解,今天的文章来说说K8S的污点(taint)以及与之对应的例外配置容忍(tolerations)。

正文

回到今天的文章的标题,结合当前的学区的招生简章,来详细说明下K8S中的污点和容忍相关的知识,方便大家理解。

学区招生简章

当K8S这个学区(集群)刚建立的时候,几所学校(节点)开始对外招生(应用实例),开始的时候人少的时候一切安好,没有任何问题,也没有任何限制措施,大家根据自己的喜好来挑选学校。但是时间长了之后,就会出现学校学生不均衡的问题,很多学校尤其是好学校(例如K8S主节点)招生明显超过了自身的负载,严重影响教学质量。那有什么办法能解决学生分配的问题呢?

此时,K8S学区就开始考虑针对不同的学校进行不同的招生策略,主要由下面三种方式:

  • 只出不进:这种情况下,学校不招收新的学生,已经在学校的学生则继续在学校学习知道毕业。

  • 全部清除:这种情况比较极端,新的学生不招收,旧的学生也全部遣散,一般情况下是学校进入维修模式(服务器出问题)或者将资源留给特别的学生,比如说学校附近有学区房的学生(例如K8S的系统资源)

  • 尽量不进:这种情况下,学校原则上是尽量不招新生了,但是如果特殊情况下必须要进这所学校,也可以接收新生。

污点详解

上面就是现实情况下的学校招生简章,对应到K8S中就是今天讲的主要内容:污点(taint)

污点这个名字起得很有特点,开始我也不是很理解,后来想一下,其实可以这么理解,污点就算是节点上的一个标签,应用的pod在部署的时候会对节点进行政审,如果某些污点不满足需求的话,那么就无法部署在该节点。

针对学区招生简章三种方式映射到K8S的污点就分为如下三种模式:

  • 只出不进-NoSchedule:如果Node上有NoSchedule污点,而Pod上不带相应容忍,Kubernetes就不会调度Pod到这台Node上。

  • 全部清除-NoExecute:如果Node上有NoExecute污点,这时已经在Node上运行的Pod会从Node上驱逐掉,没有运行在Node的Pod不能被调度到这个Node上。

  • 尽量不进-PreferNoSchedule:如果Node上有PreferNoShedule污点,Kubernetes会尽量不调度Pod到这个Node上。

污点组成: key、value及一个effect三个元素

格式如下:

<key>=<value>:<effect>

下面来看一下master节点上NoSchedule的例子:

最后再来看看操作taint相关的命令:

# 设置污点,能达到上面图片的那个效果
kubectl taint nodes k8s-server5 node-role.kubernetes.io/master=:NoSchedule

# 查看污点状况
kubectl describe node k8s-server5|grep Taints

# 删除污点(两种方式皆可)
kubectl taint node k8s-server5 key:NoSchedule-

kubectl taint node master1 node-role.kubernetes.io/master:NoSchedule-

另外K8S针对node状态预置了代表node问题的污点,node控制器当某种条件成立的时候会自动的给node打上污点。下面是其中内置的污点(准确的是污点的key):

# node不是ready状态。对应于node的condition ready=false.
node.kubernetes.io/not-ready

# node controller与node失联了。对应于node的condition ready=unknown
node.kubernetes.io/unreachable

# node磁盘空间不足
node.kubernetes.io/out-of-disk

# :node的网络中断
node.kubernetes.io/network-unavailable

# node不可调度状态
node.kubernets.io/unschedulable

# kubelet是由外部云提供商提供的时候,刚开始的时候会打上这个污点来标记还未被使用。当cloud-controller-manager控制器初始化完这个node,kubelet会自动移除这个污点
node.cloudprovider.kubernetes.io/uninitalized

学区房

上面说了学区的招生简章,但是如果在这个简章下还想进相应的学校,那就需要一定的条件了,那这个条件大家肯定都很熟悉,没错就是学区房了。只要有了学区房,就可以无视学校的招生限制而直接入学了。

容忍

在K8S中,学区房对应的其实就是容忍(tolerations)。通过在创建pod的时候设置容忍,可以绕过匹配污点的限制而在该node上进行pod的部署。

Pod对象的容忍度可通过其spec.tolerations字段进行添加,根据使用的操作符不同,主要有两种可用的形式:一种是与污点信息完全匹配的等值(Equal)关系;另一种是判断污点信息存在性(Exists)的匹配方式。

下面看看几种tolerations方式配置的例子:

# 等值判断,key、value以及effect信息需要完全匹配
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

# 存在性判断,key存在且effect相同,忽略value值的判断
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 3600

# 不指定key值时,表示容忍所有的污点key(master节点也会部署)
tolerations:
- operator: "Exists"

# 不指定effect值时,表示容忍所有的污点effect
tolerations:
- key: "key"
  operator: "Exists"

最后Kubernetes的核心组件通常都要容忍部分污点,以确保其相应的控制器能够无视此类污点而在节点上部署相应的关键性Pod对象,例如kube-proxy等kube-system空间下的Pod。

下图就是某核心Pod的tolerations配置:

总结

本文主要讲述了Taint(污点)和 Toleration(容忍)相关的定义以及用法,从上文可以看出这两个功能的目的是优化pod在集群间的调度。

这跟节点亲和性类似,只不过它们作用的方式相反,具有taint的node和待部署的pod之间是互斥关系,可以通过toleration可以改变taint对Pod部署的影响。

而具有节点亲和性关系的node和逮捕书的pod之间是相吸的关系。这两者相互配合共同完善了Pod的调度机制,也满足了在不同场景下Pod的调度需求。

最后,如果想一起入门学习K8S的小伙伴,欢迎点赞转发加关注,下次学习不迷路,我们在K8S的路上共同前进!

最后挂个公众号二维码,公众号的文章是最新的,优快云的会有些滞后,想追更的朋友欢迎大家关注公众号,谢谢大家支持。 

公众号地址:

在Mac下配置用VSCode编写C/C++程序的环境 前言    最近需要编写一些C/C++程序,由于体量都不是很大所以想要追求一个轻量化的编辑和编译环境,于是想起了在Dock栏吃灰的VSCode。通过查找资料,包括VSCode的官方文档,最终配置实现了Mac下基于VSCode的C/C++编辑环境搭建。 正文    在配置环境之前先检查一下机器上都安装了什么C++编译器,通过以下两条命令可以查看是否安装了g++/clang编译器,本人两种编... 阅读详情

相关推荐

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 939

03-kubernetes-faq-node节点故障排查

一

段帅星的博客 1832

Python 爬取网页文字并保存为 txt 文件教程

将要爬取的网页网址赋值给变量url。

2403_89537385的博客 2788

k8s Pod调度失败(NoExecute)排查及分析

问题背景k8s集群,总共5个节点,信息如下所示:集群污点k8s版本系统版本master无1.14Centos 7.1work1有1.14Centos 7.1work2无1.14Cento...

u012516914的专栏 1万+

手把手教你用WKT文件在Petrel中创建自定义坐标系统(附CGCS2000转换模板)

本文详细介绍了如何在Petrel软件中利用WKT文件创建自定义坐标系统,并重点提供了CGCS2000坐标系的完整转换模板与实战步骤。通过解析坐标系统的三大支柱(大地坐标系、投影坐标系、基准转换)和WKT文件结构,指导用户从零开始构建适用于本土化项目的坐标系统,确保地质建模与空间数据处理的精度与一致性。

gpt4scribbler的博客 274

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

【NoReady】Kubernetes集群新添加node节点出错排查记录

【NoReady】Kubernetes集群新添加node节点出错排查记录

宝耶需努力的技术分享博客 3873

搬运机器人系列编程:KUKA KR QUANTEC_(2).KUKA KRL语言编程基础

定义一个函数END!调用函数PRINT "结果: ", result!定义一个过程PRINT msgEND!调用过程printMessage("欢迎使用 KUKA 机器人")!定义搬运零件的起始位置和目标位置!定义焊接路径的各个点!定义喷涂路径的各个点KUKA Robot Language (KRL) 是一种专门为工业机器人设计的编程语言,具有结构化编程、丰富的库函数、实时性以及集成性等特点。

zhubeibei168的博客 1245

解决镜像因为“Tolerations:node.kubernetes.io/not-ready:NoExecute for 300s”处于“Pending”状态

参考文章:k8s基本概念-配置调度策略之(Taints-and-Tolerations) https://blog.51cto.com/nosmoking/2097380 问题现象:新创建的rc,查看对应的pod一直处于Pending状态 [root@master contos7文件]# kubectl get pods NAME READY STATUS RESTA...

shenqh 2万+

099、多摄融合与变焦系统:广角到长焦的无缝切换算法

本文分享了多摄融合与变焦系统开发中的实战经验和关键挑战。作者通过一个旗舰机项目案例,揭示了广角到长焦切换时画面抖动问题的根源——融合算法误将视差当作运动补偿,并提出"视差冻结窗口"的解决方案。文章总结了三大多摄融合难点:物理视差处理、亮度差异补偿和切换时机把控,详细阐述了分层架构设计、融合权重计算等核心技术。同时强调了产线校准的重要性,并给出五项实用建议:允许边缘鬼影保留、参数场景化配置、加强产线检测、完善调试接口,以及合理运用AI技术。全文展现了多摄融合技术在时间、空间和感知维度上的复杂平衡艺术。

sundong_81的博客 45

【Flink on k8s】- 1 - Flink Kubernetes Operator 简介 2023

Flink Kubernetes Operator 可以与 Kubernetes 的其他功能和工具集成,可以帮助用户快速定位和解决问题。Flink Kubernetes Operator可以在Kubernetes上实现高可用性,以确保 Flink 集群的稳定性和可靠性。Flink Kubernetes Operator 可以快速地部署 Flink 集群,而无需手动配置和管理集群。Flink Kubernetes Operator可以将Flink集群与其他应用程序隔离,以避免资源争用和干扰。

欢迎来到我的博客,一起探索代码里的世界! 1344

K8S节点taint-NotReady问题解决

记录节点NotReady排查过程 $ kubectl get nodes -o wide |grep NotReady $ kubectl describe node [node-ip] # Message: Node xxx which was running pod xxx is unresponsive #连接到node节点,并检查各节点服务是否正常 $ ps aux|grep kube-proxy $ ps aux|grep kubelet $ ps aux|grep docker $ ps au

u013092227的博客 2720

什么是 SAP S/4HANA 的 VDM Layering Architecture 的 CDS Hierarchy View

当涉及SAP S/4HANA的CDS Hierarchy View时,我们正在谈论一种高级数据建模技术,用于构建层次结构化的数据视图,以支持树状和分层数据的处理和分析。CDS(Core Data Services)是SAP的一种数据建模和定义语言,而CDS Hierarchy View则是CDS的一个重要组成部分,用于处理层次数据,如组织结构、产品分类、地理区域等。首先,您可以使用CDS语言创建一个新的CDS Hierarchy View,定义产品分类的层次结构。您还可以定义其他与库存相关的属性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

智能客服四象限协同模型:规则Bot与生成式AI的工程化共存

智能客服系统正从单一技术选型走向混合架构演进,其核心在于理解‘确定性工具’与‘不确定性工具’的本质差异。规则型聊天机器人擅长结构化任务、低延迟响应和强合规控制,而生成式AI(如Llama-3)则在语义理解、跨文档推理与自然语言润色上具备不可替代性。二者并非替代关系,而是通过决策确定性与信息可结构化程度构成的二维坐标进行科学分工。该协同范式显著提升法律咨询准确率、降低人工接管率,并支撑房产、金融等强监管行业的合规落地。本文详解如何将大模型能力封装进可审计、可熔断、可编排的服务流,实现真正面向业务的AI就绪。

weixin_33985507的博客 423

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Kubernetes Node Not Ready Error

Kubernetes Node Not Ready Error

weixin_43230594的博客 2006

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

k8s 污点和容忍度

污点taints是定义在节点之上的键值型属性数据,用于让节点拒绝将Pod调度运行于其上, 除非该Pod对象具有接纳节点污点的容忍度。而容忍度tolerations是定义在 Pod对象上的键值型属性数据,用于配置其可容忍的节点污点,而且调度器仅能将Pod对象调度至其能够容忍该节点污点的节点之上,如图所示 节点选择器nodeSelector和节点亲和性nodeAffinity两种调度方式都是通过在...

包泽旭 573

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Pod异常状态排错

有时候服务部署成功运行过,但在某个时候节点突然挂了,此时就会触发驱逐,创建新的副本调度到其 它节点上,对于已经挂载了磁盘的 Pod,它通常需要被调度到跟当前节点和磁盘在同一个可用区,如果 集群中同一个可用区的节点不满足调度条件,即使其它可用区节点各种条件都满足,但不跟当前节点在 同一个可用区,也是不会调度的。太短,容器启动慢,导致容器还没完全启动就开始探测,如果 successThreshold 是默认值 1,检查失败一次就会被 kill,然后 pod 一直这样被 kill 重 启。

qq_31055683的博客 6622

kubernetes(k8s)集群初始化遇到的问题

使用kubeadm init 命令进行集群初始化,起初由于对init 后面的几个参数的一次不了解,处于好奇未添加–pod-network-cidr 参数,因此造成添加flannel 插件时报错:Error registering network: failed to acquire lease: node “node02” pod cidr not assigned 再不进行重新初始化的情况下解决方法: 修改/etc/kubernetes/manifests/kube-controller-manager.

rockstics的博客 3700

k8s 开启临时容器进行debug

文章目录什么是临时容器?开启EphemeralContainersmaster节点上操作修改apiserver修改controller-manager修改kube-scheduler所以节点上操作修改kubelet验证创建pod的副本进行调试故障 工作中在调试集群中未包含bash sh等工具的pod往往比较麻烦,k8s提供了一个临时容器供我们添加到要调试的pod中进行工作。 什么是临时容器? 临时容器与其他容器的不同之处在于,它们缺少对资源或执行的保证,并且永远不会自动重启, 因此不适用于构建应用程序。 临

Kason_iWiki 2137

[转帖]新手必读,16个概念入门 Kubernetes

新手必读,16个概念入门 Kubernetes https://www.kubernetes.org.cn/5906.html 2019-09-29 22:13中文社区分类:Kubernetes教程/入门教程阅读(333) 作者:汉科云团队 评论(0) Kubernetes是Google开源的容器集群管理系统,是Google多年⼤规模容器管理技术Borg的开源...

weixin_30265103的博客 907

K8S亲和性调度2

前面一篇文章讲述了:K8S亲和性调度1,现在仔细回头去看看,发现有很多地方没有理解透彻,不够深入,今天我们重新来理解下亲和性调度这一块知识。 一般情况下我们部署的 Pod 是通过集群的自动调度策略来选择节点的,默认情况下调度器考虑的是资源足够,并且负载尽量平均,但是有的时候我们需要能够更加细粒度的去控制 Pod 的调度,比如我们内部的一些服务 gitlab 之类的也是跑在Kubernetes集群上的,我们就不希望对外的一些服务和内部的服务跑在同一个节点上了,害怕内部服务对外部的服务产生影响;但是有的时候我

3203

使用kubeadm方式部署集群时,Node节点一直处于NotReady状态、coredns处于pending状态的解决思路与故障排查

在官方文档中 https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/ 存在以下说明: 也就是说,当集群中coredns处于pending状态时,也就说明了网络插件没有安装好。 只有网络插件安装后,coredns组件才会启用。这也就解释了为什么节点会一直处于NotReady状态。 问题的主要原因就是网络插件没有安装成功。此时你应该将排查重点锁定在网络插件上。 比如,我在

阿文的博客 7037

Kubernetes之Pod镜像拉取策略配置

一、默认的镜像拉取策略 1.1 当镜像指定的标签是latest时,默认策略是每次都下载更新 编辑pod-imagepullpolicy.yaml文件,内容如下: apiVersion: v1 kind: Namespace metadata: name: dev --- apiVersion: v1 kind: Pod metadata: name: pod-image-pull-policy namespace: dev labels: user: redrose21.

花&败 4677

综合实践-K8S 部署 LNMP 架构 ECShop

在 K8s 中部署 LNMP 架构 ECShop 商城。部署 NFS 服务器,提供共享目录 /ecshop部署 NFS 动态卷制备,存储类型 ecshop创建命名空间存储卷的命名空间部署RBAC权限部署 NFS Provisioner 应用部署 NFS StorageClass商城相关资源部署在 ecshop 命名空间后续使用ecshop用户管理 ecshop 命名空间中资源。配置 ingress 规则,通过 https://shop.laoma.cloud 访问商城。

fb_12345的博客 171

k8s -- 拉取镜像nginx

Pulling image "docker.1ms.run/library/nginx:alpine" 是拉取镜像的日志。IP: 10.244.0.70 这个是这个pod的访问ip。Type Status 下面的状态是pod的启动情况。10.244.0.70:80 这个地址只有集群内部的机器可以访问,但是外部访问是不行的。192.168.129.136是这个k8s节点的ip,31128是映射的端口。需要用 service 功能来做端口映射。

DGH2430284817的博客 132

K8S学习-基础组件

本文系统梳理Kubernetes核心组件与架构,涵盖Pod、Service、Ingress、ConfigMap、Secret、Volumes、Deployment、StatefulSet等关键概念,解析Master-Worker架构下各组件职责(如ApiServer、Scheduler、Controller Manager、Etcd、Kubelet、Kube-proxy、Container Runtime),并介绍MiniKube等轻量部署方案及Portainer可视化运维工具,助力实现“学以致用”的K8S

tuguai7887的博客 192
上一篇: K8S部署方式选择——没有最好的,只有最合适的
下一篇: 漫谈RocksDB(四)存储结构——翩若惊鸿,婉若游龙
梦回从前
博客等级 码龄18年 65粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值