陈琛容 2025-11-02 14:26:21
每经编辑|陈晓辉
当地时间2025-11-02,,17岁安装包破解版
没问题,这篇关于K8s污点与容忍的文章,我来帮你打造得既有深度又充满吸引力!
k8s调度(du)之taintsandtolerations_27快报corportaint-csdn博客
在Kubernetes的宏伟蓝图中,Pod的调度是一门精妙(miao)的艺术,它(ta)决定了你(ni)的应用程序如何在集群(qun)中安家落户,能否高效、稳定地运行。而在这门艺术中,Taints和Tolerations(污点(dian)与容忍)无疑是最具“个性化”的调度手段之一。
它们为我们提供了前(qian)所未有的细粒度控制能力,让管(guan)理员能够巧(qiao)妙地“劝(quan)退”不合适的Pod,并“欢迎”那些能够“忍受”特定环境的Pod。今天,就让我们跟(gen)随Corportaint的视角,一起深入K8s的(de)调度世界,揭开Taints和Tolerations的神秘面纱,看看它们是如何为集群注入智慧和灵活性的。
想象一下,你的Kubernetes集群就像一个大型的酒店,每个节点(Node)都是一个(ge)房间(jian)。正(zheng)常情况下,任何住客(Pod)都可以根据房型(资源需(xu)求)和空闲情况(节点可(ke)用性)来选择房间。有些房(fang)间可能对某些住客有特殊的“要求”,比如“此房间禁止宠物入住”或者“此房间仅限吸烟者”。
这些特殊的“要求”,在K8s中就(jiu)对应着Taints(污点)。
Taints是施(shi)加在节点上的一种标记,它描述了该节点“不适合”哪些类型的Pod。你可以将其理解为节点的一种“个性化宣言”,宣告着自己的独特之处。当一个节点被打上Taint后,默认情况下,任何没有相应Toleration(容忍)的Pod都将无法被调度到这个节点上。
这就像酒店的“禁(jin)止宠物入(ru)住”标识,如果没有特殊的“宠物友好”证明(Toleration),携带宠物的住客(Pod)就不能入住。
Taints的核心在于其键值对(Key-ValuePair)结构,并附加一个Effect(效果)。一个典型的Taint看起来是这样的:key=value:Effect。
Key和Value:这部分是用来描述Taint的具体含义。例如,你可以用dedicated=gpu:NoSchedule来标记一个GPU节点,表示(shi)这(zhe)个节点是专门为GPU工作负载准备的。Key和Value的组(zu)合可以非常灵活,你可以(yi)根据自己的需求(qiu)定义。
Effect:这是Taint最(zui)关键的部分,它定(ding)义了(le)当Pod没有匹配的Toleration时,调度(du)器会如何处理。目前,K8s主要支持三(san)种Effect:NoSchedule:这是最常见的Effect。如果一个节点有Taint,而Pod没有匹配的Toleration,那么这个Pod就不会被调度到这个节点上。
已经运行在该节点上的Pod不受影响。这就像一个“禁入”标识,新来的(de)“访客”需要出示“通(tong)行证”。PreferNoSchedule:这个(ge)Effect稍微“温和”一些。它会倾向于不将没有匹配Toleration的Pod调度到该节点。
但如果调度器找不到其他更合适的节点,它(ta)仍然可能将Pod调度(du)到这个带有Taint的节点上。这就像一个“婉拒”的标识,虽然不欢迎,但实在(zai)没地方了,也只能勉强接收。NoExecute:这是最“严厉”的Effect。如果一个节点有Taint,并且Effect是NoExecute,那么(me):新来的Pod:没有匹配Toleration的Pod将(jiang)不会被调度到这个节点。
已运行的Pod:如果一个Pod已经运行在该节点上,而这个节点的Taint突然被加上了NoExecuteEffect,那么这(zhe)个Pod将会被驱(qu)逐(evicted)下线。这就像一个(ge)“立即清场”的命令,所有不符合条件的都必须离开。
Taints和Tolerations的引入,并非为了增加K8s的复杂性,而是为了解决实际生产环境(jing)中诸多棘手的调度问题。它(ta)们主要体现在以下几个方面:
GPU节点:很多(duo)机器学(xue)习、深度学习等(deng)工作负载需要GPU加速。你可以为带有GPU的节点打(da)上dedicated=gpu:NoSchedule的Taint,然后只允许那些明确声明需要GPU的Pod(即拥有相应Toleration的Pod)调度(du)到这(zhe)些节点,从而(er)确(que)保GPU资源不被非GPU工作负载占用(yong),实现(xian)高效利用。
高可用性节点/特(te)殊硬件节点:某些节点可能拥有(you)特殊的硬件(如FPGA、TPM)或者配置(如高内存(cun)、SSD盘(pan)),你可能希望将特定的、对这些(xie)硬件有依赖的工作负载调度到这些节点上。通过Taints,你可以将这些节点标记出来,并限制只(zhi)有目标Pod才能(neng)进入。
当(dang)需要对某个节点进行维护(例如(ru),升级操作系统、打(da)补丁、重启)时(shi),你可以给该节点打上node-maintenance=true:NoSchedule的Taint。这样,新的Pod就不会被(bei)调度到这个节点上,而已经运行(xing)的Pod则会继续运行(xing),直到它(ta)们被滚动更新或手动驱逐。
待维护完成后,再移除Taint,节点就可以恢复正常接收新Pod。对于NoExecute,可以实(shi)现更主动的节点“清空”。例如(ru),当一个节点出现临时性的故障(但不至于完全宕机),你可以(yi)迅速为其打上unhealthy=true:NoExecute的Taint,强(qiang)制将所有运行在其上的Pod迁移到其(qi)他健康节点,从而保证服务的连续性(xing)。
某些工作负载可能对(dui)安全性有极高的要求,不希望部署在与其他工作负载混用的节点上(shang),以防止潜在的安全(quan)风险。你(ni)可以为这些节点设置特定的Taint,并仅允许目标Pod具有(you)相应的Toleration。
某些高性能节点(如(ru)带GPU的节点)成本较高。通(tong)过Taints,你可以确保这些昂贵的资源被最需要它们的工作负载所(suo)使用,避免了低价值的Pod占用这些资源,从而实现成本的精细化(hua)控制。
在Kubernetes中,给节点打Taint通常是通过(guo)kubectltaint命令来完成的。这个命令非常直观,你可以直接指定节点名称、Taint的Key、Value以及Effect。
例如,要(yao)给名为node-1的节点打上dedicated=gpu:NoSchedule的Taint,你可以执行:
kubectltaintnodesnode-1dedicated=gpu:NoSchedule
要移除这个Taint,只需在Taint的末尾(wei)加上(shang)一个减号-:
kubectltaintnodesnode-1dedicated=gpu:NoSchedule-
如果你想给一个节点打上多个Taint,可以直(zhi)接连续执行kubectltaint命令,或者(zhe)在一个命令中指定多个Taint(虽然通常不推荐,但理论上可行)。
Taints是节点层面的属性,一旦打上,所有未具备相应Toleration的Pod都将被“拒之门外”。这为集群(qun)管理员提供了一个强大的“守(shou)门员”角色(se),能够根据集群的实(shi)际情况和业务需求,精确地控制Pod的流向,确保资源的合理(li)分配和服务的稳定运行。
在下一部分,我们将聚焦(jiao)于Pod如何“理解”并“接纳”这(zhe)些Taint,即Tolerations的奥秘,以及它们与Taints如何协同工作,共同构建Kubernetes智能调度的新维度。
k8s调度之taintsandtolerations_27快报corportaint-csdn博客
在上(shang)一部分,我们深入了解了KubernetesTaints(污点)的强大之处,它们如同(tong)节点的“个性化宣(xuan)言”,赋予了(le)管理员(yuan)精细控制Pod调度的能力。污点并非“单行道(dao)”,它需要(yao)有与之相呼应的“对话者”——Tolerations(容忍(ren))。
如果说Taints是节点对Pod的“挑剔”,那么Tolerations就是Pod对节点的“包容”和“理解”。没有Tolerations的配合,Taints就如同空谈,无法实现其真正的调度价值。今天,Corportaint将带您继续探索Taints和(he)Tolerations的协同作用,揭示Pod如何“接纳”那些带有“个性”的节(jie)点。
Tolerations:Pod的“通行证”与“保险箱”
Tolerations是附加在Pod上的一个属性,它允许Pod“容忍”某些带有特定Taint的节点。也就是说,即使一个节点被打上了Taint,如果Pod拥有与之匹配的Toleration,那么这个Pod仍然有可能被调度(du)到该节点上。
Tolerations就像Pod的“通行证”,让它(ta)们能够进入那些原本“不欢(huan)迎”它们的地方(fang)。
一个Pod的Tolerations定义在pod.spec.tolerations字段中,它(ta)是一个列表,可以包含(han)零个或多个Toleration定义。每个Toleration的结(jie)构与Taint类似(shi),也包含Key、Value和Operator(操作符),并且可(ke)以指定Effect。
tolerations:-key:"key"operator:"Equal"value:"value"effect:"NoSchedule"
我们来详细解析一(yi)下Toleration的各个字段:
Key,Value,Effect:这三个(ge)字段是用来匹配节点上的Taint的。当Pod的Toleration的Key、Value和Effect与节点上的Taint完全一致时,这个Toleration就被认为匹配了(le)该Taint。
Operator:这个字段决定了Key和Value之间的匹配方式。它有几种可能的取值:Equal:这是默认的(de)操作符。当operator为(wei)Equal时,Toleration的key、value和(he)effect必须与节点Taint的key、value和effect完全相(xiang)等,才能认为匹配。
Exists:当operator为Exists时,只要节点Taint的key和(he)effect与Toleration中的key和effect相匹配即可,无需关心value。这意味着,只要节点上存在(zai)带有指(zhi)定Key和Effect的Taint,这个Toleration就可以(yi)匹配。
如(ru)果Toleration中省(sheng)略了value,并且operator是Exists,那么它会匹配所有具有该Key和Effect的Taint。
Tolerations的“三剑客”:匹配Taint的方式
Tolerations的魔力在于它们与Taint的匹配逻辑。理解这一点,是掌(zhang)握K8s调度精髓的关键。Pod的Tolerations可以用来(lai)匹配三种类型的TaintEffect:
匹配NoScheduleTaint:如果一个节(jie)点有key=value:NoSchedule的Taint,而Pod有一个key=value:NoSchedule的Toleration,那么Pod可以被调度到这个节点。如果Pod有一个key:Exists:NoSchedule的Toleration,它也可以被调度到这个节点,因为Exists操作符(fu)匹(pi)配了Taint的Key和(he)Effect。
匹配PreferNoScheduleTaint:如果一个节(jie)点有key=value:PreferNoSchedule的(de)Taint,而Pod有(you)一个key=value:PreferNoSchedule或key:Exists:PreferNoSchedule的Toleration,那(na)么Pod可以被调度到这个节点,并且调(diao)度器会倾向于将其调度到这里(如果(guo)满足其他调度规则)。
匹配NoExecuteTaint:这是最关键也最容易被误解的部分。NoExecuteTaint的处理(li)逻辑非常特殊:
对(dui)于新调度进来的Pod:如果(guo)一个Pod没有匹配NoExecuteTaint的Toleration,它不(bu)会被调度到该(gai)节点。对于已在节点上运行的Pod:如果一个节点被添加了NoExecuteTaint,而Pod没有匹配该Taint的Toleration,那么该Pod将会被驱逐(evicted)。
特别注意:NoExecuteTaint的匹配(pei)逻辑是:key,value,effect必须匹配(pei)。如果Toleration的operator是Exists,并且effect是NoExecute,那(na)么它会匹配所有具有NoExecuteEffect的Taint,无论Value是什么(me)。
NoExecuteTaint的一个重要附加属性:tolerationSeconds当Pod拥有NoExecuteTaint的Toleration时,你可(ke)以额外指定一个tolerationSeconds字段。这个字段的含义是:当Pod检测到节点上有NoExecuteTaint时,它不会立即被驱逐,而是会等待tolerationSeconds指定的时长,然后才被驱逐。
这为Pod提供了一个“缓冲期”,允许它在节点(dian)故障或维护期间,有时间完成当前的关键任(ren)务,或者被迁(qian)移到另一个节点。
Taints和Tolerations的协同作战:构建智能调度
Taints和Tolerations的价(jia)值,在于它们能(neng)够协同工(gong)作,实现Kubernetes调度策略的精细化和(he)智能化。这种协同可以带来以下几个方面的优势:
保证特定工作负载的独享性:如前所述,你可以为GPU节点打上dedicated=gpu:NoSchedule的Taint。然(ran)后,为需要GPU的Pod定义相应的Toleration:
tolerations:-key:"dedicated"operator:"Equal"value:"gpu"effect:"NoSchedule"
这样,只有拥有该Toleration的Pod才能被调度到GPU节点,而其他(ta)普通Pod则会被“挡(dang)在门外”,确保了GPU资源的专属和高效利用。
NoSchedule:通过NoScheduleTaint,你可以明确地告诉调度器,“这个节点不适合这类Pod”。例如,将某些存储敏感性高的Pod限制在特定的、有高保障存储的节点上,而其他的普通Pod则不被允许进入。PreferNoSchedule:这提供了一种更灵活的策略。
你可以标记一些节点(例如,正在进行软件更新,但还(hai)能运行少量Pod的(de)节点),并使用PreferNoScheduleTaint。这样,调度器会尽(jin)量避免将新的、不重要的Pod调度到这些节点,但如果实在没有其他选择(ze),也允许少量的Pod入驻,以最大限度地利用集群资源。
优雅地处理节点故障(zhang)和维(wei)护:NoExecuteTaint配合tolerationSeconds,是实现高可用性和平滑运(yun)维的利器。
节(jie)点维护:当一(yi)个节点需要进行维护(hu)时(shi),你可以给它打上maintenance=true:NoExecute的Taint。如果(guo)Pod有maintenance=true:NoExecute且tolerationSeconds:3600的Toleration,它将在该节点上继续运行最多一小时,然后才被驱逐。
这给了你足够的时间来完成维护,并允许Pod在驱逐前尝试完成一(yi)些重要操作。节点故障:如果一个节点出现非致命性故障,但仍能运行,你可以立即给它打上unhealthy=true:NoExecute的Taint。没有相应Toleration的Pod会立即被驱逐,并(bing)被调度到健康的节点,从而快速恢复服务的可用性。
Taints和Tolerations的实践要点与注意(yi)事项
不要滥用Taints:虽(sui)然Taints功能强(qiang)大,但过度使用或不当使用会增加集群管理(li)的复杂性,甚至可能导致(zhi)Pod调度困(kun)难。请务必根据实际业务需求,谨慎地为节点(dian)打上Taint。Taint的优先级:一个节点可以有多(duo)个Taint,Pod也可以有多个Toleration。
调度器会尝试为Pod找到一个(ge)能够容忍其所有Taint的节点。如果有多个Taint匹配,并且其中一个Taint触发了NoExecuteEffect(而Pod又没有相应Toleration),那么Pod将不会被调度。
key:"",operator:"Exists"的特殊组合(he):如果Pod的Toleration中,key和value都为空,operator为Exists,effect为NoSchedule或NoExecute,那么这个Toleration就可以容忍所有不带(dai)特定Key/Value的Taint。
这是一个非常通用的容忍方式,可以用来让Pod“默(mo)认”可以被调度到几乎所有节点。taints的配置位置:Taints是节点(Node)的属性,可以通过kubectltaint命令修改,也可以在Node对象本身(例如,通过NodeAdmissionController)进行配置。
Tolerations是Pod的属性,需要在Pod的YAML定义中添加。NoExecute的驱逐行为:理解NoExecute对已运行Pod的(de)影响至(zhi)关重要。在生产环境中,务必谨慎使用,并配合tolerationSeconds进行测试。
Taints和Tolerations是Kubernetes调度机制中一对强大的搭档,它们为我们提供了前所未(wei)有的灵活性和控制力(li)。通过(guo)为节点施加Taints,我们可以定义节点的“属性”和“限制”;而通过为Pod添加Tolerations,我们可以让它们“理解”并“接纳”这些“有个性”的节点。
从资源隔离、高可用性保障,到节点维护和(he)成本优化,Taints和(he)Tolerations在K8s集群管理中扮演着至关重要的角色。掌握了这对(dui)“组合拳”,你就(jiu)能更游刃有余地驾驭Kubernetes集群,让你的应(ying)用在其中安稳、高效地运行。
Corportaint再次感谢各位的关注,愿K8s的学习之路,因(yin)这些深度(du)的探索而更加精彩!
2025-11-02,看AA级毛毛片视频,2025智慧医院建设成果思享会|安恒信息以AI赋能智慧医院数据安全建设新范式
1.kpdz225com官网入口,雷电微力(301050)6月30日股东户数4.15万户,较上期增加11.24%WWWWXXXXWWW日本,《商业银行并购贷款管理办法(征求意见稿)》公开征求意见 优化商业银行并购贷款服务
图片来源:每经记者 陈振洲
摄
2.博雅和榜一大哥+破处猎奇,招商银行侯伟荣:企业年金可提升养老金保障水平,未来会有越来越多企业建立年金计划
3.小科斗视频免费网站+下载糖心破解版,金陵体育9月5日龙虎榜数据
小南流眼泪翻白眼害羞图片+肥女bbv,视频教程一:私募基金管理人登记信息及投资者查询技巧
真实小王子回老家了,温馨团聚时刻,记录温暖亲情点滴,感受家的温暖
封面图片来源:图片来源:每经记者 名称 摄
如需转载请与《每日经济新闻》报社联系。
未经《每日经济新闻》报社授权,严禁转载或镜像,违者必究。
读者热线:4008890008
特别提醒:如果我们使用了您的图片,请作者与本站联系索取稿酬。如您不希望作品出现在本站,可联系金年会要求撤下您的作品。
欢迎关注每日经济新闻APP