vlambda博客
学习文章列表

k8s之大集群调度加速

# 前言

  由于最近半年来鹅厂求学了, 工作生活非常的紧凑, 所以断更了几个月, 最近发现不能这样, 所以会继续抽时间更新自己的一些工作学习心得, 期望大家能继续关注我。

# 关于调度器的思考

    官方对于调度器的优化, 核心是缓存化(informer)。 但是有没有想过, 对于一些上万节点的集群, 即使可以通过缓存计算, 但是k8s的预选/优选算法是非常多且复杂的,  每次都给这上万的节点执行这些算法肯定会非常慢的, 那么k8s是如何解决这个问题的?

# 官方优化

  官方在1.14之后加了一个配置项percentageOfNodesToScore, 这个的参数的背后就是专门针对大集群的优化, 专门用于解决我上面提出的问题的。

/etc/kubernetes/config/kube-scheduler.yaml

   取值范围为 0-100(百分比)

   这个优化思路本质上就是node分片, 在预选阶段生效, 在找到足够的可调度节点之后停止查找, 极大提升调度性能

   如何能让pod调度覆盖全部node, 因为每次只筛选部分的node 而不是全量的 所以调度器每次会实现类似滑动窗口的效果,每一个pod的调度node起始位置都会从上一个pod的调度结束位置开始, 如下,

      阈值10% node节点数为1000

        第一个pod会在第0-100个节点中执行预选..

        第二个pod会在第101-200个节点中执行预选..

        ... 以此类推


# 后记

    以上就是官方大佬们的优化细节, 感谢观看


资料来源(官方文档+调度器源代码):


https://kubernetes.io/zh/docs/concepts/scheduling-eviction/scheduler-perf-tuning             https://github.com/kubernetes/kubernetes/blob/v1.16.9/pkg/scheduler/core/generic_scheduler.go