使用descheduler平衡pod在worker上的分布

关注老段工作室公众号
使用descheduler平衡pod在worker上的分布

介绍

k8s本身是缺少对pod再调度的功能的,假设当前环境里有2个worker,通过deployment创建了6个副本,那么这6个副本会分布再这两个worker上运行。

如果此时增加了一个新的worker,那么已经运行的pod是没法调度到第三个节点上的,除非是手动删除这些pod让其重新调度。

descheduler解决的就是pod再调度的问题的。当集群中新增加了节点,descheduler会平衡一下worker上的pod数,即把一些已经存在的pod调度到新的worker上。

环境准备

file
先把vms63设置为不可用:
file
创建含有6个副本的deployment,这6个副本应该都是在vms62上运行的:
file
现在把vms63设置为可用:
file
这6个副本依然是不会运行在vms63上的。

部署descheduler

descheduler的本质就是利用计划任务定期去检测pod在节点的分布,然后根据自己的算去平衡每个节点上的pod数。

项目地址https://github.com/kubernetes-sigs/descheduler
下载地址https://codeload.github.com/kubernetes-sigs/descheduler/zip/master
下载解压之后,进入目录:
file
在所有节点上下载镜像us.gcr.io/k8s-artifacts-prod/descheduler/descheduler:v0.18.0
修改cronjob.yaml的内容,把镜像下载策略设置为IfNotPresent,并把cronjob的间隔设置为1分钟:
file
保存退出。
检查kube-system命名空间里cronjob,当此cronjob运行之后:
file
descheduler就开始重新调度pod的运行:
file
file
file
可以看到pod已经被调度到不同的节点上运行了。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读