Kubernetes调度算法浅析

  • 158

在真正的生产环境中,如何合理的分配服务器资源、提高利用率、让整个集群运行的更加稳定使得 k8s-scheduler 这个角色在集群中的地位愈发重要。

kube-scheduler的预选(过滤)和精选(打分)

api-server会将创建pod的请求发送给kube-scheduler,并且将pod信息记录在etcd数据库中。之后kube-scheduler会根据预选(过滤)规则,首先过滤掉一部分node节点中的pod,没有被过滤掉的pod可以看做是可以被调度的pod,之后再通过更加严格的规则给剩下的pod打分,这一步也叫作优选。打分最高的pod可以看做被优先分配到pod任务。

在这里插入图片描述

调度流程简介

  1. 创建pod的命令被api-server的api接口接收到。api-server将pod信息存储在etcd数据库中。
  2. kube-scheduler通过api-server查看有哪些可用的pod。
  3. kube-scheduler通过一组算法过滤掉一部分不可用的pod或者node节点。
  4. kube-scheduler再通过更加严格的打分机制对所有的可用pod进行打分。
  5. 通过打分选出分数最高的pod,并将pod进行绑定之后存储在etcd中。
  6. node节点的kubelet接收到api-server指令进行pod创建。

kube-scheduler的预选(过滤)规则

kube-scheduler首先通过以下规则对所有node节点或者pod进行初步的过滤。

在这里插入图片描述

kube-scheduler的优选(打分)规则

在经过重重过滤之后,剩下的都是K8S集群可用的pod和node节点。之后kube-scheduler会根据另一套规则给每个节点和待分配的pod进行打分。
1.首先可用的node和pod会被打分函数进行打分,分数在0-10分之间。并且每个打分函数还有一个权重值。那么一个可用的node节点最后的总分就是:Σ函数打分*函数的权重值。

node节点总分 =(函数1的打分 * 函数1权重值)+......+(函数n的打分 * 函数n的权重值)

2.打分函数即优先级函数的种类:

在这里插入图片描述
这里只介绍了一部分的优先级函数算法,还有许多算法在这里未解释有兴趣的小伙伴可以上网查一下哦。

小结

kube-scheduler组件将整个集群资源调配变得很科学。比如该如何分配pod的副本到其他的node节点中,或者如何分配pod使得集群运转的更加高效。此外kube-scheduler还支持第三方的调度器进行扩展,所以是一种插件化的实现。

继续阅读
avatar
  • 本文由 发表于 2020年12月20日
  • 除非特殊声明,本站文章许可协议为"署名-非商用-相同方式共享 4.0",转载请保留原链、作者等信息。
nsenter 及 Linux命名空间 简介 运维架构

nsenter 及 Linux命名空间 简介

nsenter 是一个可以在指定进程的命令空间下,运行程序的命令,它位于 util-linux 包中。 nsenter 用途 nsenter 的一个典型用途是进入容器的网络名字空间,进行网络相关的排障...
K8S中Pod的四个阶段及状态分析 运维架构

K8S中Pod的四个阶段及状态分析

Kubernetes 中, pod 从创建到成功运行会分别处于不同的阶段,每个阶段又分为不同的状态,本文将简单介绍这个环节。 在 K8S 源码中,使用了 PodPhase 这个变量定义这几个阶段信息,...