k8s pod 调度 污点
大白话,就是 工作节点上,打上污点的标签, 然后分配策略会根据这个污点 来分配。
在Kubernetes中,Taints(污点)是一种机制,用于标记一个节点不适合运行某些Pod。节点可以设置污点,以通知调度器避免将某些Pod调度到该节点上运行。污点可以解决一些特殊的场景,例如需要更高的硬件资源或不能部署敏感的应用程序等情况。
可通过以下方式设置污点:
key:用于标识污点的key。
value:标志着污点的状态。
effect:定义了污点产生的影响。例如 NoSchedule,表示该节点不会被自动调度Pod,而需要手动进行指定。
当一个节点被设置了污点,调度器将会避免将具有该污点的Pod分配到该节点上。如果一个节点上没有任何污点,并且没有任何标记为容忍该污点的Pod存在,则该节点将可用于Pod调度。
污点和Pod唯一的关系就是,Pod可以声明一个容忍污点(tolerations),以允许Pod被调度到污点Node上运行。因此,污点(Taints)和容忍(Tolerance)一起生成了调度器的高级配置选项。可以使用污点(Taint)和容忍(Tolerations)来限制Kubernetes工作负载调度到特定的一组节点。
1.污点的概述
污点通常情况下是作用在worker节点上,其可以影响Pod的调度。
污点的语法格式如下:
key[=value]:effect
相关字段说明:
key:
字母或数字开头,可以包含字母、数字、连字符(-)、点(.)和下划线(_),最多253个字符。
也可以以DNS子域前缀和单个"/"开头
value:
该值是可选的。如果给定,它必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最多63个字符。
effect:
effect必须是NoSchedule、PreferNoSchedule或NoExecute。
NoSchedule:
该节点不再接收新的Pod调度,但不会驱赶已经调度到该节点的Pod。
PreferNoSchedule:
该节点可以接受调度,但会尽可能将Pod调度到其他节点,换句话说,让该节点的调度优先级降低啦。
NoExecute:
该节点不再接收新的Pod调度,与此同时,会立刻驱逐已经调度到该节点的Pod。
注意,在K8S 1.23.17版本中,PreferNoSchedule测试效果并不是特别明显,
PreferNoSchedule和NoSchedule两种污点均可以被nodeName无视,因为不会走默认的调度器。
NoExecute污点无视nodeName,尽管调度到该节点,由于该污点的存在,直接会驱逐Pod。
PreferNoSchedule的调度案例:
欢迎来撩 : 汇总all