K8S污点容忍度调度
| 污点类型 | 解释(相当于做标签) |
|---|---|
| kubectl taint nodes node key=value:==NoSchedule== | 添加effect类型污点,新的pod不能调度过来,==老的不影响== |
| kubectl taint nodes node key=value:==NoExecute== | 添加effecf类型污点,新的pod不能调度过来,==老的被驱除== |
| kubectl taint nodes node key=value:==PreferNoSchedule== | 会尝试将pod分配到该节点 |
污点、容忍度
手动创建deployment
1 | [root@ceshi-130 ~]# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public |
伸缩副本为2,两台node都存在nginx-dp-xxx的pod
1 | [root@ceshi-130 ~]# kubectl scale --replicas=2 deployment/nginx-dp -n kube-public |
比如我们现在就不想让pod运行在某个node上
输出 yaml格式
1 | [root@ceshi-130 ~]# kubectl get deployment nginx-dp -o yaml -n kube-public > nginx-dp.yaml |
伸缩一份,查看只有131节点存在,那就去130节点打污点
1 | [root@ceshi-130 ~]# kubectl scale --replicas=1 deployment/nginx-dp -n kube-public |
==节点 130==
在130节点打污点
1 | [root@ceshi-130 ~]# kubectl taint nodes ceshi-130.host.com defect=fat:NoSchedule |
查看节点详细资源已经现在污点信息,此时不论将pod扩容几份pod都不会调度到130-node,因为130-node已经有污点新的pod不会在被调度
tolerations:容忍度
修改nginx-dp.yaml文件让他可以容忍污点(containers同一级对齐)
1 | spec: |
再次交付
1 | [root@ceshi-130 ~]# kubectl apply -f nginx-dp.yaml |
扩容4台后查看可以被调度到污点node,因为yaml文件配置是tolerations,意思是可以容忍污点
可以将节点打多个污染
1 | [root@ceshi-130 ~]# kubectl taint nodes ceshi-130.host.com cs=:NoSchedule |
yaml配置也可以配置多个容忍度key(同spec下级containers同级配置),==但是当node打污点为多个,yaml配置为一个时也不满足容忍度要求,同样不会被调度==
1 | spec: |
nodeName
nodeName方式也是一种手动指定pod被调度到某个node的方法,比较简单直接
也是在spec下级和containers同级指定即可
1 | spec: |
两种方式简单来说:
前者是除了能容忍污点的pod会被调度进来,其他都不会被调度
后者是指定当前pod选择node,其他pod也会被调度到次node
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 liujxu!















