华为云云原生钻石集训营 第三课: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
Kubernetes官方文档:
Kube-scheduler: https:/kubernetes.io/zh/docs/concepts/scheduling-eviction/kube-schedulerl
- 点赞
- 收藏
- 关注作者
评论(0)