在Kubernetes集群中,调度(Scheduling)过程具体是指调度器组件(kube-scheduler)根据集群整体资源情况,将待运行的Pod分配到合适的节点上。由于ACS集群以虚拟节点的形式提供资源,因此您无需考虑复杂的资源分配策略,只需专注于应用的编排规则即可。本文介绍ACS集群中常用调度能力的使用方法和注意事项。
Kubernetes原生调度策略
Kubernetes原生调度器提供了多种的调度插件,在ACS的虚拟节点中,您只需关注亲和性相关策略,来保证应用的性能和高可用场景,具体包括可用区拓扑打散、节点亲和性、Pod间亲和性。
功能 | 策略说明 | 参考文档 |
可用区拓扑打散 | 通过在拓扑分布约束协议字段TopologyKey中指定虚拟节点的标签,实现对工作负载的可用区打散能力。 | |
节点亲和性 | 虚拟节点以label的形式标记了各类属性,例如可用区。通过在nodeSelector等字段中描述亲和性需求,可以将应用运行在特定属性的虚拟节点上。 | |
Pod间亲和性 | 用于表达Pod之间的亲和性偏好,相较于节点亲和性,Pod间亲和性调度支持基于已经在虚拟节点上运行的Pod的标签来约束Pod可以调度到的范围。通过在podAffinity等字段中描述亲和性需求,可以将Pod调度到指定的拓扑域。 |
自定义资源优先级调度
功能 | 策略说明 | 典型场景 | 参考文档 |
自定义资源优先级调度 | 支持为Pod同时指定多种Compute Class或Compute QoS,调度器将在库存不足时自动尝试生产其他类型的Pod实例。 | 应用要求优先使用某一类型应用,例如计算任务希望优先使用性价比更优的best-effort型实例。 |
任务调度
K8s集群中,任务型应用的申请资源需求更为多样,例如AI训练任务会要求保障一组Pod都可以同时申请到资源,在应用较多的集群内还会有资源容量管理的需求,ACS针对任务型应用提供了以下调度能力。
功能 | 策略说明 | 典型场景 | 参考文档 |
Gang scheduling | 要求在调度时按照一组Pod整批分配资源,确保这组Pod都可以同时申请到资源,当无法满足时,这组Pod应都集体处于Pending状态。 | 高性能计算、AI训练等任务,应用需要所有副本都启动才能运行,如MPI任务。 | |
Capacity Scheduling | 允许集群为特定的命名空间设定资源容量限制。 | 多个用户或应用共享集群,需要按命名空间限制资源使用。 |