前言
为什么Kubernetes需要Coscheduling功能?
Kubernetes目前已经广泛的应用于在线服务编排,为了提升集群的的利用率和运行效率,我们希望将Kubernetes作为一个统一的管理平台来管理在线服务和离线作业。但是默认的调度器是以Pod为调度单元进行依次调度,不会考虑Pod之间的相互关系。但是很多数据计算类的作业具有All-or-Nothing特点,要求所有的任务都成功创建后才能正常运行,如果只是部分任务启动的话,启动的任务将持续等待剩余的任务被调度。
如下图所示,JobA需要4个Pod同时启动,才能正常运行。Kube-scheduler依次调度3个Pod并创建,到第4个Pod时,集群资源不足,则JobA的3个Pod处于空等的状态,导致集群资源浪费。