AI 工作负载


OpenShift Container Platform 4.18

在 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 提供多个 Operator 可帮助您运行 AI 工作负载:

Red Hat build of Kueue

您可以使用红帽构建的 Kue 提供结构化队列和优先顺序,以便处理工作负载完全且有效地处理。如果没有正确优先级,重要的作业可能会延迟,而较少的关键作业会占用资源。

如需更多信息,请参阅 "Introduction to Red Hat build of Kueue"。

leader Worker Set Operator

您可以使用 Leader Worker Set Operator 启用大规模 AI inference 工作负载,以便使用领导和 worker 进程之间的同步在节点间可靠地运行。如果没有适当的协调,大型培训运行可能会失败或停滞。

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

第 2 章 Red Hat build of Kueue

2.1. 红帽构建的 Kueue 简介

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

注意

在红帽构建的 Kueue 上下文中,可以将作业定义为一次性或按需完成的任务。

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

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

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

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

2.1.1. Personas

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

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

2.1.2. 工作流概述

红帽构建的 Kueue 工作流可以在高级别上描述,如下所示:

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

2.2. 发行注记

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

2.2.1. 兼容环境

在安装 Red Hat build of 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
重要

目前,红帽构建的 MicroShift (MicroShift)不支持红帽构建的 Kue。

2.2.2. Red Hat build of Kueue 版本 1.1 发行注记

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

重要

如果您之前在集群中安装了红帽构建的红帽构建版本,则必须卸载 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)

在卸载 Red Hat build of Kueue 时,自定义资源不会被正确删除

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

(OCPBUGS-62254)

2.2.3. Red Hat build of 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 配置映射不会被自动删除,并可能保留在命名空间中。在这个版本中,在删除 Kue CR 时,kueue -manager -config 配置映射、kue-webhook -server-cert secret 和 metrics-server-cert secret 会被自动删除。(OCPBUGS-57960)

2.2.4. Red Hat build of Kueue 版本 1.0 发行注记

Red Hat build of 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 资源。
配置资源配额
通过创建集群队列、资源类型和本地队列来配置资源配额,允许您控制用户提交的作业和工作负载使用的资源量。
控制作业和工作负载管理
通过标记命名空间和配置标签策略,您可以控制哪些作业和工作负载由红帽构建的 Kue 管理。
在队列间共享可移动设备的资源
配置 cohorts、公平共享和 gang 调度设置可让您在队列间共享未使用的、有可增长的资源。
2.2.4.2. 已知问题
如果所有命名空间中的作业都有 kue.x-k8s.io/queue-name 标签,则会协调它们

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

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

(OCPBUGS-58205)

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

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

(OCPBUGS-58118)

2.3. 安装红帽构建的 Kueue

您可以使用 OperatorHub 中的红帽构建 Kue Operator 来安装红帽构建的 Kueue。

2.3.1. 兼容环境

在安装 Red Hat build of 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
重要

目前,红帽构建的 MicroShift (MicroShift)不支持红帽构建的 Kue。

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

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

先决条件

  • 已安装 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. 创建 Kue 自定义资源

安装 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 table 列中,点 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
    如果要配置红帽构建的与其它工作负载类型搭配使用的 Kue,请在此处添加这些类型。对于默认配置,只支持 BatchJob 类型。
    3
    可选: 如果要为 Kueue 构建配置公平共享,请将 preemptionPolicy 值设置为 FairSharingKueue CR 中的默认设置是 经典抢占
  5. Create

验证

  • 创建 Kueue CR 后,Web 控制台 会进入 Operator 详情页面,您可以在其中看到 Kues 列表中的 CR。
  • 可选:如果安装了 OpenShift CLI (oc),您可以运行以下命令并观察输出,以确认已成功创建 了您的 Kue 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,您已创建了一个 Kue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

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

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

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

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

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

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

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

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

2.4.1. 兼容环境

在安装 Red Hat build of 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
重要

目前,红帽构建的 MicroShift (MicroShift)不支持红帽构建的 Kue。

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

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

先决条件

  • 已安装 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. 创建 Kue 自定义资源

安装 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 table 列中,点 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
    如果要配置红帽构建的与其它工作负载类型搭配使用的 Kue,请在此处添加这些类型。对于默认配置,只支持 BatchJob 类型。
    3
    可选: 如果要为 Kueue 构建配置公平共享,请将 preemptionPolicy 值设置为 FairSharingKueue CR 中的默认设置是 经典抢占
  5. Create

验证

  • 创建 Kueue CR 后,Web 控制台 会进入 Operator 详情页面,您可以在其中看到 Kues 列表中的 CR。
  • 可选:如果安装了 OpenShift CLI (oc),您可以运行以下命令并观察输出,以确认已成功创建 了您的 Kue 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,您已创建了一个 Kue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

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

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

添加此标签时,您指示红帽构建由其 webhook 准入控制器管理命名空间的 Kueue Operator。因此,该命名空间中的任何红帽构建的 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-user-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. 配置配额

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

您可以通过完成以下步骤,在 Red Hat build of 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 不会直接操作用户创建的作业。相反,Kue 管理代表作业资源要求的 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,您已创建了一个 Kue 自定义资源(CR)。
  • 已安装 OpenShift CLI(oc)。

流程

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

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

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

2.7.2. 为作业配置标签策略

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

如果 labelPolicy 设置被省略或为空(""),默认策略是红帽构建的 Kueue 管理具有 kueue.x-k8s.io/queue-name 标签的作业,并忽略没有 kue.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 标签的用户创建 作业对象 示例

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 配额。

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

2.9.1. 集群队列权重

启用公平共享后,您必须为每个集群队列设置共享值,然后才能进行公平共享。共享值表示为 ClusterQueue 对象中的 weight 值。

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

权重 值或共享值在竞争可增加资源时为集群队列定义了比较优势。通常,红帽构建具有较低共享价值的 Kueue admit 作业。具有更高共享值的作业更有可能在那些具有较低共享值的人之前被抢占。

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

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 调度可确保只有在所有所需资源都可用时,才会启动相关作业的组或上角。红帽构建的 Kueue 通过暂停作业来实现 gang 调度,直到 OpenShift Container Platform 集群可以保证容量一起启动和执行所有相关作业。这也被称为 all-or-nothing 调度。

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

2.10.1. 配置 gang 调度

作为集群管理员,您可以通过修改 Kue 自定义资源(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
您可以将 策略值设置为 启用或禁用 gang 调度。可能的值有 ByWorkload,None, 或空("")。
ByWorkload
当策略 值设置为 ByWorkload 时,每个作业都会被处理并被视为一个单元。如果作业没有在指定时间内就绪,则整个作业都会被驱除并在以后重试。
None
当策略值设置为 None 时,会禁用 gang 调度。
空("")
当策略 值为空或设置为 "" 时,红帽构建的 Kueue Operator 会决定 gang 调度的设置。目前,默认禁用 gang 调度。
2
如果策略 值设置为 ByWorkload,您必须配置作业准入设置。准入 spec 的可能值为 Parallel,Sequential, 或空("")。
parallel
准入 值设置为 Parallel 时,任何作业中的 pod 可以随时接受。这可能导致死锁,作业处于集群容量争用的位置。发生死锁时,从另一个作业成功调度 pod 可能会阻止 pod 调度当前作业。
顺序
准入 值设置为 Sequential 时,只接受当前处理作业中的 pod。在接受并准备好当前作业中的所有 pod 后,红帽构建会处理下一个作业。当集群有足够的容量用于多个作业时,顺序处理可能会减慢准入速度,但会增加作业的所有 pod 已被成功调度的可能性。
空("")
准入 值为空或设置为 "" 时,红帽构建的 Kueue Operator 会决定作业准入设置。目前,准入 值设置为 Parallel

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

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

2.11.1. 识别可用的本地队列

在向队列提交作业前,您必须找到本地队列的名称。

先决条件

  • 集群管理员已在 OpenShift Container Platform 集群上安装和配置了红帽构建的 Kue。
  • 集群管理员已为您分配了 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

2.11.2. 定义要使用红帽构建的 Kue 运行的任务

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

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

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

先决条件

  • 集群管理员已在 OpenShift Container Platform 集群上安装和配置了红帽构建的 Kue。
  • 集群管理员已为您分配了 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. 获取支持

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

通过红帽客户门户网站:

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

2.12.1. 关于红帽知识库

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

2.12.2. 为红帽支持收集数据

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

  • 红帽构建的 Kueue 自定义资源,如工作负载、集群队列、本地队列、资源类别、准入检查及其相应的集群资源定义(CRD)
  • 服务
  • 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 > 是您的 Red Hat build of 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 被分组到一个领导和多个 worker 的单元中,它们都作为单个实体一起管理。组中的每个 pod 都有唯一的 pod 身份。组中的 Pod 会并行创建,并共享相同的生命周期阶段。推出部署、滚动更新和 pod 故障重启作为组执行。

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

重要

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

默认情况下,OpenShift Container Platform 通过 Prometheus 提供 Leader Worker Set Operator 的监控。

3.1.1.1. LeaderWorkerSet 架构

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

图 3.1. 领导 worker 设置架构

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

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

3.2. leader Worker Set Operator 发行注记

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

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

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

3.2.1. Leader Worker Set Operator 1.0.0 发行注记

发布日期:2525 年 9 月 18 日

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

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

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

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. 验证是否安装了 Red Hat OpenShift 的 cert-manager Operator。
  3. 安装 Leader Worker Set Operator。

    1. 进入 OperatorsOperatorHub
    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. 部署领导 worker 集

您可以使用 Leader Worker Set Operator 来部署领导 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
    指定领导 worker 设置资源的名称。
    2
    指定要在其中运行的 leader worker 设置的命名空间。
    3
    指定领导 pod 的 pod 模板。
    4
    为发生 pod 失败时指定重启策略。允许的值是 RecreateGroupOnPodRestart,以重启整个组或 None 以不重启组。
    5
    指定要为每个组创建的 pod 数量,包括领导 pod。例如,值 3 会创建 1 个领导 pod 和 2 个 worker pod。默认值为 1
    6
    指定 worker pod 的 pod 模板。
    7
    指定创建无头服务时要使用的策略。允许的值是 UniquePerReplicaShared。默认值为 Shared
    8
    指定副本数,或 leader-worker 组。默认值为 1
    9
    指定在滚动更新过程中可调度到 replicas 值的最大副本数。该值可以指定为整数或百分比。

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

  3. 运行以下命令来应用领导 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. 集群 条目 kebab 旁边的 Options 菜单,然后选择 Delete LeaderWorkerSetOperator
    3. 在确认对话框中,点 Delete
  5. 卸载 Leader Worker Set Operator。

    1. 导航到 OperatorsInstalled Operators
    2. Leader Worker Set Operator 条目 旁边的 Options 菜单,然后点 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 菜单 ,然后选择 Delete CustomResourceDefinition
    4. 在确认对话框中,点 Delete
  3. 删除 openshift-lws-operator 命名空间。

    1. 导航至 AdministrationNamespaces
    2. 在过滤器框中输入 openshift-lws-operator
    3. openshift-lws-operator 条目旁的 Options 菜单 并选择 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