华为云云原生钻石集训营 第三课:Kubernetes高级调度器原理详解

举报
菜鸟级攻城狮 发表于 2021/07/24 23:26:37 2021/07/24
【摘要】 华为云云原生钻石集训营 第三课:Kubernetes高级调度器原理详解

学完本课程后,您将能够:

1.了解Kubernetes调度器的工作原理及典型的调度算法

2.理解常见的Kubernetes的高级调度特性

3.理解华为云Volcano的典型批量调度算法

目录:

1. Kubernetes的调度流程原理与算法详解

2. Kubernetes高级调度算法详解

3.华为云CCE Volcano批量调度算法与应用场景详解


1. Kubernetes的调度流程原理与算法详解

Kubernetes scheduler 架构和调度流程

Informer list/watch资源变化,更新queue和cache;

NextPod()从待调度队列获取队首的Pod;从cache中获取Node列表;

针对Pod和NodeList执行Predicate算法,过滤掉不合适的节点;

针对Pod和NodeList执行Priority算法,给节点打分;

根据打分,计算出得分最高的节点;

当高优先级的Pod没有找到合适的节点时,调度器尝试为其抢占优先级低的Pod ;

当调度器为Pod选择了一个合适的节点时,通过Bind将Pod和节点进行绑定;

Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上。在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度pod到资源充足的节点上运行,或调度pod分散到不同节点使集群节点资源均衡等。

Scheduler工作原理

pod创建流程及Scheduler调度步骤:

  • 节点预选(Predicate):排除完全不满足条件的节点,如内存大小,端口等条件不满足。基于一系列的预选规则对每个节点进行检查,将那些不符合条件的节点过滤,从而完成节点的预选。
  • 节点优先级排序(Priority):根据优先级选出最佳节点,对预选出的节点进行优先级排序,以便选出最合适运行Pod对象的节点。
  • 节点择优(Select):根据优先级选定节点,从优先级排序结果中挑选出优先级最高的节点运行Pod,当这类节点多于1个时,则进行随机选择。

2.Kubernetes高级调度算法详解

任意的metadata  所有API对象都有Label           通常用来标记“身份”"      可以查询时用selectors过滤       类似ISOL"select ... where ..."

什么是Label?

Label是Kubernetes系列中另外一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。

通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作。

什么是Label selector?

Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。

nodeAffinity:让pod 与指定Service的一组pod在相同Node上运行

节点亲和性,与nodeSelector作用一样,但相比更灵活,满足更多条件,诸如:

匹配有更多的逻辑组合,不只是字符串的完全相等

调度分为软策略和硬策略,而不是硬性要求

硬(required) :必须满足      软(preferred):尝试满足,但不保证

操作符:In、Notln、Exists、DoesNotExist、Gt、Lt

Taints and Tolerations 是pod的一个属性,它将允许某些pod在指定的节点上或者不允许指定的pod到指定节点上或者必须要有某些的pod才能调度到指定节点上

可以通过kubectl taint 来执行。

         NodeAffinity节点亲和性,是Pod上定义的一种属性,使Pod能够按我们的要求调度到某个Node上,而Taints则恰恰相反,它可以让Node拒绝运行Pod,甚至驱逐Pod。

        Taints(污点)是Node的一个属性,设置了Taints(污点)后,因为有了污点,所以Kubernetes是不会将Pod调度到这个Node上的,

       于是Kubernetes就给Pod设置了个属性Tolerations(容忍),只要Pod能够容忍Node上的污点,那么Kubernetes就会忽略Node上的污点,就能够(不是必须)把Pod调度过去。

        因此 Taints(污点)通常与Tolerations(容忍)配合使用。

3.华为云CCE Volcano批量调度算法与应用场景详解

云原生批量计算面临的挑战

作业管理缺失:Pod级别调度,无法感知上层应用          缺少作业概念、缺少完善的生命周期的管理       缺少任务依赖、作业依赖支持

调度策略局限:不支持Gang-Scheduling、Fairshaing scheduling         不支持多场景的Resource reservation,backfill        

                           不支持CPU/IO topology based scheduling

领域计算框架支持不足:1:1的operator部署运维复杂     不同框架对作业管理、并行计算等要求不同         计算密集,资源波动大。需要高级调度能力

资源规划复用、异构计算支持不足:缺少队列概念     不支持集群资源的动态规划以及资源复用     对异构资源支持不足

Volcano优势:

高性能:提供队列调度、优先级调度、抢占、装箱、资源预留、拓扑调度等丰富的调度策略,在多种场景下提升应用性能

智能混合调度:支持在线、离线混合部署调度,提高整体资源利用效率

应用感知:感知应用类型和特点,针对大数据、AI、HPC负载提供完善的生命周期

集群联邦调度:支持多集群调度和作业分发,满足效率优先、成本优先等不同的场景诉求

大规模:支持大规模集群调度,单集群规模支持1w节点,100w容器

高扩展:插件化算法集成框架,提供两级插件扩展,方便二次开发,满足不同场景诉求

易运维: Volcano 作业提供统一接口,避免过多Operator带来的繁杂管理

社区成熟:CNCF首个批量计算平台,已支持众多的主流Al、大数据、高性能计算框架,众多用户已应用于生产环境

典型调度算法:Gang-scheduling   SLA   TDM   Preempt & Reclaim   DRF    FairShare     Task-Topology        MinResource......

3个作业的执行时间总和;每个作业带2ps+ 4workers

默认调度器执行时间波动较大

执行时间的提高量依据数据在作业中的比例而定

减少Pod Affinity/Anti-Affinity,提高调度器的整体性能

Spark driver和executor pod竞争节点资源,overcommit情况下引发死锁。

通过为Driver pod和Executor Pod静态划分Dedicated节点解决,存在碎片率问题

总结:

本课程讲解重点1: Kubernetes调度流程原理       2: Kubernetes高级调度算法     3:华为CCE Volcano典型调度算法

参考链接:

相关内容的Volcano链接:

https://github.com/volcano-sh/volcano

https://volcano.sh/

Kubernetes官方文档:

Kube-scheduler:  https:/kubernetes.io/zh/docs/concepts/scheduling-eviction/kube-schedulerl

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。