带你读《企业级云原生白皮书项目实战》——3.2.8 Scheduler 调度

简介: 带你读《企业级云原生白皮书项目实战》——3.2.8 Scheduler 调度

3.2.8 Scheduler 调度


调度器通过 Kubernetes 的监测(Watch)机制来发现集群中新创建但是未被调度到节点上的 Pod。 对每一个新创建的 Pod 或者是未被调度的 Pod,kube-scheduler 会选择一个最优的节点去运行这个 Pod。 然而,Pod 内的每一个容器对资源都有不同的需求, 而且 Pod 本身也有不同的需求。因此,Pod 在被调度到节点上之前根据这些特定的调度需求,需要对集群中的节点进行一次过滤。

在一个集群中,满足一个 Pod 调度请求的所有节点称之为 可调度节点。 如果没有任何一个节点能满足 Pod 的资源请求, 那么这个 Pod 将一直停留在未调度状态直到调度器能够找到合适的 Node。

调度器先在集群中找到一个 Pod 的所有可调度节点,然后根据一系列函数对这些可调度节点打分, 选出其中得分最高的节点来运行 Pod。之后,调度器将这个调度决定通知给 kube-apiserver,这个过程叫做 绑定。

kube-scheduler 给一个 Pod 做调度选择时包含两个步骤:过滤和打分。过滤阶段会将所有满足 Pod 调度需求的节点选出来。 例如,PodFitsResources 过滤函数会检查候选节点的可用资源能否满足 Pod 的资源请求。 在过滤之后,得出一个节点列表,里面包含了所有可调度节点;通常情况下, 这个节点列表包含不止一个节点。如果这个列表是空的,代表这个 Pod 不可调度。

在打分阶段,调度器会为 Pod 从所有可调度节点中选取一个最合适的节点。 根据当前启用的打分规则,调度器会给每一个可调度节点进行打分。最后,kube-scheduler 会将 Pod 调度到得分最高的节点上。 如果存在多个得分最高的节点,kube-scheduler 会从中随机选取一个。

所以综上可以看到,调度时候其实是涉及多个因素考虑的, 不仅仅是节点资源等因素,在做调度决定时需要考虑的因素包括:单独和整体的资源请求、硬件/软件/策略限制、 亲和以及反亲和要求、数据局部性、负载间的干扰等等 。

那就产生了一个疑问,我们如何查看kube-scheduler的打分情况呢?默认情况下kube-scheduler采集的日志是不会显示pod调度过程中的打分情况的。

修改scheduler运行args参,将 --v=5 修改为--v=7, 修改完毕后会重启scheduler pod,在pod重启过程中,如果遇到pod调度,会被hung住,这个需要结合实际业务判断影响

image.png

图:Scheduler Pod日志等级设定

下面是个典型的pod调度打分过程。我们可以看到针对每一个调度影响方面,scheduler都会对所有适合的node进行打分,最后打分高的node是优先被调度器选择的节点。

image.png

图:Scheduler Pod调度日志示例

相关文章
|
人工智能 Kubernetes Cloud Native
进击的 Kubernetes 调度系统(一):Kubernetes scheduling framework
阿里云容器服务团队结合多年 Kubernetes 产品与客户支持经验,对 Kube-scheduler 进行了大量优化和扩展,逐步使其在不同场景下依然能稳定、高效地调度各种类型的复杂工作负载。《进击的 Kubernetes 调度系统》系列文章将把我们的经验、技术思考和实现细节全面地展现给 Kubernetes 用户和开发者,期望帮助大家更好地了解 Kubernetes 调度系统的强大能力和未来发展方向。
进击的 Kubernetes 调度系统(一):Kubernetes scheduling framework
|
11月前
|
边缘计算 资源调度 监控
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
531 3
|
Kubernetes 算法 调度
Kubernetes的灵魂核心:kube-scheduler
本文介绍了Kubernetes中关键组件kube-scheduler的工作原理,详细解释了其通过预选和优选过程为Pod选择合适节点的机制,并提供了一个简化的Python示例来模拟这一过程,帮助读者更好地理解和管理Kubernetes集群。
|
存储 监控 Kubernetes
Sidecar
Sidecar 和 Device Plugin 都是容器技术中的概念,主要用于容器编排和管理。
691 2
|
缓存 分布式计算 资源调度
kubernetes 【调度和驱逐】【2】kube-scheduler调度器
kubernetes 【调度和驱逐】【2】kube-scheduler调度器
kubernetes 【调度和驱逐】【2】kube-scheduler调度器
|
Kubernetes 测试技术 微服务
k8s学习-Deployment(模板、更新、扩缩容、回滚等)
k8s学习-Deployment(模板、更新、扩缩容、回滚等)
783 0
|
网络安全
【Anaconda】无法打开Anaconda Navigator的解决方法
【Anaconda】无法打开Anaconda Navigator的解决方法
|
域名解析 存储 缓存
2020-2021 IETF DNS技术热点分析
域名系统(DNS)是互联网基础服务和协议,为互联网服务及资源名称(域名)和IP地址两种标识符体系之间的衔接转换,为互联网可扩展性,应用部署的灵活性,和业务安全稳定提供了基础能力。进入移动互联网和云平台时代,DNS作为核心网络基础设施的地位也正在得到愈发广泛的认同。IETF是互联网技术权威标准组织,也是DNS技术定制标准的主要阵地。本文将概述过去两年(2020-2021)在IETF DNS技术热点,包括当前DNS技术社群讨论的技术问题,创新想法,话题趋势和方向。
3063 3
2020-2021 IETF DNS技术热点分析
|
存储 开发框架 算法
51单片机原理以及接口技术(四)--80C51的程序设计
单片机应用系统是合理的硬件与完善的软件的有机组合。软件就是各种指令依某种规律组合形成的程序。程序设计(或软件设计)的任务是利用计算机语言对系统预完成的任务进行描述和规定。
1333 0
51单片机原理以及接口技术(四)--80C51的程序设计