运行 LeaderWorkerSet
本页面展示了如何通过运行 LeaderWorkerSet 来利用 Kueue 的调度和资源管理能力。
我们演示了如何支持调度 LeaderWorkerSet, 其中一组 Pod 构成由工作负载所表示的准入单元。 这允许逐组扩大和缩小 LeaderWorkerSet。
此集成基于普通的 Pod 组集成。
本指南适用于对 Kueue 有基本了解的服务用户。 有关更多信息,请参见 Kueue 概述。
开始之前
-
leaderworkerset.x-k8s.io/leaderworkerset集成默认启用。 -
对于 Kueue v0.15 及更早版本,学习如何安装 Kueue 并使用自定义管理器配置, 并确保你已启用
leaderworkerset.x-k8s.io/leaderworkerset集成,例如:apiVersion: config.kueue.x-k8s.io/v1beta2 kind: Configuration integrations: frameworks: - "leaderworkerset.x-k8s.io/leaderworkerset"Pod 集成要求
自 Kueue v0.15 起,你不需要显式启用
"pod"集成即可使用"leaderworkerset.x-k8s.io/leaderworkerset"集成。对于 Kueue v0.14 及更早版本,必须显式启用
"pod"集成。有关配置详情,请参阅运行普通 Pod。
-
查看管理集群配额了解初始 Kueue 设置的详细信息。
运行一个由 Kueue 准入的 LeaderWorkerSet
运行 LeaderWorkerSet 时,请考虑以下方面:
a. 队列选择
目标本地队列应在 LeaderWorkerSet 配置的 metadata.labels 部分指定。
metadata:
labels:
kueue.x-k8s.io/queue-name: user-queue
b. 配置资源需求
工作负载的资源需求可以在 spec.template.spec.containers 中配置。
spec:
leaderWorkerTemplate:
leaderTemplate:
spec:
containers:
- resources:
requests:
cpu: "100m"
workerTemplate:
spec:
containers:
- resources:
requests:
cpu: "100m"
c. 扩缩
你可以对 LeaderWorkerSet .spec.replicas 执行扩缩操作。
扩缩的单位是 LWS 组。通过更改 LWS 中的 replicas 数量,
你可以创建或删除整个 Pod 组。
扩容后,新建的 Pod 组会由调度门控挂起,直到相应的工作负载被准入为止。
示例
以下是一个 LeaderWorkerSet 的示例:
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
name: nginx-leaderworkerset
labels:
app: nginx
kueue.x-k8s.io/queue-name: user-queue
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: registry.k8s.io/nginx-slim:0.27
resources:
requests:
cpu: "200m"
ports:
- containerPort: 80你可以使用以下命令创建 LeaderWorkerSet:
kubectl create -f https://kueue.sigs.k8s.io/examples/serving-workloads/sample-leaderworkerset.yaml
配置拓扑感知调度
对于大规模推理或分布式训练等性能敏感型工作负载,你可能需要将 Leader 和 Worker Pod 放置在特定网络拓扑域(例如机架或数据中心区块)内,以最大程度地减少延迟。
Kueue 支持通过从 Pod 模板读取注解来为 LeaderWorkerSet 提供拓扑感知调度(Topology Aware Scheduling,TAS)。 要启用此功能:
- 为拓扑感知调度配置集群。
- 向
leaderTemplate和workerTemplate添加kueue.x-k8s.io/podset-required-topology注解。 - 向
leaderTemplate和workerTemplate添加kueue.x-k8s.io/podset-group-name注解,并使用相同的值。这可以确保 Leader 和 Workers 被调度到同一拓扑域。
示例:机架级共置
以下示例使用 podset-group-name 注解来确保 Leader 和所有 Worker
被调度到同一机架内(由 cloud.provider.com/topology-rack 标签表示)。
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
name: nginx-leaderworkerset
labels:
app: nginx
kueue.x-k8s.io/queue-name: tas-user-queue
spec:
replicas: 2
leaderWorkerTemplate:
leaderTemplate:
metadata:
annotations:
# Require leader to be in the topology domain
kueue.x-k8s.io/podset-required-topology: "cloud.provider.com/topology-rack"
# Identify the group to ensure co-location with workers
kueue.x-k8s.io/podset-group-name: "lws-group"
spec:
containers:
- name: nginx-leader
image: registry.k8s.io/nginx-slim:0.27
resources:
requests:
cpu: "100m"
ports:
- containerPort: 80
size: 3
workerTemplate:
metadata:
annotations:
# Require workers to be in the same topology domain
kueue.x-k8s.io/podset-required-topology: "cloud.provider.com/topology-rack"
# Identify the group to ensure co-location with leader
kueue.x-k8s.io/podset-group-name: "lws-group"
spec:
containers:
- name: nginx-worker
image: registry.k8s.io/nginx-slim:0.27
resources:
requests:
cpu: "200m"
nvidia.com/gpu: "1"
ports:
- containerPort: 80当 replicas 大于 1 时(如上面的示例中 replicas: 2),拓扑约束适用于每个副本。
这意味着对于每个副本,Leader 及其 Workers 将被共置在同一拓扑域(例如机架)中,
但不同的副本可能被分配到不同的拓扑域。
MultiKueue
有关在 MultiKueue 环境中运行 LeaderWorkerSet 的详细信息,请查看 MultiKueue。
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.