AI 工作负载


OpenShift Container Platform 4.20

在 OpenShift Container Platform 上运行 AI 工作负载

Red Hat OpenShift Documentation Team

摘要

本文档提供有关在 OpenShift Container Platform 集群中运行人工智能(AI)工作负载的信息。它包括如何可靠地在跨节点间启用大规模 AI 训练工作负载的详细信息。

OpenShift Container Platform 为运行人工智能(AI)工作负载(包括训练、推理和数据科学流程)提供了一个安全、可扩展的基础。

1.1. 运行 AI 工作负载的 Operator

您可以使用 Operator 在 OpenShift Container Platform 上运行人工智能(AI)和机器学习(ML)工作负载。通过 Operator,您可以构建满足特定 AI/ML 要求的自定义环境,同时继续使用 OpenShift Container Platform 作为应用程序的核心平台。

OpenShift Container Platform 提供了多个可以帮助您运行 AI 工作负载的 Operator:

红帽构建的 Kueue

您可以使用红帽构建的 Kueue 提供结构化队列和优先级,以便公平高效地处理工作负载。如果没有正确的优先级,重要的作业可能会延迟,而相对不是非常关键的作业会占用资源。

如需更多信息,请参阅 "红帽构建的 Kueue 介绍"。

Leader Worker Set Operator

您可以使用 Leader Worker Set Operator 启用在跨节点间稳定地运行大规模 AI 推理工作负载,在 leader 和 worker 进程间进行同步。如果没有适当的协调,运行的大型训练可能会失败或停滞。

如需更多信息,请参阅"Leader Worker Set Operator 概述"。

第 2 章 红帽构建的 Kueue

2.1. 红帽构建的 Kueue 简介

红帽构建的 Kueue 是一个 Kubernetes 原生系统,用于管理对作业资源的访问。红帽构建的 Kueue 可以决定作业等待、接受创建 pod 或应该被抢占(这意味着该作业的活动 pod 被删除)的时间。

注意

对于红帽构建的 Kueue,一个作业可以被定义为一次性任务或按需任务,它需要运行完成。

红帽构建的 Kueue 基于 Kueue 开源项目。

红帽构建的 Kueue 与使用异构、弹性资源的环境兼容。这意味着,环境具有不同的资源类型,这些资源能够动态扩展。

红帽构建的 Kueue 不会替换 Kubernetes 集群中的任何现有组件,而是与现有 Kubernetes API 服务器、调度程序和集群自动扩展组件集成。

红帽构建的 Kueue 支持“all-or-nothing”语义。这意味着,所有组件的整个作业都会被接受到集群,或者如果整个作业不适用于集群,则拒绝整个作业。

2.1.1. 用户角色(Personas)

红帽构建的 Kueue 工作流存在不同的用户角色。

批处理管理员
批处理管理员管理集群基础架构,并建立配额和队列。
批处理用户
批处理用户在集群中运行作业。例如,批处理用户可以是研究人员、AI/ML 工程师或数据科学家。
服务(Serving)用户
服务用户在集群中运行作业。例如,要公开经过训练的 AI/ML 模型用于推理。
平台开发者
平台开发者将红帽构建的 Kueue 与其他软件集成。它们也会向 Kueue 开源项目进行贡献。

2.1.2. 工作流概述

红帽构建的 Kueue 工作流的高级别描述如下:

  1. 批处理管理员创建和配置 ResourceFlavorLocalQueueClusterQueue 资源。
  2. 用户角色在集群上创建作业。
  3. Kubernetes API 服务器验证并接受作业数据。
  4. 红帽构建的 Kueue 会基于配置选项(如订单或配额)来批准作业。它使用资源 flavor 将关联性注入到作业,并创建一个与每个作业对应的 Workload 对象。
  5. 适用于作业类型的控制器创建 pod。
  6. Kubernetes 调度程序将 pod 分配给集群中的一个节点。
  7. Kubernetes 集群自动扩展器会根据需要置备更多节点。

2.2. 发行注记

红帽构建的 Kueue 作为 OpenShift Container Platform 支持的 Operator 发布。

2.2.1. 兼容环境

在安装红帽构建的 Kueue 前,请查看本节以确保您的集群满足要求。

2.2.1.1. 支持的构架

以下构架上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.2.1.2. 支持的平台

以下平台上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • OpenShift Container Platform
  • 为 OpenShift Container Platform 托管的 control plane
重要

目前,Red Hat build of MicroShift (MicroShift) 不支持红帽构建的 Kueue。

2.2.2. 红帽构建的 Kueue 版本 1.1 发行注记

红帽构建的 Kueue 版本 1.1 是一个正式发布的版本,在 OpenShift Container Platform 版本 4.18 及更新的版本中被支持。红帽构建的 Kueue 版本 1.1 使用 Kueue 版本 0.12。

重要

如果您之前在集群中安装了以前的红帽构建的 Kueue 版本,则需要卸载以前的 Operator 并手动安装 1.1。如需更多信息,请参阅升级红帽构建的 Kueue

2.2.2.1. 新功能及功能增强
配置默认本地队列

默认本地队列充当新创建的作业的本地队列,它们没有 kue.x-k8s.io/queue-name 标签。创建一个默认本地队列后,在该命名空间中创建的任何没有 kueue.x-k8s.io/queue-name 标签的新作业都会自动更新为带有 kue.x-k8s.io/queue-name: default 标签。

(RFE-7615)

支持多架构和托管 control plane

在这个版本中,红帽构建的 Kueue 在多个不同的构架上被支持,包括 ARM64、64 位 x86、ppc64le (IBM Power inventory, 和 s390x (IBM Z7),以及在 OpenShift Container Platform 的托管 control plane 上。

(OCPSTRAT-2103)

(OCPSTRAT-2106)

2.2.2.2. 修复的问题
您可以使用 OpenShift Container Platform Web 控制台创建 Kueue 自定义资源

在此更新之前,如果您尝试使用 OpenShift Container Platform Web 控制台使用表单视图创建 Kueue 自定义资源 (CR),Web 控制台会显示错误,且无法创建资源。在这个版本中,default 命名空间已从 Kueue CR 模板中删除。因此,您可以使用 OpenShift Container Platform Web 控制台的表单视图创建一个 Kueue CR。

(OCPBUGS-58118)

2.2.2.3. 已知问题
Kueue CR 描述在 OpenShift Container Platform Web 控制台中显示为 "Not available"

在安装了红帽构建的 Kueue 后,在 Operator 详情视图中,Kueue CR 的描述会显示为 "Not available"。这个问题不会影响或降级红帽构建的 Kueue Operator 功能。

(OCPBUGS-62185)

在卸载红帽构建的 Kueue 时,自定义资源不会被正确删除

在 OpenShift Container Platform Web 控制台中使用这个 operator 选项的 Delete all operand instance for this operator 选项卸载 Red Hat Build of Kueue Operator 后,一些红帽构建的 Kueue 自定义资源不会被完全删除。这些资源可以在 Installed Operators 视图中看到,其状态为 Resource is being deleted。作为临时解决方案,您可以手动删除资源终结器来完全删除它们。

(OCPBUGS-62254)

2.2.3. 红帽构建的 Kueue 版本 1.0.1 发行注记

红帽构建的 Kueue 版本 1.0.1 是一个补丁版本,它在 64 位 x86 架构的 OpenShift Container Platform 版本 4.18 和 4.19 上被支持。

红帽构建的 Kueue 版本 1.0.1 使用 Kueue 版本 0.11。

  • 在以前的版本中,红帽构建的 Kueue 的领导选举机制没有配置为容许中断,从而导致频繁崩溃。在这个版本中,红帽构建的 Kueue 的领导选举值已更新,以匹配 OpenShift Container Platform 推荐的持续时间。(OCPBUGS-58496)
  • 在以前的版本中,ReadyReplicas 计数没有在协调器中设置,这意味着红帽构建的 Kueue Operator 状态会报告没有副本就绪。在这个版本中,ReadyReplicas 计数会基于部署的就绪副本数,这样可确保在 OpenShift Container Platform 控制台中显示为 ready 状态(当 kue-controller-manager pod 就绪)。(OCPBUGS-59261)
  • 在以前的版本中,当从 openshift-kueue-operator 命名空间中删除 Kueue 自定义资源 (CR) 时,kueue-manager-config 配置映射不会被自动删除,并可能保留在命名空间中。在这个版本中,在删除 Kueue 时,kueue-manager-config 凭证映射, kueue-webhook-server-cert secret, 和 metrics-server-cert secret 会自动删除。(OCPBUGS-57960)

2.2.4. 红帽构建的 Kueue 版本 1.0 发行注记

红帽构建的 Kueue 版本 1.0 是一个正式发布的版本,它在 64 位 x86 架构的 OpenShift Container Platform 版本 4.18 和 4.19 上被支持。红帽构建的 Kueue 版本 1.0 使用 Kueue 版本 0.11。

2.2.4.1. 新功能及功能增强
基于角色的访问控制 (RBAC)
基于角色的访问控制 (RBAC) 允许您控制哪些类型的用户可以创建哪些类型的红帽构建的 Kueue 资源。
配置资源配额
通过创建集群队列、资源类型和本地队列来配置资源配额,允许您控制用户提交的作业和工作负载使用的资源量。
控制作业和工作负载管理
通过标记命名空间和配置标签策略,您可以控制哪些作业和工作负载由红帽构建的 Kueue 管理。
在队列间共享可移动设备的资源
配置 ohorts, fair sharing, 和 gang scheduling 设置可让您在队列间共享未使用的、可借调的资源。
2.2.4.2. 已知问题
所有作业有 kue.x-k8s.io/queue-name 标签,则所有命名空间中的作业会协调它们

红帽构建的 Kueue 使用 managedJobsNamespaceSelector 配置字段,以便管理员可以配置选择由红帽构建的 Kueue 管理的命名空间。由于命名空间必须手动配置为选择由红帽构建的 Kueue 管理,因此 system 命名空间或第三方命名空间中的资源不受红帽构建的 Kueue 的影响或管理。

红帽构建的 Kueue 1.0 的行为允许协调具有 kue.x-k8s.io/queue-name 标签的 Job 资源,即使这些资源位于没有被选择使用红帽构建的 Kueue 的命名空间中。这与 pod、部署和有状态集等其他核心集成的行为不一致,只有在它们被配置为选择由红帽构建的 Kueue 管理的命名空间中时才协调。

(OCPBUGS-58205)

您不能使用 OpenShift Container Platform Web 控制台创建 Kueue 自定义资源

如果您尝试使用 OpenShift Container Platform Web 控制台使用表单视图创建 Kueue 自定义资源 (CR),Web 控制台会显示错误,且无法创建资源。作为临时解决方案,使用 YAML 视图来创建一个 Kueue CR。

(OCPBUGS-58118)

2.3. 安装红帽构建的 Kueue

您可以使用 OperatorHub 中的 Red Hat Build of Kueue Operator 来安装红帽构建的 Kueue。

2.3.1. 兼容环境

在安装红帽构建的 Kueue 前,请查看本节以确保您的集群满足要求。

2.3.1.1. 支持的构架

以下构架上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.3.1.2. 支持的平台

以下平台上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • OpenShift Container Platform
  • 为 OpenShift Container Platform 托管的 control plane
重要

目前,Red Hat build of MicroShift (MicroShift) 不支持红帽构建的 Kueue。

2.3.2. 安装 Red Hat Build of Kueue Operator

您可以使用 Web 控制台中的 OperatorHub 在 OpenShift Container Platform 集群上安装 Red Hat Build of Kueue Operator。

先决条件

  • 在 OpenShift Container Platform 集群上具有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 已为集群安装并配置了 Red Hat OpenShift 的 cert-manager Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. 从可用的 Operator 列表中选择 Red Hat Build of Kueue Operator,然后点 Install

验证

  • 进入 OperatorsInstalled Operators,并确认 Red Hat Build of Kueue Operator 列的状态Succeeded

2.3.3. 升级 Red Hat build of Kueue

如果您之前已安装了红帽构建的 Kueue,您必须手动将部署升级到最新版本,以使用最新的程序错误修复和功能增强。

先决条件

  • 已安装 Red Hat build of Kueue 的早期版本。
  • 使用集群管理员权限登录到 OpenShift Container Platform Web 控制台。

流程

  1. 在 OpenShift Container Platform web 控制台中,点 OperatorsInstalled Operators,然后从列表中选择 Red Hat build of Kueue
  2. Actions 下拉菜单中选择 Uninstall Operator
  3. 此时会打开 Uninstall Operator? 对话框。点 Uninstall

    重要

    在点 Uninstall 从集群中删除所有现有资源前,选择 Delete all operand instance for this operator 复选框,包括:

    • Kueue CR
    • 您创建的任何集群队列、本地队列或资源类型

    当升级集群以保留创建的资源时,请保留此复选框。

  4. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  5. 从可用的 Operator 列表中选择 Red Hat Build of Kueue Operator,然后点 Install

验证

  1. 进入 OperatorsInstalled Operators
  2. 确认 Red Hat Build of Kueue OperatorStatusSucceeded
  3. 确认列表中 Operator 名称下显示的版本是最新版本。

2.3.4. 创建 Kueue 自定义资源

安装 Red Hat Build of Kueue Operator 后,您必须创建一个 Kueue 自定义资源 (CR) 来配置您的安装。

先决条件

确保您已完成以下先决条件:

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 您有集群管理员权限和 kueue-batch-admin-role 角色。
  • 访问 OpenShift Container Platform web 控制台。

流程

  1. 在 OpenShift Container Platform web 控制台中,点击 OperatorsInstalled Operators
  2. Provided APIs 表列中,点 Kueue。这会进入 Operator 详情页的 Kueue 选项卡。
  3. Create Kueue。这会进入 Create Kueue YAML 视图。
  4. 输入 Kueue CR 的详情。

    Kueue CR 示例

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      labels:
        app.kubernetes.io/name: kueue-operator
        app.kubernetes.io/managed-by: kustomize
      name: cluster 
    1
    
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks: 
    2
    
          - BatchJob
        preemption:
          preemptionPolicy: Classical 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    Kueue CR 的名称必须是 cluster
    2
    如果要配置红帽构建的与其它工作负载类型搭配使用的 Kueue,请在此处添加这些类型。对于默认配置,只支持 BatchJob 类型。
    3
    可选: 如果要为 Kueue 构建配置公平共享(fair sharing),请将 preemptionPolicy 值设置为 FairSharingKueue CR 中的默认设置是 Classical 抢占。
  5. Create

验证

  • 创建 Kueue CR 后,Web 控制台会进入 Operator 详情页,您可以在其中看到 Kues 列表中的 CR。
  • 可选:如果安装了 OpenShift CLI (oc),您可以运行以下命令并观察输出,以确认已成功创建了您的 Kueue CR:

    $ oc get kueue
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      	AGE
    cluster   	4m
    Copy to Clipboard Toggle word wrap

Red Hat build of Kue Operator 使用一个选择使用(opt-in)webhook 机制来确保策略只针对预期目标的作业和命名空间强制执行。

您必须使用 kueue.openshift.io/managed=true 标签标记需要红帽构建的 Kueue.openshift.io/managed=true 标签的命名空间。

先决条件

  • 有集群管理员权限。
  • 在集群中安装 Red Hat build of Kueue Operator,您已创建了一个 Kueue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令,将 kueue.openshift.io/managed=true 标签添加到命名空间:

    $ oc label namespace <namespace> kueue.openshift.io/managed=true
    Copy to Clipboard Toggle word wrap

添加此标签时,您指示 Red Hat build of Kueue Operator,命名空间由它的 webhook 准入控制器管理。因此,该命名空间中的任何红帽构建的 Kueue 资源都会被正确验证并修改。

2.4. 在断开连接的环境中安装红帽构建的 Kueue

在断开连接的 OpenShift Container Platform 集群上安装红帽构建的 Kueue 前,您必须完成以下步骤在断开连接的环境中启用 Operator Lifecycle Manager (OLM):

  • 为 OLM 禁用默认远程 OperatorHub 源。
  • 使用有完全互联网访问的工作站来创建并推送 OperatorHub 内容的本地镜像到镜像 registry。
  • 将 OLM 配置为从镜像 registry 上的本地源而不是默认的远程源安装和管理 Operator。

在断开连接的环境中启用 OLM 后,您可以继续使用不受限制的工作站在发布较新版本的 Operator 时保持本地 OperatorHub 源更新。

有关完成这些步骤的完整文档,请参阅 OpenShift Container Platform 文档中有关 在断开连接的环境中使用 Operator Lifecycle Manager 的文档。

2.4.1. 兼容环境

在安装红帽构建的 Kueue 前,请查看本节以确保您的集群满足要求。

2.4.1.1. 支持的构架

以下构架上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • ARM64
  • 64-bit x86
  • ppc64le (IBM Power®)
  • s390x (IBM Z®)
2.4.1.2. 支持的平台

以下平台上支持红帽构建的 Kueue 版本 1.1 及更新的版本:

  • OpenShift Container Platform
  • 为 OpenShift Container Platform 托管的 control plane
重要

目前,Red Hat build of MicroShift (MicroShift) 不支持红帽构建的 Kueue。

2.4.2. 安装 Red Hat Build of Kueue Operator

您可以使用 Web 控制台中的 OperatorHub 在 OpenShift Container Platform 集群上安装 Red Hat Build of Kueue Operator。

先决条件

  • 在 OpenShift Container Platform 集群上具有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 已为集群安装并配置了 Red Hat OpenShift 的 cert-manager Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. 从可用的 Operator 列表中选择 Red Hat Build of Kueue Operator,然后点 Install

验证

  • 进入 OperatorsInstalled Operators,并确认 Red Hat Build of Kueue Operator 列的状态Succeeded

2.4.3. 升级 Red Hat build of Kueue

如果您之前已安装了红帽构建的 Kueue,您必须手动将部署升级到最新版本,以使用最新的程序错误修复和功能增强。

先决条件

  • 已安装 Red Hat build of Kueue 的早期版本。
  • 使用集群管理员权限登录到 OpenShift Container Platform Web 控制台。

流程

  1. 在 OpenShift Container Platform web 控制台中,点 OperatorsInstalled Operators,然后从列表中选择 Red Hat build of Kueue
  2. Actions 下拉菜单中选择 Uninstall Operator
  3. 此时会打开 Uninstall Operator? 对话框。点 Uninstall

    重要

    在点 Uninstall 从集群中删除所有现有资源前,选择 Delete all operand instance for this operator 复选框,包括:

    • Kueue CR
    • 您创建的任何集群队列、本地队列或资源类型

    当升级集群以保留创建的资源时,请保留此复选框。

  4. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  5. 从可用的 Operator 列表中选择 Red Hat Build of Kueue Operator,然后点 Install

验证

  1. 进入 OperatorsInstalled Operators
  2. 确认 Red Hat Build of Kueue OperatorStatusSucceeded
  3. 确认列表中 Operator 名称下显示的版本是最新版本。

2.4.4. 创建 Kueue 自定义资源

安装 Red Hat Build of Kueue Operator 后,您必须创建一个 Kueue 自定义资源 (CR) 来配置您的安装。

先决条件

确保您已完成以下先决条件:

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 您有集群管理员权限和 kueue-batch-admin-role 角色。
  • 访问 OpenShift Container Platform web 控制台。

流程

  1. 在 OpenShift Container Platform web 控制台中,点击 OperatorsInstalled Operators
  2. Provided APIs 表列中,点 Kueue。这会进入 Operator 详情页的 Kueue 选项卡。
  3. Create Kueue。这会进入 Create Kueue YAML 视图。
  4. 输入 Kueue CR 的详情。

    Kueue CR 示例

    apiVersion: kueue.openshift.io/v1
    kind: Kueue
    metadata:
      labels:
        app.kubernetes.io/name: kueue-operator
        app.kubernetes.io/managed-by: kustomize
      name: cluster 
    1
    
      namespace: openshift-kueue-operator
    spec:
      managementState: Managed
      config:
        integrations:
          frameworks: 
    2
    
          - BatchJob
        preemption:
          preemptionPolicy: Classical 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    Kueue CR 的名称必须是 cluster
    2
    如果要配置红帽构建的与其它工作负载类型搭配使用的 Kueue,请在此处添加这些类型。对于默认配置,只支持 BatchJob 类型。
    3
    可选: 如果要为 Kueue 构建配置公平共享(fair sharing),请将 preemptionPolicy 值设置为 FairSharingKueue CR 中的默认设置是 Classical 抢占。
  5. Create

验证

  • 创建 Kueue CR 后,Web 控制台会进入 Operator 详情页,您可以在其中看到 Kues 列表中的 CR。
  • 可选:如果安装了 OpenShift CLI (oc),您可以运行以下命令并观察输出,以确认已成功创建了您的 Kueue CR:

    $ oc get kueue
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      	AGE
    cluster   	4m
    Copy to Clipboard Toggle word wrap

Red Hat build of Kue Operator 使用一个选择使用(opt-in)webhook 机制来确保策略只针对预期目标的作业和命名空间强制执行。

您必须使用 kueue.openshift.io/managed=true 标签标记需要红帽构建的 Kueue.openshift.io/managed=true 标签的命名空间。

先决条件

  • 有集群管理员权限。
  • 在集群中安装 Red Hat build of Kueue Operator,您已创建了一个 Kueue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令,将 kueue.openshift.io/managed=true 标签添加到命名空间:

    $ oc label namespace <namespace> kueue.openshift.io/managed=true
    Copy to Clipboard Toggle word wrap

添加此标签时,您指示 Red Hat build of Kueue Operator,命名空间由它的 webhook 准入控制器管理。因此,该命名空间中的任何红帽构建的 Kueue 资源都会被正确验证并修改。

2.5. 配置基于角色的权限

以下流程提供有关如何为红帽构建的 Kueue 部署配置基于角色的访问控制(RBAC)的信息。这些 RBAC 权限决定了哪些类型的用户可以创建哪些类型的红帽构建的 Kueue 对象。

2.5.1. 集群角色

Kueue Operator 的红帽构建会默认部署 kue-batch-admin-rolekueue-batch-user-role 集群角色。

kueue-batch-admin-role
此集群角色包括管理集群队列、本地队列、工作负载和资源类别的权限。
kueue-batch-user-role
此集群角色包含管理作业以及查看本地队列和工作负载的权限。

2.5.2. 为批处理管理员配置权限

您可以通过将 kue-batch-admin-role 集群角色绑定到用户或组来配置批处理管理员的权限。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 有集群管理员权限。
  • 已安装 OpenShift CLI(oc)。

流程

  1. ClusterRoleBinding 对象创建为 YAML 文件:

    ClusterRoleBinding 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kueue-admins 
    1
    
    subjects: 
    2
    
    - kind: User
      name: admin@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef: 
    3
    
      kind: ClusterRole
      name: kueue-batch-admin-role
      apiGroup: rbac.authorization.k8s.io
    Copy to Clipboard Toggle word wrap

    1
    ClusterRoleBinding 对象提供名称。
    2
    添加您要为其提供用户权限的用户或组的详情。
    3
    添加 kue-batch-admin-role 集群角色的详细信息。
  2. 应用 ClusterRoleBinding 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 您可以运行以下命令来验证 ClusterRoleBinding 对象是否已正确应用,并验证输出是否包含 kue-batch-admin-role 集群角色的正确信息:

    $ oc describe clusterrolebinding.rbac
    Copy to Clipboard Toggle word wrap

    输出示例

    ...
    Name:         kueue-batch-admin-role
    Labels:       app.kubernetes.io/name=kueue
    Annotations:  <none>
    Role:
      Kind:  ClusterRole
      Name:  kueue-batch-admin-role
    Subjects:
      Kind            Name                      Namespace
      ----            ----                      ---------
      User            admin@example.com         admin-namespace
    ...
    Copy to Clipboard Toggle word wrap

2.5.3. 为用户配置权限

您可以通过将 kue-batch-user-role 集群角色绑定到用户或组,为红帽构建的 Kueue-batch-user-role 集群角色配置权限。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 有集群管理员权限。
  • 已安装 OpenShift CLI(oc)。

流程

  1. RoleBinding 对象创建为 YAML 文件:

    ClusterRoleBinding 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: kueue-users 
    1
    
      namespace: user-namespace 
    2
    
    subjects: 
    3
    
    - kind: Group
      name: team-a@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef: 
    4
    
      kind: ClusterRole
      name: kueue-batch-user-role
      apiGroup: rbac.authorization.k8s.io
    Copy to Clipboard Toggle word wrap

    1
    RoleBinding 对象提供名称。
    2
    添加 RoleBinding 对象应用到的命名空间的详细信息。
    3
    添加您要为其提供用户权限的用户或组的详情。
    4
    添加 kue-batch-user-role 集群角色的详细信息。
  2. 应用 RoleBinding 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 您可以运行以下命令来验证 RoleBinding 对象是否已正确应用,并验证输出是否包含 kue-batch-admin-role 集群角色的正确信息:

    $ oc describe rolebinding.rbac
    Copy to Clipboard Toggle word wrap

    输出示例

    ...
    Name:         kueue-users
    Labels:       app.kubernetes.io/name=kueue
    Annotations:  <none>
    Role:
      Kind:  ClusterRole
      Name:  kueue-batch-user-role
    Subjects:
      Kind            Name                      Namespace
      ----            ----                      ---------
      Group           team-a@example.com        user-namespace
    ...
    Copy to Clipboard Toggle word wrap

2.6. 配置配额

作为管理员,您可以使用红帽构建的 Kueue 来配置配额来优化用户工作负载的资源分配和系统吞吐量。您可以为 CPU、内存、pod 和 GPU 等计算资源配置配额。

您可以通过完成以下步骤,在红帽构建的 Kueue 中配置配额:

  1. 配置集群队列。
  2. 配置资源类别。
  3. 配置本地队列。

然后,用户可以将其工作负载提交到本地队列。

2.6.1. 配置集群队列

集群队列是一个集群范围的资源,由 ClusterQueue 对象表示,用于管理 CPU、内存和 pod 等资源池。集群队列可用于定义用量限值、资源类别配额、消耗顺序和公平共享规则。

注意

在同时配置了 ResourceFlavor 对象前,集群队列未就绪。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 有集群管理员权限或 kue-batch-admin-role 角色。
  • 已安装 OpenShift CLI(oc)。

流程

  1. ClusterQueue 对象创建为 YAML 文件:

    使用单个资源类别的基本 ClusterQueue 对象示例

    apiVersion: kueue.x-k8s.io/v1beta1
    kind: ClusterQueue
    metadata:
      name: cluster-queue
    spec:
      namespaceSelector: {} 
    1
    
      resourceGroups:
      - coveredResources: ["cpu", "memory", "pods", "foo.com/gpu"] 
    2
    
        flavors:
        - name: "default-flavor" 
    3
    
          resources: 
    4
    
          - name: "cpu"
            nominalQuota: 9
          - name: "memory"
            nominalQuota: 36Gi
          - name: "pods"
            nominalQuota: 5
          - name: "foo.com/gpu"
            nominalQuota: 100
    Copy to Clipboard Toggle word wrap

    1
    定义哪些命名空间可以使用由此集群队列管理的资源。示例所示的空 namespaceSelector 表示所有命名空间都可以使用这些资源。
    2
    定义由集群队列管理的资源类型。这个示例 ClusterQueue 对象管理 CPU、内存、pod 和 GPU 资源。
    3
    定义应用到列出的资源类型的资源类别。在本例中,default-flavor 资源类别应用于 CPU、内存、pod 和 GPU 资源。
    4
    定义接受作业的资源要求。这个示例集群队列仅在满足以下条件时接受作业:
    • CPU 请求总和小于或等于 9。
    • 内存请求总和小于或等于 36Gi。
    • pod 的总数小于或等于 5。
    • GPU 请求总和小于或等于 100。
  2. 运行以下命令来应用 ClusterQueue 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

后续步骤

在同时配置了 ResourceFlavor 对象前,集群队列未就绪。

2.6.2. 配置资源类别

配置 ClusterQueue 对象后,您可以配置 ResourceFlavor 对象。

集群中的资源通常不是同构的。如果集群中的资源是同构的,您可以使用空 ResourceFlavor,而不是向自定义资源类型添加标签。

您可以使用自定义资源 Flavor 对象来代表通过标签、污点和容限与集群节点关联的不同资源变化。然后,您可以将工作负载与特定的节点类型关联,以启用精细的资源管理。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 有集群管理员权限或 kue-batch-admin-role 角色。
  • 已安装 OpenShift CLI(oc)。

流程

  1. ResourceFlavor 对象创建为 YAML 文件:

    ResourceFlavor 对象示例

    apiVersion: kueue.x-k8s.io/v1beta1
    kind: ResourceFlavor
    metadata:
      name: default-flavor
    Copy to Clipboard Toggle word wrap

    自定义资源 Flavor 对象示例

    apiVersion: kueue.x-k8s.io/v1beta1
    kind: ResourceFlavor
    metadata:
      name: "x86"
    spec:
      nodeLabels:
        cpu-arch: x86
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用 ResourceFlavor 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.6.3. 配置本地队列

本地队列是一个命名空间对象,由 LocalQueue 对象表示,该对象对属于单个命名空间的紧密相关的工作负载进行分组。

作为管理员,您可以配置 LocalQueue 对象以指向集群队列。这会将资源从集群队列分配给 LocalQueue 对象中指定的命名空间中的工作负载。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 有集群管理员权限或 kue-batch-admin-role 角色。
  • 已安装 OpenShift CLI(oc)。
  • 您已创建了 ClusterQueue 对象。

流程

  1. 创建一个 LocalQueue 对象作为 YAML 文件:

    基本 LocalQueue 对象示例

    apiVersion: kueue.x-k8s.io/v1beta1
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: user-queue
    spec:
      clusterQueue: cluster-queue
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用 LocalQueue 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.6.4. 配置默认本地队列

作为集群管理员,您可以通过管理所选命名空间中的所有作业来提高集群中的配额强制,而无需显式标记每个作业。您可以通过创建默认的本地队列来完成此操作。

默认本地队列充当新创建的作业的本地队列,它们没有 kue.x-k8s.io/queue-name 标签。创建一个默认本地队列后,在该命名空间中创建的任何没有 kueue.x-k8s.io/queue-name 标签的新作业都会自动更新为带有 kue.x-k8s.io/queue-name: default 标签。

重要

当您创建默认本地队列时,命名空间中的预先存在的作业不会受到影响。如果在创建默认本地队列前命名空间中已存在作业,则必须明确将这些作业分配给队列。

先决条件

  • 您已在集群中安装了 Red Hat build of Kueue 版本 1.1。
  • 有集群管理员权限或 kue-batch-admin-role 角色。
  • 已安装 OpenShift CLI(oc)。
  • 您已创建了 ClusterQueue 对象。

流程

  1. 创建名为 defaultLocalQueue 对象,作为 YAML 文件:

    默认 LocalQueue 对象示例

    apiVersion: kueue.x-k8s.io/v1beta1
    kind: LocalQueue
    metadata:
      namespace: team-namespace
      name: default
    spec:
      clusterQueue: cluster-queue
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用 LocalQueue 对象:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 在与默认本地队列相同的命名空间中创建作业。
  2. 使用 kueue.x-k8s.io/queue-name: default 标签观察作业更新。

2.7. 管理作业和工作负载

红帽构建的 Kueue 不会直接操作用户创建的作业。相反,Kueue 管理代表作业资源要求的 Workload 对象。红帽构建的 Kueue 会自动为每个作业创建一个工作负载,并同步两个对象之间的任何决策和状态。

Red Hat build of Kue Operator 使用一个选择使用(opt-in)webhook 机制来确保策略只针对预期目标的作业和命名空间强制执行。

您必须使用 kueue.openshift.io/managed=true 标签标记需要红帽构建的 Kueue.openshift.io/managed=true 标签的命名空间。

先决条件

  • 有集群管理员权限。
  • 在集群中安装 Red Hat build of Kueue Operator,您已创建了一个 Kueue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令,将 kueue.openshift.io/managed=true 标签添加到命名空间:

    $ oc label namespace <namespace> kueue.openshift.io/managed=true
    Copy to Clipboard Toggle word wrap

添加此标签时,您指示 Red Hat build of Kueue Operator,命名空间由它的 webhook 准入控制器管理。因此,该命名空间中的任何红帽构建的 Kueue 资源都会被正确验证并修改。

2.7.2. 为作业配置标签策略

Kueue 自定义资源 (CR) 中的 spec.config.workloadManagement.labelPolicy spec 是一个可选字段,用于控制红帽构建的 Kueue 决定是否管理或忽略不同的作业。允许的值是 QueueNameNone 和空("")。

如果 labelPolicy 设置被省略或为空(""),默认策略是红帽构建的 Kueue 管理具有 kueue.x-k8s.io/queue-name 标签的作业,并忽略没有 kueue.x-k8s.io/queue-name 标签的作业。这与 labelPolicy 被设置为 QueueName 的工作流相同。

如果将 labelPolicy 设置设定为 None,则作业由红帽构建的 Kueue 管理,即使它们没有 x-k8s.io/queue-name 标签。

workloadManagement spec 配置示例

apiVersion: kueue.openshift.io/v1
kind: Kueue
metadata:
  labels:
    app.kubernetes.io/name: kueue-operator
    app.kubernetes.io/managed-by: kustomize
  name: cluster
  namespace: openshift-kueue-operator
spec:
  config:
    workloadManagement:
      labelPolicy: QueueName
# ...
Copy to Clipboard Toggle word wrap

包含 kueue.x-k8s.io/queue-name 标签的用户创建的 Job 对象示例

apiVersion: batch/v1
kind: Job
metadata:
  generateName: sample-job-
  namespace: my-namespace
  labels:
    kueue.x-k8s.io/queue-name: user-queue
spec:
# ...
Copy to Clipboard Toggle word wrap

2.8. 使用 cohorts

您可以使用 cohorts 对集群队列进行分组,并确定哪些集群队列可以相互共享可借调的资源。可借调(Borrowable)资源定义为 cohort 中所有集群队列的未使用的 nominal 配额。

使用 cohorts 可以帮助优化资源利用率,它会防止出现利用不足的情况并启用公平共享配置。Cohorts 还有助于简化团队之间的资源管理和分配,您可以将相关工作负载的集群队列分组或为每个团队分组。您还可以使用 cohorts 在组级别上设置资源配额,以定义一组集群队列可以使用的资源的限制。

2.8.1. 在集群队列规格中配置 cohorts

您可以通过在 ClusterQueue 对象的 .spec.cohort 字段中指定 cohort 项的名称,将集群队列添加到 cohort 中,如下例所示:

apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
  name: cluster-queue
spec:
# ...
  cohort: example-cohort
# ...
Copy to Clipboard Toggle word wrap

具有匹配的 spec.cohort 的所有集群队列都是同一 cohort 的一部分。

如果省略 spec.cohort 字段,集群队列不属于任何 cohort,无法访问可借调资源。

2.9. 配置公平共享

公平共享是一种抢占策略,用于在 cohort 租户之间实现相等或加权资源共享。可借调(Borrowable)资源是 cohort 中所有集群队列的未使用的 nominal 配额。

您可以通过将 Kueue 自定义资源 (CR) 中的 preemptionPolicy 值设置为 FairSharing 来配置公平共享。

2.9.1. 集群队列权重

在启用了公平共享(sharing)后,您需要为每个集群队列设置共享值,然后公平共享才能生效。共享值由 ClusterQueue 对象中的 weight 值代表。

共享值非常重要,因为它们允许管理员优先选择特定的作业类型或团队。关键应用程序或高优先级团队可以使用加权值配置,以便它们可以获得比例更大的可用资源共享。配置权重可确保,根据定义的机构或项目优先级来分发未使用的资源,而不是以“先到先得”为基础。

weight 值(或共享值)为集群队列在竞争可借调资源时定义比较的优势。通常,红帽构建的 Kueue 会首先准入带有较低共享值的作业。和有较低值的作业相比,有更高共享值的作业更有可能会被抢占。

带有配置了公平共享权重的集群队列示例

apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
  name: cluster-queue
spec:
  namespaceSelector: {}
  resourceGroups:
  - coveredResources: ["cpu"]
    flavors:
    - name: default-flavor
      resources:
      - name: cpu
        nominalQuota: 9
  cohort: example-cohort
  fairSharing:
    weight: 2
Copy to Clipboard Toggle word wrap

2.9.1.1. 零权重

weight0 代表一个无限共享值。这意味着,与其它队列相比,此集群队列始终处于劣势。因此在启用公平共享时,其工作负载始终会被首先抢占。

2.10. Gang 调度

Gang 调度(Gang scheduling)可确保一个组(或gang)相关的作业只在所有需要的资源都可用时才会启动。红帽构建的 Kueue 启用 gang scheduling 时,它会挂起作业,直到 OpenShift Container Platform 集群可以保证足够的容量以一起启动和执行 gang 中的所有相关作业。这也被称为 all-or-nothing 调度。

如果您使用昂贵的、有限的资源(如 GPU)时,则 Gang 调度非常重要。Gang 调度可以防止出现作业只是声明但不使用 GPU 的情况,这可以提高 GPU 利用率并降低运行成本。Gang 调度还可以帮助防止资源分段和死锁等问题。

2.10.1. 配置 gang 调度

作为集群管理员,您可以通过修改 Kueue 自定义资源 (CR) 中的 gangScheduling spec 来配置 gang 调度。

配置了 gang 调度的 Kueue CR 示例

apiVersion: kueue.openshift.io/v1
kind: Kueue
metadata:
  name: cluster
  labels:
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: kueue-operator
  namespace: openshift-kueue-operator
spec:
  config:
    gangScheduling:
      policy: ByWorkload 
1

      byWorkload:
        admission: Parallel 
2

# ...
Copy to Clipboard Toggle word wrap

1
您可以通过设置 policy 值来启用或禁用 gang 调度。可能的值包括 ByWorkload,None, 或空("")。
ByWorkload
policy 值被设置为 ByWorkload 时,每个作业都会被单独处理并被视为一个单元。如果作业没有在指定时间内就绪,整个作业都会被驱除并在以后重试。
None
policy 值被设置为 None 时,会禁用 gang 调度。
空 ("")
policy 值为空或设置为 "" 时,红帽构建的 Kueue Operator 会决定 gang 调度的设置。目前,会默认禁用 gang 调度。
2
如果 policy 值设置为 ByWorkload,您必须配置作业准入设置。admission spec 的可能值包括 Parallel, Sequential, 或空 ("")。
Parallel
admission 值设置为 Parallel 时,任何作业中的 pod 可以随时被接受。当作业竞争集群容量时可能会导致死锁。发生死锁时,从另一个作业成功调度的 pod 可能会阻止调度当前作为的 pod。
Sequential
admission 值设置为 Sequential 时,只接受当前处理作业中的 pod。在接受了所有来自当前作业中的 pod 且它们都已就绪后,红帽构建的 Kueue 会处理下一个作业。当集群有足够的容量用于多个作业时,Sequential 处理可能会减慢准入速度,但会增加一个作业的所有 pod 都被成功调度的可能性。
空 ("")
admission 值为空或设置为 "" 时,红帽构建的 Kueue Operator 会决定作业准入设置。目前,admission 值默认设置为 Parallel

2.11. 使用配额限制运行作业

您可以使用启用了红帽构建的 Kueue 运行 Kubernetes 作业,以便在定义的配额限值内管理资源分配。这有助于确保可预见的资源可用性、集群稳定性和优化性能。

2.11.1. 识别可用的本地队列

在向队列提交一个作业前,您需要找到本地队列的名称。

先决条件

  • 集群管理员已在 OpenShift Container Platform 集群上安装和配置了红帽构建的 Kueue。
  • 集群管理员已为您分配了 kue-batch-user-role 集群角色。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令列出命名空间中的可用本地队列:

    $ oc -n <namespace> get localqueues
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME         CLUSTERQUEUE    PENDING WORKLOADS
    user-queue   cluster-queue   3
    Copy to Clipboard Toggle word wrap

当您定义要使用红帽构建 Kueue 运行的作业时,请确保它满足以下条件:

  • 使用 kueue.x-k8s.io/queue-name 标签指定要提交作业的本地队列。
  • 包括每个作业 pod 的资源请求。

红帽构建的 Kueue 会暂停作业,然后在有资源可用时启动它。红帽构建的 Kueue 创建了对应的工作负载,以 Workload 对象表示,其名称与作业匹配。

先决条件

  • 集群管理员已在 OpenShift Container Platform 集群上安装和配置了红帽构建的 Kueue。
  • 集群管理员已为您分配了 kue-batch-user-role 集群角色。
  • 已安装 OpenShift CLI(oc)。
  • 您已确定要提交作业的本地队列的名称。

流程

  1. 创建 Job 对象。

    作业示例

    apiVersion: batch/v1
    kind: Job 
    1
    
    metadata:
      generateName: sample-job- 
    2
    
      namespace: my-namespace
      labels:
        kueue.x-k8s.io/queue-name: user-queue 
    3
    
    spec:
      parallelism: 3
      completions: 3
      template:
        spec:
          containers:
          - name: dummy-job
            image: registry.k8s.io/e2e-test-images/agnhost:2.53
            args: ["entrypoint-tester", "hello", "world"]
            resources: 
    4
    
              requests:
                cpu: 1
                memory: "200Mi"
          restartPolicy: Never
    Copy to Clipboard Toggle word wrap

    1
    将资源类型定义为 Job 对象,它代表批处理计算任务。
    2
    提供用于为作业生成唯一名称的前缀。
    3
    标识将作业发送到的队列。
    4
    定义各个容器集的资源请求。
  2. 运行以下命令来运行作业:

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令,验证 pod 是否在您创建的作业中运行:

    $ oc get job <job-name>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME               STATUS      COMPLETIONS   DURATION   AGE
    sample-job-sk42x   Suspended   0/1                      2m12s
    Copy to Clipboard Toggle word wrap

  • 运行以下命令并观察输出,验证您的命名空间中是否为作业创建了工作负载:

    $ oc -n <namespace> get workloads
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                         QUEUE          RESERVED IN   ADMITTED   FINISHED   AGE
    job-sample-job-sk42x-77c03   user-queue                                         3m8s
    Copy to Clipboard Toggle word wrap

2.12. 获取支持

如果您在执行本文档所述的某个流程或红帽构建的 Kueue 时遇到问题,请访问红帽客户门户

通过红帽客户门户网站:

  • 搜索或者浏览红帽知识库,了解与红帽产品相关的文章和解决方案。
  • 向红帽支持提交支持问题单。
  • 访问其他产品文档。

2.12.1. 关于红帽知识库

红帽知识库提供丰富的内容以帮助您最大程度地利用红帽的产品和技术。红帽知识库包括文章、产品文档和视频,概述了安装、配置和使用红帽产品的最佳实践。另外,您还可以搜索已知问题的解决方案,其提供简洁的根原因描述和补救措施。

2.12.2. 为红帽支持收集数据

您可以使用 oc adm must-gather CLI 命令来收集有关最有助于调试问题的红帽构建的 Kueue 实例的信息,包括:

  • 红帽构建的 Kueue 自定义资源,如工作负载、集群队列、本地队列、资源类别、准入检查及其相应的集群资源定义 (CRD)
  • 服务(Services)
  • 端点(Endpoints)
  • Webhook 配置
  • 来自 openshift-kue-operator 命名空间和 kueue-controller-manager pod 的日志

默认情况下,收集的数据将写入当前工作目录中名为 must-gather/ 的新目录中。

先决条件

  • 在集群中安装了 Red Hat build of Kueue Operator。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 进入存储 must-gather 数据的目录。
  2. 运行以下命令来收集 must-gather 数据:

    $ oc adm must-gather \
      --image=registry.redhat.io/kueue/kueue-must-gather-rhel9:<version>
    Copy to Clipboard Toggle word wrap

    其中 <version> 是您的红帽构建的 Kueue 的当前版本。

  3. 从工作目录中刚刚创建的 must-gather 目录创建一个压缩文件。确保为唯一的 must-gather 数据提供日期和集群 ID。有关如何查找集群 ID 的更多信息,请参阅如何在 OpenShift 集群上找到 cluster-id 或名称
  4. 红帽客户门户网站的客户支持页面中,将压缩文件附加到您的支持问题单中。

第 3 章 Leader Worker Set Operator

3.1. Leader Worker Set Operator 概述

将大型语言模型 (LLM) 用于 AI/ML 推理通常需要大量的计算资源,因此工作负载通常需要在多个节点之间进行分片。这可使部署变得复杂,对扩展、故障恢复以及有效的 pod 放置方面造成挑战。

Leader Worker Set Operator 通过将一组 pod 视为一个单个的、相互协调的单元,从而简化了对这些多节点的部署。它管理组中每个 pod 的生命周期,将整个组一起进行扩展,并在组级别执行更新和故障恢复以确保一致性。

3.1.1. 关于 Leader Worker Set Operator

Leader Worker Set Operator 基于 LeaderWorkerSet 开源项目。LeaderWorkerSet 是一个自定义 Kubernetes API,它可用于将一组 pod 作为一个单元来部署。这对人工智能 (AI) 和机器学习 (ML) 的工作负载很有用,其中大型语言模型 (LLM) 在多个节点上进行分片。

通过 LeaderWorkerSet API,pod 被分组为一个单元,包括一个 leader 和多个 worker,它们作为一个单个实体一起管理。组中的每个 pod 都有一个唯一的 pod 身份。组中的 Pod 会并行创建,并共享相同的生命周期阶段。推出部署、滚动更新和 pod 故障重启作为组来执行。

LeaderWorkerSet 配置中,您可以定义组的大小以及组副本数。如果需要,您可以为 leader 和 worker pod 定义单独的模板,以进行特定于角色的自定义。您还可以配置拓扑感知放置,以便同一组中的 pod 位于相同的拓扑中。

重要

在安装 Leader Worker Set Operator 之前,您需要安装 cert-manager Operator for Red Hat OpenShift,因为配置服务和管理指标集合需要它。

默认情况下,对 Leader Worker Set Operator 的监控是通过 OpenShift Container Platform 的 Prometheus 实现的。

3.1.1.1. LeaderWorkerSet 架构

下图显示了 LeaderWorkerSet API 如何将 pod 组组织到一个单元中,其中一个 pod 作为 leader,其余 pod 作为 worker,以协调分布式工作负载:

图 3.1. Leader worker set 架构

LeaderWorkerSet API 使用一个 leader 有状态集来管理 pod 组的部署和生命周期。对于每个定义的副本,都会创建一个 leader-worker 组。

每个 leader-worker 组包含一个 leader pod 和一个 worker 有状态集。worker 有状态集由 leader pod 所拥有,并管理与该 leader pod 关联的 worker pod 集合。指定的大小定义了每个 leader-worker 组中的 pod 总数,leader pod 包括在其中。

3.2. leader Worker Set Operator 发行注记

您可以使用 Leader Worker Set Operator 来管理分布式推理工作负载,并有效地处理大规模推理请求。

本发行注记介绍了 Leader Worker Set Operator 的开发。

如需更多信息,请参阅关于 Leader Worker Set Operator

3.2.1. Leader Worker Set Operator 1.0.0 发行注记

发布日期:2025 年 9 月 18 日

以下公告可用于 Leader Worker Set Operator 1.0.0:

3.2.1.1. 新功能及功能增强
  • 这是 Leader Worker Set Operator 的初始发行版本。

您可以使用 Leader Worker Set Operator 来管理分布式推理工作负载,并有效地处理大规模推理请求。

3.3.1. 安装 Leader Worker Set Operator

您可以使用 Web 控制台安装 Leader Worker Set Operator。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 您已为 Red Hat OpenShift 安装了 cert-manager Operator。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 验证是否安装了 cert-manager Operator for Red Hat OpenShift。
  3. 安装 Leader Worker Set Operator。

    1. 导航到 EcosystemSoftware Catalog
    2. 在过滤器中输入 Leader Worker Set Operator
    3. 选择 Leader Worker Set Operator,再点 Install
    4. Install Operator 页中:

      1. Update channel 设置为 stable-v1.0,它会安装 Leader Worker Set Operator 1.0 的最新稳定版本。
      2. Installation mode 下,选择 A specific namespace on the cluster
      3. Installed Namespace 下,选择 Operator recommended Namespace: openshift-lws-operator
      4. Update approval 下,选择以下更新策略之一:

        • Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
        • Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
      5. Install
  4. 为 Leader Worker Set Operator 创建自定义资源 (CR):

    1. 进入到 Installed OperatorsLeader Worker Set Operator
    2. Provided APIs 下,点 LeaderWorkerSetOperator 窗格中的 Create instance
    3. Create

3.3.2. 部署 leader worker 集

您可以使用 Leader Worker Set Operator 来部署 leader worker 集,以帮助跨节点管理分布式工作负载。

先决条件

  • 已安装 Leader Worker Set Operator。

流程

  1. 运行以下命令创建新项目:

    $ oc new-project my-namespace
    Copy to Clipboard Toggle word wrap
  2. 创建名为 leader-worker-set.yaml的文件

    apiVersion: leaderworkerset.x-k8s.io/v1
    kind: LeaderWorkerSet
    metadata:
      generation: 1
      name: my-lws 
    1
    
      namespace: my-namespace 
    2
    
    spec:
      leaderWorkerTemplate:
        leaderTemplate: 
    3
    
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: leader
              resources: {}
        restartPolicy: RecreateGroupOnPodRestart 
    4
    
        size: 3 
    5
    
        workerTemplate: 
    6
    
          metadata: {}
          spec:
            containers:
            - image: nginxinc/nginx-unprivileged:1.27
              name: worker
              ports:
              - containerPort: 8080
                protocol: TCP
              resources: {}
      networkConfig:
        subdomainPolicy: Shared 
    7
    
      replicas: 2 
    8
    
      rolloutStrategy:
        rollingUpdateConfiguration:
          maxSurge: 1 
    9
    
          maxUnavailable: 1
        type: RollingUpdate
      startupPolicy: LeaderCreated
    Copy to Clipboard Toggle word wrap
    1
    指定 leader worker 设置资源的名称。
    2
    指定要在其中运行的 leader worker 设置的命名空间。
    3
    指定 leader pod 的 pod 模板。
    4
    为发生 pod 失败时指定重启策略。允许的值是 RecreateGroupOnPodRestart(重启整个组),或 None(不重启组)。
    5
    指定要为每个组创建的 pod 数量,包括 leader pod。例如,值 3 会创建 1 个 leader pod 和 2 个 worker pod。默认值为 1
    6
    指定 worker pod 的 pod 模板。
    7
    指定创建无头服务时要使用的策略。允许的值是 UniquePerReplicaShared。默认值为 Shared
    8
    指定副本数,或 leader-worker 组。默认值为 1
    9
    指定在滚动更新过程中可调度的在 replicas 值之上的最大副本数。该值可以指定为整数或百分比。

    有关配置所有可用字段的更多信息,请参阅 LeaderWorkerSet API 上游文档。

  3. 运行以下命令来应用 leader worker 设置配置:

    $ oc apply -f leader-worker-set.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令验证 pod 是否已创建:

    $ oc get pods -n my-namespace
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME         READY   STATUS    RESTARTS   AGE
    my-lws-0     1/1     Running   0          4s 
    1
    
    my-lws-0-1   1/1     Running   0          3s
    my-lws-0-2   1/1     Running   0          3s
    my-lws-1     1/1     Running   0          7s 
    2
    
    my-lws-1-1   1/1     Running   0          6s
    my-lws-1-2   1/1     Running   0          6s
    Copy to Clipboard Toggle word wrap

    1
    第一个组的 leader pod。
    2
    第二个组的 leader pod。
  2. 运行以下命令查看有状态的集合:

    $ oc get statefulsets
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME       READY   AGE
    my-lws     4/4     111s 
    1
    
    my-lws-0   2/2     57s 
    2
    
    my-lws-1   2/2     60s 
    3
    Copy to Clipboard Toggle word wrap

    1
    所有 leader-worker 组的领导有状态集。
    2
    第一个组的 worker 有状态集。
    3
    第二个组的 worker 有状态集。

3.4. 卸载 Leader Worker Set Operator

您可以通过卸载 Operator 并删除其相关资源,从 OpenShift Container Platform 中删除 Leader Worker Set Operator。

3.4.1. 卸载 Leader Worker Set Operator

您可以使用 Web 控制台卸载 Leader Worker Set Operator。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 已安装 Leader Worker Set Operator。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. Project 下拉列表中选择 openshift-lws-operator
  4. 删除 LeaderWorkerSetOperator 实例。

    1. Leader Worker Set Operator,再选择 LeaderWorkerSetOperator 选项卡。
    2. 集群条目旁边的 Options 菜单 kebab ,然后选择 Delete LeaderWorkerSetOperator
    3. 在确认对话框中,点 Delete
  5. 卸载 Leader Worker Set Operator。

    1. 导航到 OperatorsInstalled Operators
    2. Leader Worker Set Operator 条目旁边的选项菜单 kebab ,点 Uninstall Operator
    3. 在确认对话框中,点 Uninstall

3.4.2. 卸载 Leader Worker Set Operator 资源

另外,在卸载 Leader Worker Set Operator 后,您可以从集群中删除其相关资源。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 您已卸载了 Leader Worker Set Operator。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 删除安装 Leader Worker Set Operator 时创建的 CRD:

    1. 进入到 AdministrationCustomResourceDefinitions
    2. Name 字段中输入 LeaderWorkerSetOperator 来过滤 CRD。
    3. LeaderWorkerSetOperator CRD 旁边的 Options 菜单 kebab ,然后选择 Delete CustomResourceDefinition
    4. 在确认对话框中,点 Delete
  3. 删除 openshift-lws-operator 命名空间。

    1. 进入到 AdministrationNamespaces
    2. 在过滤框中输入 openshift-lws-operator
    3. openshift-lws-operator 条目旁的 Options 菜单 kebab , 并选择 Delete Namespace
    4. 在确认对话框中,输入 openshift-lws-operator 并点 Delete

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat