Pod的调度

Pod通过kubelet进程创建出来的
kubectl 像Api server发送一个请求,Api server 吧请求信息存储到ETCD数据库中,scechderl通过实现监听,然后决定Pod调度到那个节点。

有两种情况Pod不可以被调度

  1. Node 不能正常运行,Pod不可以正常运行,这时可以给Node打上一个污点,污点类型有NoSchedule NoExecute PreferNoSchedule

格式

  **:污点类型
  kubectl taint nodes node01 ***:NoShedule
  1. 该Node有特殊用途,例如master节点。这时可以运行特殊的Pod,例如Kubelet,这时牵扯到了容忍,在类型前面添加***:污点类型

格式

kubectl taint nodes node01 ***(env=prod):NoExecute
#此时这个Node打上污点,除非Pod标签中有env=prod,这时可以容忍运行

如下图
在这里插入图片描述

taint(污点),示例

使用kubectl taint命令可以给某个Node节点设置污点,Node被设置上污点之后就和Pod之间存在了一种相斥的关系,可以让Node拒绝Pod的调度执行,甚至将Node已经存在的Pod驱逐出去。每个污点的组成:key=value:effect,当前taint effect支持如下三个选项:

NoSchedule:表示k8s将不会将Pod调度到具有该污点的Node上

kubectl taint nodes node01 key1=value1:NoShedule
#为node0设置不可调度污点,此时Pod不可以被调度到此Node。

NoExecute:表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去

kubectl taint nodes node01 key1=value1:NoExecute
#为node0节点设置尽量不可调度污点,有Pod运行也会停止运行

PreferNoSchedule:表示k8s将尽量避免将Pod调度到具有该污点的Node上

kubectl taint nodes node01 key1=value1:PreferNoSchedule
#为node0设置不可调度污点,此时Pod不可以被调度到此Node。

移除污点

kubectl taint nodes node01 key1=value1:PreferNoSchedule- 
#将node0上key值为key1的污点移除

容忍(Tolerations)

设置了污点的Node将根据taint的effect:NoSchedule、PreferNoSchedule、NoExecute和Pod之间产生互斥的关系,Pod将在一定程度上不会被调度到Node上。 但我们可以在Pod上设置容忍(Toleration),意思是设置了容忍的Pod将可以容忍污点的存在,可以被调度到存在污点的Node上。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐