You need to enable JavaScript to run this app.
导航

Gang 调度

最近更新时间2024.03.01 15:26:17

首次发布时间2022.09.20 18:05:41

容器服务对原生调度器 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 组件

使用方法

步骤一:创建 PodGroup CRD 资源

  1. 登录 容器服务控制台
  2. 在容器服务的左侧导航栏,选择 集群
  3. 在集群列表,单击需要新增节点的目标集群名称。
  4. 在集群管理页面的左侧导航栏,选择 工作负载 > 对象浏览器
  5. 对象浏览器 页面,单击 使用 Yaml 创建,创建 PodGroup CRD 资源。

    注意

    YAML 的 类型 请选择 自定义

    alt
    apiVersion: scheduling.sigs.k8s.io/v1alpha1
    kind: PodGroup
    metadata:
      name: demo-nginx # PodGroup 名称
      namespace: default # PodGroup 所属命名空间
    spec:
      scheduleTimeoutSeconds: 10 # 等待该 PodGroup 达到最小副本数的超时时间
      minMember: 3 # 该 PodGroup 所需的最小副本数
    
  6. 单击 确定,创建完成 CRD 资源。
    在 对象浏览器的 CRD 分类下,查看已创建的 PodGroup CRD 资源。单击 podgroup 进入详情页面,可查看 PodGroup 的名称。
    alt

步骤二:工作负载中使用 Gang 调度

下文以无状态负载(Deployment)为例。

  • 通过控制台配置

    1. 在集群管理页面的左侧导航栏中,选择 工作负载 > 无状态负载
    2. 无状态负载 页面,创建无状态负载或更新已有的负载。详细操作,请参见 创建无状态负载更新无状态负载
      其中,高级配置 步骤的 实例配置 处,添加 Key 为pod-group.scheduling.sigs.k8s.io、Value 为<上方步骤一中设置的 PodGroup 名称>实例标签
      alt
  • 通过 YAML 配置
    通过 YAML 配置 Gang 调度相关示例如下:

    spec:
          template:
            metadata:
             labels: 
               pod-group.scheduling.sigs.k8s.io: demo-nginx # PodGroup 名称
    

配置完成后,在工作负载详情页面的 实例列表 页签,查看 Pod 的启动状态。
alt