0
点赞
收藏
分享

微信扫一扫

k8s的pod调度之污点与污点容忍以及pod指定调度

目录

k8s的污点介绍

Taints案例,给节点添加污点

污点容忍, Tolerations

案例

删除污点

nodeName


k8s的污点介绍

         基于节点标签分配是站在Pod的角度上,通过在Pod上添加属性,来确定Pod是否要调度到指定的Node上,其实我们也可以站在 Node的角度上,通过在Node上添加污点属性,来避免Pod被分配到不合适的节点上。

          Taints:避免Pod调度到特定Node上 

         Tolerations:允许Pod调度到持有Taints的Node上

注意:master默认有污点,主要原因是处于安全性考虑,可以让master节点不运行业务容器

Taints案例,给节点添加污点

第一步:给节点添加污点 

格式:

kubectl taint node [node] key=value:[effect] 

例如:

kubectl taint node k8s-node1 gpu=yes:NoSchedule 

查看污点命令:

 kubectl describe node |grep Taint

验证:

kubectl describe node k8s-node1 |grep Taint

其中[effect] 可取值: 

• NoSchedule :一定不能被调度(新来的不要来,在这的就别动了)

 • PreferNoSchedule:尽量不要调度(尽量不要来,除非没办法) 

• NoExecute:不仅不会调度,还会驱逐Node上已有的Pod(新的不 要来,在这的赶紧走)

新建一个pod测试

kubectl run pod1 --image=nginx

自动被分配到了没有污点的node2

注意:如果所有节点都有污点,那新建pod状态会为pending,无法被分配

用途:一般作为负载比较多了的节点打上污点不让节点在分配

污点容忍, Tolerations

污点容忍是指在写pod的yaml文件时,写入污点容忍配置来允许pod被分配到已经打了污点的节点上

添加污点容忍(tolrations)字段到Pod配置中

案例

先把所有节点打上污点

写入一个创建pod的yaml,yaml的逻辑是将pod分配到一个污点名为tt,值为vv2的节点上去

其中,作为污点容忍的主要是这一句

可以看到,pod被分配到已经打了污点的node2上

删除污点

kubectl taint node [node] key:[effect]-

例如

kubectl taint node k8s-node1 tt:NoSchedule-

nodeName

nodeName:指定节点名称,用于将Pod调度到指定的Node上,不经过调度器。

使用场景:一般做测试用

案例:

负责调度的是这一句,因为直接指定节点,所以不经过调度器,污点以及标签适配对他无效,直接被分配到指定的node1

nodeName: k8s-node1

举报

相关推荐

0 条评论