返回顶部
首页 > 资讯 > 精选 >如何理解kubernetes scheduler架构设计
  • 394
分享到

如何理解kubernetes scheduler架构设计

2023-06-19 09:06:16 394人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何理解kubernetes scheduler架构设计,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。资源调度基础scheudler是kubernetes中的核心组件,负

这期内容当中小编将会给大家带来有关如何理解kubernetes scheduler架构设计,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

资源调度基础

scheudler是kubernetes中的核心组件,负责为用户声明的pod资源选择合适的node,同时保证集群资源的最大化利用,这里先介绍下资源调度系统设计里面的一些基础概念

基础任务资源调度

如何理解kubernetes scheduler架构设计 基础的任务资源调度通常包括三部分:

角色类型功能
nodenode负责具体任务的执行,同时对包汇报自己拥有的资源
resource manager汇总当前集群中所有node提供的资源,供上层的scheduler的调用获取,同时根据node汇报的任务信息来进行当前集群资源的更新
scheduler结合当前集群的资源和用户提交的任务信息,选择合适的node节点当前的资源,分配节点任务,尽可能保证任务的运行

通用的调度框架往往还会包含一个上层的集群管理器,负责针对集群中scheduler的管理和资源分配工作,同时负责scheduler集群状态甚至resource manager的保存

资源调度设计的挑战

资源:集群资源利用的最大化与平均

传统的IDC集群资源利用: 在IDC环境中我们通常希望机器利用率能够平均,让机器保持在某个平均利用率,然后根据资源的需要预留足够的buffer, 来应对集群的资源利用高峰,毕竟采购通常都有周期,我们既不能让机器空着,也不能让他跑满(业务无法弹性) 如何理解kubernetes scheduler架构设计 云环境下的资源利用: 而云环境下我们可以按需分配,而且云厂商通常都支持秒级交付,那其实下面的这种资源利用率其实也可以 如何理解kubernetes scheduler架构设计 可以看到仅仅是环境的不一致,就可能会导致不同的调度结果,所有针对集群资源利用最大化这个目标,其实会有很多的不同

调度: 任务最少等待时间与优先级

如何理解kubernetes scheduler架构设计 在集群任务繁忙的时候,可能会导致集群资源部足以分配给当前集群中的所有任务,在让所有任务都能够尽快完成的同时,我们还要保证高优先级的任务优先被完成

调度: 任务本地性

如何理解kubernetes scheduler架构设计 本地性是指在大数据处理中常用的一种机制,其核心是尽可能将任务分配到包含其任务执行资源的节点上,避免数据的复制

集群: 高可用

如何理解kubernetes scheduler架构设计 在调度过程中可能由于硬件、系统或者软件导致任务的不可用,通常会由需要一些高可用机制,来保证当前集群不会因为部分节点宕机而导致整个系统不可用

系统: 可扩展性

如何理解kubernetes scheduler架构设计 扩展机制主要是指的,系统如何如何应对业务需求的变化,提供的一种可扩展机制,在集群默认调度策略不满足业务需求时,通过扩展接口,来进行系统的扩展满足业务需求

Pod调度场景的挑战

Pod调度场景其实可以看做一类特殊的任务,除了上面资源调度的挑战,还有一些针对pod调度这个具体的场景(有些是共同的,这里通过pod来描述会比较清晰)

亲和与反亲和

在kubernetes中的亲和性主要体现pod和node两种资源,主要体现在两个方面: 1.亲和性: 1)pod之间的亲和性 2)pod与node之间的亲和性 2.反亲和: 1)pod之间的反亲和性  2)pod与node之间的反亲和 简单举例: 1.pod之间的反亲和: 为了保证高可用我们通常会将同一业务的多个节点分散在不通的数据中心和机架 2.pod与node亲和性: 比如某些需要磁盘io操作的pod,我们可以调度到具有ssd的机器上,提高IO性能

多租户与容量规划

多租户通常是为了进行集群资源的隔离,在业务系统中,通常会按照业务线来进行资源的隔离,同时会给业务设定对应的容量,从而避免单个业务线资源的过度使用影响整个公司的所有业务

Zone与node选择

zone通常是在业务容灾中常见的概念,通过将服务分散在多个数据中心,避免因为单个数据中心故障导致业务完全不可用

因为之前亲和性的问题,如何在多个zone中的所有node中选择出一个合适的节点,则是一个比较大的挑战

多样化资源的扩展

系统资源除了cpu、内存还包括网络、磁盘io、gpu等等,针对其余资源的分配调度,kubernetes还需要提供额外的扩展机制来进行调度扩展的支持

资源混部

kubernetes初期是针对pod调度场景而生,主要其实是在线WEB业务,这类任务的特点大部分都是无状态的,那如何针对离线场景的去支持离线的批处理计算等任务

kubernetes中的调度初识

中心化数据集中存储

如何理解kubernetes scheduler架构设计

中心化的数据存储

kubernetes是一个数据中心化存储的系统,集群中的所有数据都通过apiserver存储到etcd中,包括node节点的资源信息、节点上面的pod信息、当前集群的所有pod信息,在这里其实apiserver也充当了resource manager的角色,存储所有的集群资源和已经分配的资源

调度数据的存储与获取

如何理解kubernetes scheduler架构设计 kubernetes中采用了一种list watch的机制,用于集群中其他节点从apiserver感知数据,scheduler也采用该机制,通过在感知apiserver的数据变化,同时在本地memory中构建一份cache数据(资源数据),来提供调度使用,即SchedulerCache

scheduler的高可用

大多数系统的高可用机制都是通过类似ZooKeeper、etcd等AP系统实现,通过临时节点或者机制机制来实现多个节点的竞争,从而在主节点宕机时,能够快速接管, scheduler自然也是这种机制,通过apiserver底层的etcd来实现锁的竞争,然后通过apiserver的数据,就可以保证调度器的高可用

调度器内部组成

调度队列

如何理解kubernetes scheduler架构设计 当从apiserver感知到要调度的pod的时候,scheduler会根据pod的优先级,来讲其加入到内部的一个优先级队列中,后续调度的时候,会先获取优先级比较高的pod来进行优先满足调度

这里还有一个点就是如果优先调度了优先级比较低的pod,其实在后续的抢占过程中,也会被驱逐出去

调度与抢占调度

如何理解kubernetes scheduler架构设计 前面提到过抢占,kubernetes默认会对所有的pod来尝试进行调度,当集群资源部满足的时候,则会尝试抢占调度,通过抢占调度,为高优先级的pod来进行优先调度 其核心都是通过调度算法实现即ScheduleAlGorithm

这里的调度算法实际上是一堆调度算法和调度配置的集合

外部扩展机制

如何理解kubernetes scheduler架构设计 scheduler extender是k8s对调度器的一种扩展机制,我们可以定义对应的extender,在对应资源的调度的时候,k8s会检查对应的资源,如果发现需要调用外部的extender,则将当前的调度数据发送给extender,然后汇总调度数据,决定最终的调度结果

内部扩展机制

上面提到调度算法是一组调度算法和调度配置的集合,kubernetes scheduler framework是则是一个框架声明对应插件的接口,从而支持用户编写自己的plugin,来影响调度决策,个人感觉这并不是一种好的机制,因为要修改代码,或者通过修改kubernetes scheduler启动来进行自定义插件的加载

调度基础架构

如何理解kubernetes scheduler架构设计 结合上面所说的就得到了一个最简单的架构,主要调度流程分为如下几部分: 0.通过apiserver来进行主节点选举,成功者进行调度业务流程处理 1.通过apiserver感知集群的资源数据和pod数据,更新本地schedulerCache 2.通过apiserver感知用户或者controller的pod调度请求,加入本地调度队列 3.通过调度算法来进行pod请求的调度,分配合适的node节点,此过程可能会发生抢占调度 4.将调度结果返回给apiserver,然后由kubelet组件进行后续pod的请求处理

这是一个最简单的调度流程和基础的组件模块,所以没有源码,后续这个系列会详细分析每个关键的调度数据结构和一些有趣的调度算法的具体实现。

上述就是小编为大家分享的如何理解kubernetes scheduler架构设计了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何理解kubernetes scheduler架构设计

本文链接: https://lsjlt.com/news/295210.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解kubernetes scheduler架构设计
    这期内容当中小编将会给大家带来有关如何理解kubernetes scheduler架构设计,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。资源调度基础scheudler是kubernetes中的核心组件,负...
    99+
    2023-06-19
  • 怎么理解Kubernetes架构
    本篇内容主要讲解“怎么理解Kubernetes架构”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Kubernetes架构”吧!Kubernetes作为一...
    99+
    2024-04-02
  • 解析Tomcat架构原理到架构设计
    目录一、学习目的1.1、掌握 Tomcat 架构设计与原理提高内功1.2、宏观理解一个请求如何与 Spring 联系起来1.3、提升自己的系统设计能力二、整体架构设计2.1、连接器2...
    99+
    2024-04-02
  • HDFS架构如何设计
    这篇文章主要介绍HDFS架构如何设计,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HDFS架构设计:1.NN(NameNode):主要是维护管理文件命名空间,其中包括了文件名称,文件的权限,创建时间,副本数,文件被分...
    99+
    2023-06-03
  • Node.js Express 与 MVC 架构:理解设计模式
    ...
    99+
    2024-04-02
  • Kubernetes架构设计与核心组件工作流是什么
    这篇文章主要讲解了“Kubernetes架构设计与核心组件工作流是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes架构设计与核心组件工...
    99+
    2024-04-02
  • Kubernetes存储的设计与基本架构方法是什么
    这篇文章主要讲解了“Kubernetes存储的设计与基本架构方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes存储的设计与基本架构...
    99+
    2024-04-02
  • 如何理解.NET可逆框架设计
    本篇文章为大家展示了如何理解.NET可逆框架设计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前段时间一直在学习和研究.NET事务处理,慢慢的我发现可以使用事务处理来实现一种可逆的系统框架。这种框架...
    99+
    2023-06-17
  • 如何理解java架构
    首先说一下java开发架构的形式: 一般我们在学习或者实际开发中,所了解的开发架构都是基于两种形式:C/S架构(客户端/服务器)和B/S架构(浏览器/服务器)。而在JavaEE的开发中,几乎全部都是基于B/S架构开发的。而在B/S架构中,系...
    99+
    2014-05-30
    理解 java 架构
  • MySQL通透详解架构设计
    系统只要能从数据库连接池获取到一个数据库连接,就能执行CRUD。可通过数据库连接将待执行SQL发给MySQL。 大部分 crud boy只知道: 执行insert语句后,在...
    99+
    2024-04-02
  • Dubbo架构整体设计详解
    目录一、Dubbo调用关系说明1.1 组成部分1.2 启动和执行流程说明二、整体调用链路三、Dubbo整体设计一、Dubbo调用关系说明 1.1 组成部分 在这里主要由四部分组成:...
    99+
    2023-05-15
    Java Dubbo架构整体设计 Dubbo架构整体设计 Java Dubbo
  • MySQL架构设计思想详解
    目录前言1. MySQL整体架构2. 连接器3. 查询缓存4. 分析器5. 优化器6. 执行器7. 总结前言 很多开发同学对SQL优化如数家珍,却对MySQL架构一知半解。岂不是只见...
    99+
    2022-11-13
    MySQL架构设计 架构设计
  • Kubernetes中如何部署微服务架构
    要在Kubernetes中部署微服务架构,可以按照以下步骤进行: 创建一个Kubernetes集群:首先需要在云端或本地环境中创...
    99+
    2024-04-02
  • 系统架构设计高级技能 · 云原生架构设计理论与实践
    系列文章目录 系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 · 软件可靠性分析与设计(...
    99+
    2023-08-30
    系统架构 云原生
  • 系统架构设计高级技能 · 大数据架构设计理论与实践
    系列文章目录 系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 · 软件可靠性分析与设计(...
    99+
    2023-08-30
    系统架构
  • ClickHouse分布式架构是如何设计的
    ClickHouse采用了一种分布式架构来处理海量数据的存储和查询。其分布式架构主要包括以下几个关键组件: 分布式存储层:Cli...
    99+
    2024-04-02
  • Java Mybatis架构设计深入了解
    目录架构设计Mybatis主要构件Mybatis缓存总结:架构设计 我们可以把Mybatis的功能架构分为三层: 1.API接口层:提供给外部使用的接口API,开发人员通过这些本地...
    99+
    2024-04-02
  • rainbond的架构设计原理是什么
    这篇“rainbond的架构设计原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“rainbond的架构设计原理是什么...
    99+
    2023-06-29
  • 初识“六边形”架构设计理论
        今天在读"building microservice"这本书时 了解到该理论,不仅应用到微服务设计 还应用到领域驱动六边形体系结构是一种风格,它以一种将核心逻辑与外部元素隔...
    99+
    2023-06-04
  • MySQL Binlog存储系统的架构如何设计
    这篇文章主要讲解了“MySQL Binlog存储系统的架构如何设计”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL Binlog存储系统的架构如何设...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作