运行包装过的自定义工作负载

使用 AppWrapper 在 Kueue 上运行自定义工作负载。

本页面展示了如何使用 AppWrapper 使 Kueue 的调度和资源管理能力可用于没有专用 Kueue 集成的工作负载类型。 对于在其定义中使用 PodSpecTemplates 的工作负载,这提供了一种比构建自定义集成 更简便的方法来启用与自定义工作负载类型一起使用 Kueue。

本指南适用于对 Kueue 有基本了解的批处理用户。 欲了解更多信息,请参阅Kueue 概述

开始之前

  1. 确保你正在使用 Kueue v0.11.0 版本或更新版本以及 AppWrapper v1.0.2 或更新版本。

  2. 遵循运行 AppWrapper 中的步骤学习如何启用和配置 workload.codeflare.dev/appwrapper 集成。

使用 LeaderWorkerSet 作为自定义工作负载的示例

我们使用 LeaderWorkerSet 为例,来解释如何在 AppWrapper 内运行自定义类型的工作负载。

  1. 按照安装 说明进行 LeaderWorkerSet 的安装。

  2. 编辑 appwrapper-manager-role ClusterRole,添加以下片段以允许 Appwrapper 控制器操作 LeaderWorketSet。

- apiGroups:
  - leaderworkerset.x-k8s.io
  resources:
  - leaderworkersets
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
  1. 包含 LeaderWorkerSet 的 AppWrapper 如下所示。 特别注意 podSets 数组的每个元素的 replicaspath 如何对应于 template 中的 PodSpecTemplate 和副本计数。 这为 AppWrapper 控制器提供了足够的信息,使其能够“理解”被包裹的资源, 并提供 Kueue 管理该资源所需的信息。
apiVersion: workload.codeflare.dev/v1beta2
kind: AppWrapper
metadata:
  name: sample-appwrapper-lws
  labels:
    kueue.x-k8s.io/queue-name: user-queue
spec:
  components:
  - podSets:
    - path: "template.spec.leaderWorkerTemplate.leaderTemplate"
      replicas: 2
    - path: "template.spec.leaderWorkerTemplate.workerTemplate"
      replicas: 3
    template:
      apiVersion: leaderworkerset.x-k8s.io/v1
      kind: LeaderWorkerSet
      metadata:
        name: nginx-leaderworkerset
        labels:
          app: nginx
      spec:
        replicas: 2
        leaderWorkerTemplate:
          leaderTemplate:
            spec:
              containers:
              - name: nginx-leader
                image: registry.k8s.io/nginx-slim:0.27
                resources:
                  requests:
                    cpu: "100m"
                ports:
                - containerPort: 80
          size: 3
          workerTemplate:
            spec:
              containers:
              - name: nginx-worker
                image: nginx:1.14.2
                resources:
                  requests:
                    cpu: "200m"
                ports:
                - containerPort: 80