1、概述 2、定义污点和容忍度 3、管理节点的污点 4、Pod对象的容忍度 5、问题节点标识 1、概述 污点taints是定义在节点之上的键值型属性数据,用于让节点拒绝将Pod调度运行于其上, 除非该...而容忍度tolerations是定义在 Pod对象上的键值型属性数据,用于配置其可容忍的节点污点,而且调度器仅能将Pod对象调度至其能够容忍该节点污点的节点之上,如图所示 ?...,其中key和value的用法及格式与资源注俯-信息相似, 而effect则用于定义对Pod对象的排斥等级,它主要包含以下三种类型 NoSchedule 不能容忍此污点的新Pod对象不可调度至当前节点...一个节点可以配置使用多个污点,一个Pod对象也可以有多个容忍度,不过二者在进行匹配检查时应遵循如下逻辑。...:NoSchedule node "node01.linux.io" tainted 此时,nodeO1上已有的Pod对象不受影响,但新建的Pod若不能容忍此污点将不能再被调度至此节点。
有几种方法可以实现这点: 节点标签 亲和性与反亲和性 nodeName字段 Pod拓扑分布约束 污点和容忍度 节点标签 标签(Labels)是附加到 K8s 对象(比如 Pod)上的键值对。...上的,容忍度允许(但不要求)调度器调度带有对容忍度的Pod到Node节点上,污点和容忍度的目的是优化pod在集群间的调度。...每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。...如果未被过滤的污点中存在至少一个 effect 值为NoExecute 的污点, 则 Kubernetes 不会将 Pod 分配到该节点(如果 Pod 还未在节点上运行), 或者将 Pod 从该节点驱逐...但是如果在给节点添加上述污点之前,该 Pod 已经在上述节点运行, 那么它还可以继续运行在该节点上,因为第三个污点是三个污点中唯一不能被这个 Pod 容忍的。
Taint 则相反,它使节点能够排斥一类特定的pod,Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。...每个节点上都可以应用一个或多个taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。...污点的对象是: 节点 每个污点的组成: key=value:effect 每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。...NoExecute :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去。...但我们可以在 Pod 上设置容忍 ( Toleration ) ,意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。
做自动化的同事今天居然问我 k8s 中为什么我部署的 pod 会跑到你们开发的节点上来?我可以去控制它吗?...✔k8s 中节点污点和 pod 对污点的容忍度 我们一般会使用节点污点和 pod 对污点的容忍度来阻止 pod 被调度到特定的节点上 如果你期望某一个 pod 一定不能部署到某一个节点上的时候,你就可以使用节点污点和...pod 对污点的容忍度 例如现在上了一个新的节点,但是还没有调试完整,你不期望你部署的 pod 会部署到这个新的节点上,那么这个时候,你就可以给这个节点加上污点。...那你测试这个新节点的时,你就可以在你将要部署的 pod 资源上面,加上 pod 对该污点的容忍度 先来看一下k8s master上默认的一个污点 可以看到我们环境里面的 minikube,它的污点是空...pod,若不能容忍这个污点,则这些 pod 就会被干掉 如何操作 我们可以通过编辑的方式去修改节点的污点或者通过命令的方式给节点加上污点 通过 edit node 的方式修改 kubectl edit
污点,其它不能容忍该污点的Pod不能被调度到该节点。...the pod didn't tolerate 2 node(s) didn't match node selector 大概意思是说,其中一个节点包含该污点,但是该Pod无法容忍。...NoSchedule:如果一个pod没有声明容忍这个Taint,则系统不会把该Pod调度到有这个Taint的node上 NoExecute:定义pod的驱逐行为,以应对节点故障。...NoExecute上面提到的污点会影响节点上已经运行的Pod,如下所示: 立即将不能忍受的污点逐出 容忍污点但未定义tolerationSeconds的Pod将永远绑定 可以忍受指定污点的Pod在指定的时间内保持绑定...再次执行kubectl describe nodes work2 NoExecute污点已经消失;紧接着Pod已经可以调度到该节点。
节点亲和力规则允许pod指定requiredDuringSchedulingIgnoredDuringExecution类型,它告诉调度器在调度pod时要满足节点亲和力,但节点可能随时间变化而不再满足亲和力时...,但kubelet会忽略这一变化,当启用该策略时,其作为requiredDuringSchedulingRequiredDuringExecution的临时实现,将不再满足节点亲和力的pod驱逐出该节点...例如,有一个pod "podA "具有容忍污点key=value:NoSchedule的容忍度,并在被污点的节点上运行。...如果该节点的污点随后被更新/删除,污点就不再满足于其pod的容忍度,将被驱逐出去。 节点污点可以通过指定exceptedTaints的列表排除。...如果一个节点污点的键或键=值与exceptedTaints条目相匹配,该污点将被忽略。
Sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod...每个节点上都可以应用一个或多个 taint,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。...污点(Taint) Ⅰ、污点(Taint)的组成 使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node...Pod 调度到具有该污点的 Node 上 NoExecute:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去 Ⅱ、污点(Taint)...但我们可以在 Pod 上设置容忍(Toleration),意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。
当节点添加一个污点后,除非 pod 声明能够容忍这个污点,否则 pod 不会被调度到这个 节点上。 系统会 尽量 避免将 Pod 调度到存在其不能容忍污点的节点上, 但这不是强制的。...但是如果你只有一个 worker,那么设置了污点,那 pod 也只能选择在这个节点上运行。...污点的效果称为 effect ,节点的污点可以设置为以下三种效果: NoSchedule:不能容忍此污点的 Pod 不会被调度到节点上;不会影响已存在的 pod。...PreferNoSchedule:Kubernetes 会避免将不能容忍此污点的 Pod 安排到节点上。...容忍度 一个 node 可以设置污点,排斥 pod,但是 pod 也可以设置 容忍度,容忍 node 的污点。
Scheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName 为空的 Pod,对每个 Pod 都会创建一个 binding,表明该 Pod...每个节点上都可以应用一个或多个 taint,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。...污点 污点的组成 使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,...Pod 调度到具有该污点的 Node 上 NoExecute 表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去 # master节点默认自带污点...但我们可以在 Pod 上设置容忍,意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。
,可以让 Pod 不能调度到带污点的节点上,甚至会对带污点节点上已有的 Pod 进行驱逐。...当然,对应的 Kubernetes 可以给 Pod 设置 Tolerations(容忍) 属性来让 Pod 能够容忍节点上设置的污点,这样在调度时就会忽略节点上设置的污点,将 Pod 调度到该节点。...node 上设置的全部污点,就可以将 pod 调度到该 node 上。...如果 pod 上设置的容忍不能够包含 node 上设置的全部污点,且 node 上剩下不能被包含的污点 effect 为 PreferNoSchedule,那么也可能会被调度到该节点。...当然,如果希望有些 Pod 能够忽略节点的污点,继续能够调度到该节点,就可以对 Pod 设置容忍,让 Pod 能够容忍节点上设置的污点,例如: 对一个节点设置污点: kubectl taint node
污点(Taints)和容忍(Tolerations)共同作用,确保pods不会被调度到不适当的节点。一个或多个污点应用于节点;这标志着该节点不应该接受任何不容忍污点的Pod。...Node节点上 NoExecute:表示K8S将不会把Pod调度到具有该污点的Node节点上,同时会将Node上已经存在的Pod驱逐出去 污点taint的NoExecute详解 taint 的 effect...但我们可以在Pod上设置容忍(Tolerations),意思是设置了容忍的Pod将可以容忍污点的存在,可以被调度到存在污点的Node上。...Kubernetes处理多个污点和容忍的方式就像一个过滤器:从节点的所有污点开始,然后忽略可以被Pod容忍匹配的污点;保留其余不可忽略的污点,污点的effect对Pod具有显示效果:特别是: 如果有至少一个不可忽略污点...此时k8s-node01节点的污点check-nginx 的effect为PreferNoSchedule【尽量不调度到该节点】;但只有该节点满足调度条件,因此都调度到了k8s-node01节点。
pod没有容忍这种污点,则当前节点就不能调度过去, 其次如果发现对应节点上已经运行的pod不能容忍node新标记的Taint, 则可能会被从当前节点中驱逐 1.4 基于心跳/Taint/Toleration...即根据当前的状态来进行更新对应的Taint, 有了这些Taint别的组件就可以进行Pod的驱逐了 2.3 Pod状态更新 那如果Pod的状态更新,我也需要关注吗或者说node controller关注了..., 然后没有就通过定时器创建一个驱逐的任务延迟执行 如果一个节点可以正常反馈状态,通过如上步骤其实就可以不断的进行对比那些不能容忍节点Taint的Pod从而达到驱逐的目的,但是如果无法反馈信息呢,则就需要靠心跳检测模块来进行...清除Node上面Pod的这个操作可不算小, 在kubernetes中以一种比较保守的数值在做这件事情, 官方文档上也有说明, 限速主要是为了保证系统的稳定性,因为其实清除任务是可以被取消的,比如说节点升级的时候...,可能几十秒就起来了,那其上的pod还可以依旧运行,没有必要全部转移,通过限速队列可以让删除节点的操作慢下来,从而容忍更多的超时时间,注意这里的限速队列是每个zone都会有一个 3.4 中断标签 node.kubernetes.io
,而 Taints(污点) 则恰恰相反,它是 Node 上的一个属性,可以让 Pod 不能调度到带污点的节点上,甚至会对带污点节点上已有的 Pod 进行驱逐。...当然,对应的 Kubernetes 可以给 Pod 设置 Tolerations(容忍) 属性来让 Pod 能够容忍节点上设置的污点,这样在调度时就会忽略节点上设置的污点,将 Pod 调度到该节点。...---- 一个 node 可以有多个污点; 一个 pod 可以有多个容忍; kubernetes 执行多个污点和容忍方法类似于过滤器 如果一个 node 有多个污点,且 pod 上也有多个容忍,只要 pod...中容忍能包含 node 上设置的全部污点,就可以将 pod 调度到该 node 上。...当然,如果希望有些 Pod 能够忽略节点的污点,继续能够调度到该节点,就可以对 Pod 设置容忍,让 Pod 能够容忍节点上设置的污点,例如: 对一个节点设置污点: kubectl taint node
nodeSelector是 PodSpec 的一个字段。 它包含键值对的映射。为了使 pod 可以在某个节点上运行,该节点的标签中必须包含这里的每个键值对(它也可以具有其他标签)。...你可以视它们为“硬”和“软”,意思是,前者指定了将 pod 调度到一个节点上必须满足的规则(就像 nodeSelector 但使用更具表现力的语法),后者指定调度器将尝试执行但不能保证的偏好。...每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod,是不会被该节点接受的 对于nodeAffinity无论是硬策略还是软策略方式,都是调度 pod 到预期节点上,而Taints...恰好与之相反,如果一个节点标记为 Taints ,除非 pod 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度 pod。...如果未被过滤的污点中存在至少一个 effect 值为 NoExecute 的污点, 则 Kubernetes 不会将 Pod 分配到该节点(如果 Pod 还未在节点上运行), 或者将 Pod 从该节点驱逐
策略 RemoveDuplicates策略 该策略确保只有一个Pod与同一节点上运行的副本集(RS),Replication Controller(RC),deployment或者job关联。...,并且如果可能的话,从其他节点驱逐pod,希望在这些未充分利用的节点上安排被驱逐的pod的重新创建。...thresholds 可以按百分比为cpu,内存和pod数量配置阈值 。如果节点的使用率低于所有(cpu,内存和pod数)的阈值,则该节点被视为未充分利用。...目前,pods的请求资源需求被考虑用于计算节点资源利用率。 还有另一个可配置的阈值,targetThresholds 用于计算可以驱逐pod的潜在节点。...例如,有一个名为 podA 的 Pod,通过配置容忍 key=value:NoSchedule 允许被调度到有该污点配置的节点上,如果节点的污点随后被更新或者删除了,则污点将不再被 Pod 的容忍满足,
11.ServiceSpreadingPriority:尽量将同一个 service 的 Pod 分布到不同节点上,服务对单个节点故障更具弹性。...污点(taint)是定义在Node之上的键值型的数据,用于让节点拒绝将Pod调度运行于其上,除非该Pod对象具有接纳Node污点的容忍度。...•Pod-A不完全具备k8s-node02污点的容忍度,所以不能被调度至k8s-node02。•Pod-A虽然具备容忍度,但同样可以调度至没有污点的k8s-node03节点上。...•PreferNoSchedule:为Node添加污点等级为PreferNoSchedule,不能容忍此污点的Pod对象尽量不要调度到当前节点,如果没有其它节点可以供Pod选择时,也会接受没有容忍此污点的...2.Master污点介绍 以kubeadm部署的kubernetes集群,其Master节点将自动添加污点信息以阻止不能容忍此污点的Pod对象调度至此节点,因此用户可以手动创建Pod来容忍Master的污点
中的一个字段,可以通过pod.spec.nodeName指定将pod调度到某个具体的node节点上,该字段比较特殊一般都为空,如果有设置nodeName字段,kube-scheduler会直接跳过调度,...如下以创建一个pod运行在node-3上为例: 编写yaml将pod指定在node-3节点上运行 [root@node-1 demo]# cat nginx-nodeName.yaml apiVersion...通过nodeSelector调度 nodeSelector是PodSpec中的一个字段,nodeSelector是最简单实现将pod运行在特定node节点的实现方式,其通过指定key和value键值对的方式实现...如下以node-2添加一个app:web的labels,调度pod的时候通过nodeSelector选择该labels: 给node-2添加labels [root@node-1 demo]# kubectl...和基于pod的inter-pod affinity/anti-affinity,node affinity是通过node上的labels来实现亲和力的调度,而pod affinity则是通过pod上的labels
上的一个属性,可以让 Pod 不能调度到带污点的节点上,甚至会对带污点节点上已有的 Pod 进行驱逐。...当然,对应的 Kubernetes 可以给 Pod 设置 Tolerations(容忍) 属性来让 Pod 能够容忍节点上设置的污点,这样在调度时就会忽略节点上设置的污点,将 Pod 调度到该节点。...调度到该节点,且将该节点上已经存在的 Pod 进行驱逐 $ kubectl taint node k8s-master key3=value3:NoExecute 删除污点 上面说明了如何对 Node...当然,如果希望有些 Pod 能够忽略节点的污点,继续能够调度到该节点,就可以对 Pod 设置容忍,让 Pod 能够容忍节点上设置的污点,例如: 对一个节点设置污点: kubectl taint node...如果一个 node 有多个污点,且 pod 上也有多个容忍,只要 pod 中容忍能包含 node 上设置的全部污点,就可以将 pod 调度到该 node 上。
) 使用kubectl taint命令可以给某个Node节点设置污点,Node被设置上污点之后就和Pod之间存在了一种相斥的关系,可以让Node拒绝Pod的调度执行,甚至将Node已经存在的Pod驱逐出去...每个污点的组成:`key=value:effect`,当前taint effect支持如下三个选项: NoSchedule:表示k8s将不会将Pod调度到具有该污点的Node上 PreferNoSchedule...:表示k8s将尽量避免将Pod调度到具有该污点的Node上 NoExecute:表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去 常用命令如下: # 为节点...但我们可以在Pod上设置容忍(Toleration),意思是设置了容忍的Pod将可以容忍污点的存在,可以被调度到存在污点的Node上。...4 Service 服务 Service是对一组提供相同功能的Pods的抽象,并为他们提供一个统一的入口,借助 Service 应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。
,而 Taints(污点) 则恰恰相反,它是 Node 上的一个属性,可以让 Pod 不能调度到带污点的节点上,甚至会对带污点节点上已有的 Pod 进行驱逐。...当然,对应的 Kubernetes 可以给 Pod 设置 Tolerations(容忍) 属性来让 Pod 能够容忍节点上设置的污点,这样在调度时就会忽略节点上设置的污点,将 Pod 调度到该节点。...调度到该节点,且将该节点上已经存在的 Pod 进行驱逐 $ kubectl taint node k8s-master key3=value3:NoExecute 删除污点 上面说明了如何对 Node...当然,如果希望有些 Pod 能够忽略节点的污点,继续能够调度到该节点,就可以对 Pod 设置容忍,让 Pod 能够容忍节点上设置的污点,例如: 对一个节点设置污点: kubectl taint node...如果一个 node 有多个污点,且 pod 上也有多个容忍,只要 pod 中容忍能包含 node 上设置的全部污点,就可以将 pod 调度到该 node 上。
领取专属 10元无门槛券
手把手带您无忧上云