概述
Koordinator设计的主要目的是容器混部,即在离线混部,在线容器指的是SLO要求高的延迟敏感的server类型容器,离线容器指的是以大数据应用为主的流式作业和批式作业,离线容器的SLO差别也很大,一般来讲有高优任务和低优任务,其中低优任务可以随意杀死,不需要保证SLO。
重点
售卖模型 和 QoS
控制面
- Scheduler
- Elastic Quota
- resource overcommitment
- resource reservation
- Gang
- 负载感知调度
- Pod descheduling
- Manager(Controller + webhook)
- Colocation Profile 一套QoS描述约定,通过webhook增加标记帮助旧应用快速迁移到Koordinator
- SLO 控制器。该控制器的核心职责是管理混部时的 SLO,如智能识别出集群中的异常节点并降低其权重,动态调整混部时的水位和压力策略,从而保证集群中 pod 的稳定性和吞吐量。
- Recommender(即将推出),它使用 histograms 来统计和预测工作负载的资源使用细节,用来预估工作负载的峰值资源需求,从而支持更好地分散热点,提高混部的效率。支持VPA
数据面
- Koordlet
- 资源 Profiling
- 资源隔离,避免低优Pod影响高优Pod
- 干扰检测,对于运行中的 Pod,动态检测资源争夺
- QoS 管理器,根据资源剖析、干扰检测结果和 SLO 配置,动态调整混部节点的水位
- 资源调优,针对混部场景进行容器资源调优
一些依赖和特性
- 基于社区 ElasticQuota CRD 实现了 Enhanced ElasticQuota Scheduling
- GPU调度强化(共享、超卖、百分比、多卡、NVLink感知)
- CPU Suppress
- CPU Burst
- 主动驱逐
部署
部署完成后,api-resources会增加以下CRD
clustercolocationprofiles config.koordinator.sh false ClusterColocationProfile
devices scheduling.koordinator.sh false Device
podmigrationjobs pmj scheduling.koordinator.sh false PodMigrationJob
reservations scheduling.koordinator.sh false Reservation
nodemetrics slo.koordinator.sh false NodeMetric
nodeslos slo.koordinator.sh false NodeSLO
elasticquotas eq,eqs scheduling.sigs.k8s.io true ElasticQuota
podgroups pg,pgs scheduling.sigs.k8s.io true PodGroup
他们主要作用:
- ClusterColocationProfile: koordinator.sh/docs/user-m…
- Device: github.com/koordinator…
- PodMigrationJob: koordinator.sh/docs/user-m…
- Reservation: koordinator.sh/docs/user-m…
- NodeMetric: koordinator.sh/docs/user-m…
- NodeSLO: 每个Node对应一个,只有Spec没有Status
- ElasticQuota: github.com/koordinator…
- PodGroup