独占核/dedicated_core:以独占的方式去获取物理核,这些 core 上除了运用本身之外不会运转其余租户的过程。咱们又细分了 Numa 的拓扑调配以及疏忽拓扑构造的两个子类,提供了对微拓扑构造上的优化选项;同享核/shared_core:把不同的运用的 Pod 运转在一个同享 CPU 的 Pool 上,这样能够同时针对不同运用状态在 CPU 调度域上的划分,更细粒度地隔分开运用之间的影响;回收核/reclaimed_core:在同享核的根底上,经过混部管制零碎的形式去回收部份的低优资源,咱们能够低优混部的同享形式去提供算力的供应。目前字节外部的运用弹性资源交付也是有三类诉求: OnDemand 按需交付:关于运用的实际使用体验是一种对比现实的形态,属于用户随要随有的模式。然而资源办理方面,很容易诱发大批量的资源闲置问题,字节目前次要在函数类的场景下小范围使用;Reserved 资源预留交付:字节主流的资源办理状态,对繁多办事、资源的队列都可以做到资源总量上的保障;Spot 竞价交付:目前处于数据核心中高增长的资源状态,次要经过弹性扩缩、混部回收失掉部份资源,再以竞价的模式给业务方提供使用。弹性的资源交付状态搭配不同的 cores 保障等级,能够反对不同业务场景的资源售卖模型。2.2.2 分层资源调度
如何无效地把资源诉求精确高效地交付到开发者手上需求一套残缺的调度零碎来反对。字节外部是经过一套分层的调度零碎来完成调度交付的。
单机调度次要是扩展了 Kubernetes 的单机资源管控:资源的微拓扑构造感知和资源的调配战略,次要解决了如何让不同 cores 状态的 Pod 一致运转在一个节点之上。Kubelet 内新增的 QoS Resource Manager 这个组件,次要担任容器的资源管控链路上根据运用的微拓扑亲和性要求给 Pod 调配包罗 CPU 内存以及 GPU 网卡等装备,在单机拓扑构造上的信息能够经过 CRD 上报到调度器,以调度器核心抢占或者调度的方式把 Pod 调配到适合的节点上。同时这个组件可以在框架上灵敏的扩展。
SysAdvisor 是一套单机层面的战略管控完成的组件,能够继续视察 Pod 在细粒度下面的零碎目标如何结合不同业务状态的资源使用模型去做预估,去决策在每一个个资源维度上如何给 Pod 调配适合的资源量。 集群核心调度器需求解决的中心问题是如何让不同状态的运用在全部集群里自在地调度。需求知足不同的调度语义细粒度的要求,充沛升高集群空置率。在调度机能方面,同时要知足低频次和批式的大吞吐的调度场景。针对各种运用场景晋升调度场景的品质也是集群核心调度器需求解决的问题。
下图总结了调度功用层面下不同场景关于调度器的需要:
目前字节使用的调度器是参照 Kubernetes 框架的散布式调度器。这套调度零碎次要的核心式组件有 Dispatcher、并行式的 Scheduler 还有核心式的 Binder。
其中,Dispatcher 次要担任把运用以及集群外部的节点资源调配到详细的 Scheduler 上。Scheduler 在主体构造和 Kubernetes 原生的调度器构造相似,次要处置的就是 predicate 和 priority 的调度计算逻辑。Binder 能够解决不同 Scheduler 视角下调度后果的冲突,而且用 SchedulingUnit 交换了原生的 Pod 语义。这样能够更为便利地处置常驻工作中 per Pod 调度以及批式场景下的 per batch 调度。