容器服务对原生调度器 kube-scheduler 进行能力的扩展后,同时扩展支持了 Gang 调度能力。本文主要描述 Gang 调度的触发和使用方法。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
Gang 调度是并发系统中一种调度策略,将多个相关联的进程调度到不同的处理器上同时运行。防止部分进程的异常,导致整个关联进程的阻塞。
Gang 调度的最主要的原则是保证所有相关联的进程能够同时启动,不允许有异常进程的存在,即 All-or-Nothing。All-or-Nothing 指要么所有进程全部启动,批量任务成功运行;要么只要存在异常进程,则所有进程都不能启动,批量任务运行失败。
同时,容器服务引入 PodGroup CRD 资源,实现 Gang 调度。PodGroup 是容器服务的自定义 CRD 资源类型,是一组匹配 All-or-Nothing 批量任务需要启动的相关联的 Pod 集合。容器服务支持创建 PodGroup CRD 资源,设置 PodGroup 的名称以及保证批量任务正常运行所需最少副本数和超时时间,再通过实例标签(Lable),在工作负载中关联 PodGroup CRD 资源,实现 Gang 调度。
已安装 scheduler-plugin 组件。具体操作,请参见 scheduler-plugin 组件。
注意
YAML 的 类型 请选择 自定义。
apiVersion: scheduling.sigs.k8s.io/v1alpha1 kind: PodGroup metadata: name: demo-nginx # PodGroup 名称 namespace: default # PodGroup 所属命名空间 spec: scheduleTimeoutSeconds: 10 # 等待该 PodGroup 达到最小副本数的超时时间 minMember: 3 # 该 PodGroup 所需的最小副本数
下文以无状态负载(Deployment)为例。
通过控制台配置
通过 YAML 配置
通过 YAML 配置 Gang 调度相关示例如下:
spec: template: metadata: labels: pod-group.scheduling.sigs.k8s.io: demo-nginx # PodGroup 名称
配置完成后,在工作负载详情页面的 实例列表 页签,查看 Pod 的启动状态。