目录
- 一、污点(Taints)
- 二、容忍度(Tolerations)
- 三、使用场景
在 Kubernetes 中,污点(Taints)是一种节点级别的特性,用于标记节点具有某种“特殊”属性或限制条件,从而影响调度器对Pod的分配决策。污点与容忍度(Tolerations)配合使用,共同构成了节点的准入控制机制,确保只有能够容忍相应污点的Pod才能被调度到带有特定污点的节点上。这种机制有助于实现节点的隔离、资源保护以及特定工作负载的定向部署。
一、污点(Taints)
污点是由集群管理员或自动化流程添加到节点上的键值对标签,通常包含以下三个部分:
- 键(Key):标识污点的类型,如
dedicated
,environment
,node-role.kubernetes.io/worker
, 等。 - 值(Value):提供污点的具体信息,如
special-use
,production
,true
, 等。 - 效应(Effect):
- NoSchedule:禁止调度器将新的Pod调度到带有此污点的节点上,除非Pod具有匹配的容忍度。
- PreferNoSchedule:类似 NoSchedule,但不是硬性约束。调度器会尽量避免将Pod调度到带有此污点的节点,但在没有其他合适节点时,仍可能调度。
- NoExecute:除了阻止新Pod调度外,还可能导致已经运行在该节点上的、无法容忍该污点的Pod被驱逐(evicted)。对于已存在的Pod,是否立即执行驱逐取决于
tolerationSeconds
字段的设置。
apiVersion: v1
kind: Node
metadata:
name: my-node
spec:
taints:
- key: dedicated
value: special-use
effect: NoSchedule
二、容忍度(Tolerations)
容忍度是PodSpec中的一项配置,表示Pod愿意接受并能在具有特定污点的节点上运行。一个容忍度包含以下信息:
- 键(Key):与污点的键相匹配。
- 值(Value):可选,与污点的值相匹配。如果不指定,则认为Pod能容忍任何值的同名污点。
- 效应(Effect):与污点的效应相匹配。
- 容忍期限(TolerationSeconds):仅对NoExecute效应有效,指定Pod在节点被赋予匹配的NoExecute污点后,可以继续运行的时间(秒)。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "special-use"
effect: "NoSchedule"
三、使用场景
污点与容忍度的组合常用于以下场景:
- 资源隔离:为特定用途(如GPU节点、大数据节点、专用服务节点等)的节点添加污点,确保只有具有对应容忍度的Pod才能被调度到这些节点上。
- 维护操作:在计划维护或升级节点时,添加带有NoExecute效应的污点,促使Pod自动迁移到其他节点,避免影响服务。
- 故障隔离:当检测到节点异常(如硬件故障、网络问题、软件错误等)时,自动添加NoExecute污点,驱逐Pod以防止进一步的服务中断。