运行 StatefulSet

将 StatefulSet 作为 Kueue 管理的工作负载运行。

本页面展示了如何利用 Kueue 的调度和服务资源管理能力来运行 StatefulSet。

我们演示了如何支持基于 Plain Pod Group 集成来调度 StatefulSet,其中 StatefulSet 被表示为一个独立的负载。

本指南适用于服务用户他们具有基本的 Kueue 理解。 更多信息,请参见 Kueue 概览

开始之前

  1. 默认情况下已启用 statefulset 集成。

  2. 对于 Kueue v0.15 及更早版本, 学习如何安装 Kueue 并配置自定义管理器版本, 并确保你启用了 v1/statefulset 集成,例如:

    apiVersion: config.kueue.x-k8s.io/v1beta2
    kind: Configuration
    integrations:
      frameworks:
       - "pod" # required by statefulset
       - "statefulset"
    

    同时,请参见运行 Plain Pod 了解如何启用和配置 pod 集成。

  3. 检查管理集群配额了解初始 Kueue 设置的详细信息。

运行被 Kueue 调度的 StatefulSet

在运行 StatefulSet 时,请考虑以下方面:

a. 队列选择

目标本地队列应在 StatefulSet 配置的 metadata.labels 部分指定。

metadata:
   labels:
      kueue.x-k8s.io/queue-name: user-queue

b. 配置资源需求

工作负载的资源需求可以在 spec.template.spec.containers 中配置。

spec:
  template:
     spec:
      containers:
       - resources:
           requests:
             cpu: 3

c. 扩缩

目前,StatefulSet 的扩缩操作不受支持。 这意味着你不能直接通过 Kueue 执行扩缩容操作。

示例

以下是一个 StatefulSet 的示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-statefulset
  labels:
    app: nginx
    kueue.x-k8s.io/queue-name: user-queue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: registry.k8s.io/nginx-slim:0.27
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
  serviceName: "nginx"

你可以使用以下命令创建 StatefulSet:

kubectl create -f sample-statefulset.yaml