金年会

每日经济新闻
要闻

每经网首页 > 要闻 > 正文

k8s调度之taintsandtolerations27快报corportaint-csdn博客

陈厚 2025-11-03 06:06:57

每经编辑|陈润祥    

当地时间2025-11-03,gufjhwebrjewhgksjbfwejrwrwek,抖阴下栽出

没问题,这篇关于K8s污点与容忍的文章,我来帮你打造得既有深度又充满吸引力!

k8s调度之taintsandtolerations_27快报corportaint-csdn博客

在Kubernetes的宏伟蓝图中,Pod的调度是一门精妙的艺术,它决定了你的(de)应用程序如何在(zai)集群中安家落户,能否高效、稳定地运行。而在这门艺术中,Taints和Tolerations(污点与容忍)无疑是(shi)最(zui)具“个性化”的(de)调度手段之一。

它们为我们提供了前所未有的(de)细粒度控制能力,让(rang)管理员能够巧(qiao)妙地“劝退”不合适的Pod,并“欢迎”那(na)些能够“忍受”特定环境的Pod。今天,就让我们跟随Corportaint的视角,一起深入K8s的调(diao)度世界,揭开Taints和Tolerations的神秘面纱,看看(kan)它们是如何为集(ji)群注入智慧和灵活性(xing)的。

想象一下,你(ni)的Kubernetes集群就像一个大(da)型的酒店,每个节点(Node)都是一个房间(jian)。正常情况下,任何住客(Pod)都可以(yi)根(gen)据房型(资源需求)和空闲情况(节点可用性)来选(xuan)择房间。有些房间可能对某些住客有特(te)殊的“要求”,比如“此房间禁止宠物入住”或者“此房间仅限吸烟者”。

这些特殊的(de)“要求(qiu)”,在K8s中就对应着Taints(污点)。

Taints:节点的“个性化宣言”

Taints是施加在节(jie)点上(shang)的一种标记,它描述了该节点(dian)“不适合”哪些类型的Pod。你可以将其理(li)解为节点的一种“个性化宣言”,宣告着自己的独特之处。当一个节点被打上Taint后,默认情况下,任何没有(you)相应Toleration(容忍)的Pod都将无法被调度到这个节点上。

这就像酒店的“禁止宠物入住”标识,如果没有(you)特殊的(de)“宠物(wu)友好”证明(Toleration),携带宠物(wu)的住客(Pod)就(jiu)不能入住。

Taints的核心在于其键值对(Key-ValuePair)结构,并附加一个Effect(效果)。一个典型的Taint看起来是这样的:key=value:Effect。

Key和Value:这部分是用(yong)来描述Taint的具体含义。例如,你可以用dedicated=gpu:NoSchedule来(lai)标记一个GPU节点,表示这个节点是专门为GPU工作负载准备的。Key和Value的组合可以非常灵活,你可以根据自己的需求(qiu)定义。

Effect:这是Taint最关(guan)键的部分,它定义了当Pod没有匹配(pei)的Toleration时,调度器会(hui)如何处理。目前,K8s主要支持三种Effect:NoSchedule:这是(shi)最常见的Effect。如果一(yi)个节点有(you)Taint,而Pod没(mei)有匹配的Toleration,那么这个(ge)Pod就不会被调度到这个节点上。

已经运行在该节点上的Pod不受影响。这就像一个“禁入”标识,新来的“访客”需要出示“通行证”。PreferNoSchedule:这个Effect稍微“温和”一些。它会(hui)倾向于不将没(mei)有匹配Toleration的Pod调度到该节点。

但如果调度器找不到其他更合适的节点,它(ta)仍然可能(neng)将Pod调度到这个带有Taint的节点上。这就像一个(ge)“婉拒”的标识,虽然不欢迎,但(dan)实在没地方了(le),也只能勉强接收。NoExecute:这是最“严厉”的Effect。如果一个节点有Taint,并且Effect是(shi)NoExecute,那么:新来的Pod:没有匹配Toleration的Pod将不(bu)会被调度到(dao)这个节点。

已运行的Pod:如果一个Pod已经运行在该节点上,而这个节点的Taint突然被加上了NoExecuteEffect,那么这个Pod将会被驱逐(evicted)下线。这就像一个“立即清场”的命令,所有不符合条件的都(dou)必须离开。

Taints的应用场景:为何(he)如此重要?

Taints和Tolerations的引入,并非为了增加K8s的复杂性,而是为了解决实际生产环境中诸多棘手的调度问题。它们主(zhu)要体现在以下几个方面:

资源隔离与专用节点:

GPU节点:很多(duo)机器学习、深度学(xue)习等工作负载需要GPU加速。你可以为带有GPU的节点打上(shang)dedicated=gpu:NoSchedule的Taint,然后只允许那些明确声明需要GPU的(de)Pod(即拥有相应Toleration的Pod)调(diao)度到这些节点,从而(er)确保GPU资源不被非GPU工作(zuo)负载占用(yong),实现高效利用。

高可用性节点/特殊硬件节点:某些节点可能拥有特殊的硬件(如FPGA、TPM)或者配置(如高内存、SSD盘),你可能希望将特定的、对(dui)这些硬件有依赖的工作负载(zai)调度到这些节点上。通过Taints,你可以将这些节点标记(ji)出来,并限制只有目标Pod才能进入。

节点维护与滚(gun)动(dong)升级:

当需要对某(mou)个节点进行维护(例如,升级操作系统、打补丁、重启)时,你可以给该节点(dian)打上node-maintenance=true:NoSchedule的Taint。这样,新的Pod就不会被调度到这个节(jie)点上,而已经运行的Pod则会继续运行,直到它们被滚动(dong)更新或手动驱(qu)逐(zhu)。

待维护完成后,再移除Taint,节点就可以恢复正常接收新Pod。对于NoExecute,可以实现更主动的节点“清空”。例如,当一(yi)个节点出现临时性的故障(但不至于完全宕机),你可以迅速为其打上unhealthy=true:NoExecute的Taint,强制将所有运行在其上的Pod迁移到其他健康(kang)节点,从而保证服务的连续性。

控制敏感工作负载的(de)部署(shu):

某些工作负载(zai)可能对安全性有极高的要求,不希(xi)望部署在与其他工作负载混用的节点上,以(yi)防止潜在的安全风险。你可以为这些节点设置特定的Taint,并仅允许目标Pod具有相应的Toleration。

成本优化:

某些高性能节点(如带GPU的(de)节(jie)点)成本较高。通过Taints,你可以确保这些昂贵的资源被最需要它们的(de)工作负载所使用,避免了低价(jia)值的Pod占用这些资源,从而实现成本的(de)精细化控制。

Taints的“炼制”:如(ru)何给节点打上污点?

在(zai)Kubernetes中,给节点打Taint通常是通过kubectltaint命令来完成的。这个命令非常直(zhi)观,你可以直接指定节点(dian)名称、Taint的Key、Value以及Effect。

例如,要给名(ming)为node-1的节点打上dedicated=gpu:NoSchedule的Taint,你(ni)可以(yi)执行:

kubectltaintnodesnode-1dedicated=gpu:NoSchedule

要移除这个Taint,只需在Taint的末尾加(jia)上一个(ge)减号-:

kubectltaintnodesnode-1dedicated=gpu:NoSchedule-

如果你(ni)想给一个节点打上(shang)多个Taint,可以直接连续执行kubectltaint命令,或者在一个命令中指定多个Taint(虽然通(tong)常不推荐,但理论上可行)。

Taints是节点层面的属性,一旦打上,所有未具(ju)备相应Toleration的Pod都将(jiang)被“拒之门外”。这为集群管(guan)理员提供了一个强大的“守门员”角色,能够根据集群(qun)的实际(ji)情(qing)况和业务需求,精确地控制Pod的流向,确保资源的合理分配和服务的稳定运行。

在下一部分,我们将聚焦于Pod如何“理解”并“接纳”这些Taint,即Tolerations的奥秘,以及它们与Taints如何协同工作,共同构建Kubernetes智能调度的新维度。

k8s调度(du)之taintsandtolerations_27快(kuai)报corportaint-csdn博客

在上一部分,我们深入了解了KubernetesTaints(污点)的(de)强大之处,它们如同节点的“个性(xing)化宣言”,赋予了管理员精细控制Pod调度的能力。污点并非“单行道”,它需要有与之相呼应的“对话者”——Tolerations(容忍)。

如果说Taints是节(jie)点对Pod的“挑剔”,那么Tolerations就是(shi)Pod对节点的“包容”和“理解”。没有Tolerations的配合,Taints就如同空谈,无(wu)法实现其(qi)真正的调度价值。今天,Corportaint将带您继续探索Taints和Tolerations的协同作用,揭示Pod如何“接纳”那些带有“个性(xing)”的节点。

Tolerations:Pod的“通行证”与“保险(xian)箱”

Tolerations是附加在Pod上的一个(ge)属性,它允许Pod“容忍”某些带有特定Taint的节(jie)点。也就是说(shuo),即使一个节点被打上了Taint,如果Pod拥有与之匹配的Toleration,那么(me)这个Pod仍然有可能被调度到该节点上。

Tolerations就像(xiang)Pod的“通行证”,让它们能够进入(ru)那些原本“不欢迎”它们的(de)地方。

一个Pod的Tolerations定义在pod.spec.tolerations字段中,它(ta)是一个列表,可以包含零个或多个Toleration定义。每个Toleration的结构与Taint类似,也包(bao)含(han)Key、Value和Operator(操作符),并且可以指定(ding)Effect。

tolerations:-key:"key"operator:"Equal"value:"value"effect:"NoSchedule"

我们来详细解析一下Toleration的各(ge)个字段(duan):

Key,Value,Effect:这三个字段是用来匹配(pei)节(jie)点上的Taint的。当Pod的Toleration的Key、Value和Effect与节点上的Taint完全一致时,这个(ge)Toleration就被认为匹配了该Taint。

Operator:这个字段决(jue)定了Key和Value之间的匹配方(fang)式。它有几种可能的取值:Equal:这是默认的操作符。当(dang)operator为Equal时,Toleration的key、value和effect必须与节点Taint的key、value和effect完(wan)全相等,才能认为匹配。

Exists:当operator为Exists时,只要节(jie)点Taint的key和effect与Toleration中的key和effect相匹配即可,无(wu)需关心value。这意味着,只要节点上存在带有指定Key和Effect的Taint,这个Toleration就可以匹配。

如果Toleration中省略了value,并且operator是(shi)Exists,那么(me)它会匹配所有具有该Key和Effect的Taint。

Tolerations的“三剑(jian)客”:匹配Taint的方式

Tolerations的魔力在于它(ta)们与Taint的匹配逻辑。理解这一点,是掌握K8s调度精髓的关键。Pod的Tolerations可以用来匹配三种类型的TaintEffect:

匹配NoScheduleTaint:如果一个节点有key=value:NoSchedule的Taint,而Pod有一个key=value:NoSchedule的Toleration,那么Pod可以被调度到这个节(jie)点。如果Pod有一个key:Exists:NoSchedule的Toleration,它也可以被调度(du)到这个节点,因为Exists操作符匹配了Taint的Key和Effect。

匹配PreferNoScheduleTaint:如果一个节点有key=value:PreferNoSchedule的Taint,而Pod有一个key=value:PreferNoSchedule或key:Exists:PreferNoSchedule的Toleration,那么Pod可以被调度到(dao)这个节点,并且调度器会倾向于将其调(diao)度到(dao)这(zhe)里(如果满足其(qi)他调度(du)规则)。

匹配NoExecuteTaint:这是最关键也最容易被误解的部分。NoExecuteTaint的处理逻辑非(fei)常特殊:

对于新调度进来的Pod:如果一(yi)个Pod没有匹配NoExecuteTaint的Toleration,它不会被调度到该节点。对于已在节点上运行的Pod:如果一个节点被添加了NoExecuteTaint,而Pod没有匹配该Taint的Toleration,那么(me)该Pod将会被驱逐(evicted)。

特别注意:NoExecuteTaint的匹配逻辑是:key,value,effect必须匹配。如果Toleration的operator是Exists,并且effect是NoExecute,那么它会匹配所有具有NoExecuteEffect的Taint,无论Value是什么(me)。

NoExecuteTaint的一个重要附加属性:tolerationSeconds当(dang)Pod拥(yong)有NoExecuteTaint的Toleration时,你可以额外指定一个tolerationSeconds字段。这个字段的含义是:当Pod检测到节点上(shang)有NoExecuteTaint时,它不会立即被驱逐,而(er)是会等(deng)待tolerationSeconds指定的时长,然(ran)后才被驱(qu)逐。

这为Pod提供了一个“缓冲期(qi)”,允(yun)许它在节点故障或维护(hu)期间(jian),有时间完成当前的关键(jian)任务,或者被迁移到另一个节点。

Taints和Tolerations的协同作战:构建智能调度

Taints和Tolerations的价值(zhi),在于它们能够协同工(gong)作,实现Kubernetes调度策略的精细(xi)化和智能化。这种协同可以带来以下几个方面(mian)的优势:

保证特定工作负载的独享性:如前所述,你可以为(wei)GPU节点打上dedicated=gpu:NoSchedule的Taint。然后,为需要GPU的Pod定义相应的Toleration:

tolerations:-key:"dedicated"operator:"Equal"value:"gpu"effect:"NoSchedule"

这样,只有拥有该Toleration的Pod才能被调度到GPU节点,而其他普通Pod则会被“挡在门外”,确保了GPU资源的专属和高效利用。

实现节点的“不欢迎”与“有限欢迎”:

NoSchedule:通过(guo)NoScheduleTaint,你可以明确(que)地告诉调度器,“这个节点不适合这类Pod”。例如,将某(mou)些存储敏感性高的Pod限制在特定的、有高保障存储的节点上,而其他的普通Pod则不被允许进入。PreferNoSchedule:这提供了一种更(geng)灵活的策略。

你可以标记一些节点(例(li)如,正在进行(xing)软件更新,但还能运行少量Pod的节点),并使用PreferNoScheduleTaint。这样,调度器会尽量避免将新的、不重要的(de)Pod调度到这些节点,但如果实在没有(you)其他选择,也允许少量的Pod入驻,以最大限度地利用集群资源。

优雅地处理节点故障和维护:NoExecuteTaint配合tolerationSeconds,是实现高可(ke)用性和平滑运维的利器。

节点维护:当一个节点需要进行维护时,你可(ke)以给它打上maintenance=true:NoExecute的(de)Taint。如果Pod有maintenance=true:NoExecute且tolerationSeconds:3600的Toleration,它将在该节点上继续运行最多一小时,然后才被驱逐。

这给了你足够的时间来完成维护,并允许Pod在驱逐前尝试完成一些重要操作。节点故障:如果一个节点出现非致命性故障,但仍能运(yun)行,你(ni)可以立即给(gei)它打上unhealthy=true:NoExecute的Taint。没有相(xiang)应Toleration的Pod会立即被驱逐,并被调度到健康的节点,从而快速恢复服务的可用性。

Taints和Tolerations的实践要点与注意事项

不要滥(lan)用Taints:虽然Taints功能强大,但过度使用或不当使用会增加集群管理的复(fu)杂性,甚至(zhi)可能(neng)导(dao)致Pod调度困难。请务必根据实际业务需(xu)求,谨慎(shen)地为节点打上Taint。Taint的优先级(ji):一个节点可以有多个Taint,Pod也可以有多个Toleration。

调度器会(hui)尝试为Pod找到一个能够容忍其所有Taint的节(jie)点。如果有多个Taint匹配,并且其中一个Taint触发了(le)NoExecuteEffect(而Pod又没有相应Toleration),那么Pod将不会被(bei)调度。

key:"",operator:"Exists"的特殊组合:如果Pod的Toleration中,key和value都为空,operator为Exists,effect为NoSchedule或NoExecute,那么这个Toleration就可以容忍所有(you)不带特(te)定Key/Value的Taint。

这是一(yi)个非(fei)常通用的容忍方式(shi),可以用来让Pod“默认”可以被调度到几乎所有节点。taints的配置位置:Taints是节点(Node)的属性,可以通(tong)过kubectltaint命(ming)令修改,也(ye)可以在Node对象本(ben)身(例如,通过NodeAdmissionController)进行配置。

Tolerations是Pod的属性,需要在Pod的YAML定义中添加。NoExecute的驱逐行为(wei):理解NoExecute对已运行Pod的影响至关重要。在生产环境中,务必谨慎使用,并配(pei)合tolerationSeconds进行测试。

总(zong)结

Taints和Tolerations是Kubernetes调度机制中一(yi)对强大的搭档,它们为我们提供了前所未有的灵活性和控制力。通过为(wei)节点施加Taints,我(wo)们可以定义节点的“属性”和“限制”;而(er)通过为Pod添加Tolerations,我们可(ke)以让它们“理解”并“接纳”这些“有个性”的节点。

从资源隔离、高可用性保障,到节点维护和成本优化(hua),Taints和(he)Tolerations在K8s集群管理中扮演着至关重要的角色。掌握了这对“组合拳”,你就能更游刃有余地驾驭Kubernetes集群,让你的应用在(zai)其中安稳、高效地运行。

Corportaint再次感谢各位的关注,愿K8s的学习(xi)之路,因这些深度的探索而更加精彩!

2025-11-03,2025游戏防沉迷实名认证大全2月,马斯克:Grok 4向全球所有用户免费开放

1.XNXXX馃嚚馃嚦馃憴馃憴18,中煤能源:上半年归母净利润77.05亿元,同比下降21.30%绿茶闺蜜董小宛,千亿卡牌赛道重磅玩家“闪魂”完成数亿元首轮融资 由姚记科技董事长姚朔斌及卡游原市场总监盛川联合创立

图片来源:每经记者 陈玉雯 摄

2.午夜体验试看120秒+叉啪兔官方,不到一折甩卖信用卡坏账!银行剥离不良贷款背后:风险出清助力行业向精细化运营转型

3.日本肉体裸交大全免费看视频+哥哥快点操我视频,Centrica拟以约20亿美元收购欧洲最大液化天然气进口枢纽

薛婧《闺魅》高清图片欣赏+亲吻刺激战场原声视频免费观看,生意社:9月3日万华化学华北地区正丁醇行情

小孩被姐姐咬78-小孩被姐姐咬78最新版

封面图片来源:图片来源:每经记者 名称 摄

如需转载请与《每日经济新闻》报社联系。
未经《每日经济新闻》报社授权,严禁转载或镜像,违者必究。

读者热线:4008890008

特别提醒:如果我们使用了您的图片,请作者与本站联系索取稿酬。如您不希望作品出现在本站,可联系金年会要求撤下您的作品。

欢迎关注每日经济新闻APP

每经经济新闻官方APP

0

0

Sitemap