在k8S中,Scheduler作用及实现原理是什么?

简介: 在k8S中,Scheduler作用及实现原理是什么?

在Kubernetes(k8s)中,Scheduler是一个核心组件,它的主要作用是负责集群中的Pod调度。具体来说:

Scheduler的作用

  1. 资源分配:根据每个Pod的资源请求(如CPU、内存),以及节点当前的可用资源情况,选择合适的Node来运行Pod。
  2. 满足约束条件:考虑Pod的调度约束条件和亲和性/反亲和性规则,例如节点标签、区域、拓扑结构等要求,确保Pod被调度到符合其特定需求的Node上。
  3. 服务稳定性与优化:通过预选(Filtering)和优选(Scoring)两个阶段的策略执行, Scheduler不仅确保Pod能够成功调度,还尽可能地优化集群的整体性能和可靠性。

实现原理

Scheduler的工作流程主要包括以下几个关键步骤:

  1. 监听事件:Scheduler会持续监听API Server的事件,一旦有新的待调度Pod或已有Pod需要重新调度时,它将介入并进行调度决策。
  2. 预选阶段(Filtering)
  • Scheduler遍历整个集群的所有Node列表。
  • 对于每一个Node,检查该节点是否满足Pod的资源需求和其他硬性约束条件,如节点标签匹配、容忍度(Taints and Tolerations)、存储容量等。
  • 如果一个Node通过了所有预选策略,则会被加入候选节点集合。
  1. 优选阶段(Prioritizing / Scoring)
  • Scheduler对候选节点集合应用一系列优选策略,为每个节点计算一个优先级分数。
  • 这些优选策略可以包括默认的系统策略(如基于资源利用率的打分)以及用户自定义的策略。
  • Scheduler根据各个节点得到的积分排序,得分最高的节点将被选为Pod的最佳调度位置。
  1. 绑定决策
  • 当确定了最优节点后,Scheduler会在API Server中为Pod创建一个binding对象,将Pod与选定的Node绑定在一起。
  • 调度结果写入etcd,并通知kubelet开始在该Node上启动Pod。
  1. 动态调整
  • Scheduler不断地观察集群状态的变化,并相应地调整Pod的位置,以适应集群资源的实时变化及业务需求。

综上所述,通过上述机制,Kubernetes Scheduler实现了集群资源的有效利用和Pod的智能调度。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Java Maven
DHorse(K8S的CICD平台)的实现原理
首先,本篇文章所介绍的内容,已经有完整的实现,[可以参考这里](https://gitee.com/i512team/dhorse)。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如jekines,还有一些商业公司推出的自动化构建工具,但他们都不能够很好的和云环境相结合。那么[究竟该如何实现一个简单、快速的基于云环境的自动化构建系统呢](https://gitee.com/i512team/dhorse)?我们首先以一个Springboot应用为例来介绍一下整体的发布流程,然后再来看看具体如何实
|
运维 资源调度 Kubernetes
Kubernetes Scheduler Framework 扩展: 1. Coscheduling
# 前言 ## 为什么Kubernetes需要Coscheduling功能? Kubernetes目前已经广泛的应用于在线服务编排,为了提升集群的的利用率和运行效率,我们希望将Kubernetes作为一个统一的管理平台来管理在线服务和离线作业。但是默认的调度器是以Pod为调度单元进行依次调度,不会考虑Pod之间的相互关系。但是很多数据计算类的作业具有All-or-Nothing特点,要求所有的
3695 0
|
资源调度 Kubernetes 应用服务中间件
Kubernetes Scheduler Framework 扩展: 2. Binpack
# 前言 ## 为什么需要Binpack功能? Kubernetes默认开启的资源调度策略是`LeastRequestedPriority`,消耗的资源最少的节点得分最高,优先被调度。这样的资源选择情况有可能导致较多的资源碎片,如下图所示,两个节点各剩余1GPU的资源,导致申请2GPU的作业无法调度,导致整体资源使用率下降。 如果使用的资源调度策略是Binpack,优先将节点
2362 0
|
消息中间件 Kubernetes API
Kubernetes: Job 和 CronJob 的实现原理
Kubernetes: Job 和 CronJob 的实现原理
Kubernetes: Job 和 CronJob 的实现原理
|
Kubernetes 算法 调度
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
|
Kubernetes 监控 调度
K8S中Scheduler原理分析
【6月更文挑战第20天】K8S Scheduler是集群的关键组件,它监听API Server,为新Pod选择合适的Node。
|
Kubernetes 安全 Linux
在k8S中,Calico网络组件实现原理是什么?
在k8S中,Calico网络组件实现原理是什么?
|
Kubernetes 监控 调度
Kubernetes Scheduler 原理分析
【2月更文挑战第28天】
BXA
|
存储 弹性计算 Kubernetes
解析Kubernetes的设计与实现原理
Kubernetes 是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。它通过提供跨主机集群的容器协调和管理服务,实现了高可用性和弹性伸缩的容器集群管理。
BXA
454 0
|
Kubernetes 算法 API
【kubernetes】Scheduler 的调度流程
【kubernetes】Scheduler 的调度流程
344 0