K8SPOD污点 Taints概述
前面的调度方式都是站在pod的⻆度上,通过在pod上添加属性,来确定pod是否要调度到指定的node上,其实我们也可以站在node的⻆度上,通过在node上添加污点属性,来决定是否允许pod调度过来。node被设置上污点以后,就和pod之间存在了一种相互排斥的关系,进而拒绝pod调度进来,甚至可以将已经存在的pod驱逐出去。污点的格式:key:污点,key和value是污点的标签,目前支持如下三个
前面的调度方式都是站在pod的⻆度上,通过在pod上添加属性,来确定pod是否要调度到指定的node上,其实我们也可以站在node的⻆度上,通过在node上添加污点属性,来决定是否允许pod调度过来。node被设置上污点以后,就和pod之间存在了一种相互排斥的关系,进而拒绝pod调度进来,甚至可以将已经存在的pod驱逐出去。
污点的格式:key:污点,key和value是污点的标签,目前支持如下三个污点:
(1)PreferNoSchedule:尽量避免调度(软限制),除非没有其他节点可调度
(2)NoSchedule:拒绝调度(硬限制),但不会影响当前已经存在的pod
(3)NoExecute:拒绝调度,同时也会将节点上已经存在的pod清除(尽量不要设置,会导致Pod异常)
提示:如果通过定向调度的方式去创建Pod,那么定向调度的优先级要高于污点。
使用kubectl设置和去除污点的命令实例如下:
设置污点
kubectl taint nodes worker01 key:污点去除污点
kubectl taint nodes worker01 key:污点-去除所有污点
kubectl taint nodes worker01 key-
1 Pod 污点之 PreferNoSchedule
实验准备:
(1)为了演示污点的效果更加明显,暂时停止worker02节点,将worker02节点关机即可,关机后验证节点状态。
# kubectl get nodes ... worker02 NotReady
(2)将前边案例配置文件中定向调度删除后在进行创建,否则看不到效果。
vim deploy_nginx.yml
(3)为worker01设置污点,名称为:worker01:PreferNoSchedule
[root@master01 ~]# kubectl taint node worker01 worker01:PreferNoSchedule
查看污点信息
[root@master01 ~]# kubectl describe node worker01 | grep Taints Taints: worker01:PreferNoSchedule
创建Pod验证
[root@master01 ~]# kubectl create -f deploy_nginx.yml查看Pod所在节点健康状态
[root@master01 ~]# kubectl get pod -n test -o wide删除PreferNoSchedule污点
[root@master01 ~]# kubectl taint node worker01 worker01:PreferNoSchedule-
2 Pod 污点之 NoSchedule
设置worker01污点为:worker01:NoSchedule
[root@master01 ~]# kubectl taint node worker01 worker01:NoSchedule 查看污点信息 [root@master01 ~]# kubectl describe node worker01 | grep Taints Taints: worker01:NoSchedule 创建Pod [root@master01 ~]# kubectl create -f deploy_nginx.yml 查看Pod所在节点健康状态 [root@master01 ~]# kubectl get pod -n test -o wide #提示:可以发现当前的pod状态为Pending(挂起状态) 删除deploy [root@master01 ~]# kubectl delete -f deploy_nginx.yml
更多推荐
所有评论(0)