PodGroup API

特性状态: Kubernetes v1.35 [alpha](默认禁用)

PodGroup 是一个运行时对象,代表一组作为单个单元一起调度的 Pod。

虽然工作负载 API 定义了调度策略模板, 但 PodGroup 是运行时对应的对象,它同时承载了策略和该组特定实例的调度状态。

什么是 PodGroup?

PodGroup API 资源是 scheduling.k8s.io/v1alpha2 API 组的一部分, 在使用此 API 之前,你的集群必须启用该 API 组以及 GenericWorkload 特性门控

PodGroup 是一个自包含的调度单元。它定义了应该一起调度的 Pod 组, 承载了控制放置的调度策略,并记录了该调度决策的运行时状态。

API 结构

PodGroup 由定义所需调度行为的 spec 和反映当前调度状态的 status 组成。

调度策略

每个 PodGroup 在 spec.schedulingPolicy 中承载一个调度策略basicGang)。当工作负载控制器创建 PodGroup 时, 此策略在创建时从 Workload 的 PodGroupTemplate 复制。 对于独立的 PodGroup,你直接设置策略。

spec:
  schedulingPolicy:
    gang:
      minCount: 4

模板引用

可选的 spec.podGroupTemplateRef 将 PodGroup 链接回它所创建自的 Workload 中的 PodGroupTemplate。 这对于可观测性和工具非常有用。

spec:
  podGroupTemplateRef:
    workload:
      workloadName: training-policy
      podGroupTemplateName: worker

为 PodGroup 请求 DRA 设备

特性状态: Kubernetes v1.36 [alpha](默认禁用)

通过动态资源分配(DRA) 可获得的设备 可以由 PodGroup 通过其 spec.resourceClaims 字段请求:

apiVersion: scheduling.k8s.io/v1alpha2
kind: PodGroup
metadata:
  name: training-group
  namespace: some-ns
spec:
  ...
  resourceClaims:
  - name: pg-claim
    resourceClaimName: my-pg-claim
  - name: pg-claim-template
    resourceClaimTemplateName: my-pg-template

与 PodGroup 关联的 ResourceClaim 可以由属于该组的所有 Pod 共享。 只需在 ResourceClaim 的 status.reservedFor 中引用 PodGroup,而不是每个单独的 Pod, 同一 PodGroup 中的任意数量的 Pod 都可以共享一个 ResourceClaim。 还可以为每个 PodGroup 从 ResourceClaimTemplate 生成 ResourceClaim,允许分配给每个生成的 ResourceClaim 的设备由每个 PodGroup 中的 Pod 共享。

有关更多详细信息和更完整的示例,请参阅 DRA 文档

状态

调度器更新 status.conditions 以报告组是否已成功调度。 主要条件是 PodGroupScheduled,当所有必需的 Pod 已放置时为 True, 当调度失败时为 False

说明:

PodGroupScheduled 条件仅反映初始调度决策。 如果 Pod 后续失败或被驱逐,调度器不会更新它。 有关详细信息,请参阅限制

有关条件和原因的完整列表,请参阅 PodGroup 生命周期页面。

创建 PodGroup

PodGroup API 资源是 scheduling.k8s.io/v1alpha2 API 组的一部分。 (在使用此 API 之前,你的集群必须启用该 API 组以及 GenericWorkload 特性门控。)

以下清单创建一个具有 gang 调度策略的 PodGroup,该策略要求至少 4 个 Pod 同时可调度:

apiVersion: scheduling.k8s.io/v1alpha2
kind: PodGroup
metadata:
  name: training-worker-0
  namespace: default
spec:
  schedulingPolicy:
    gang:
      minCount: 4

你可以在集群中检查 PodGroup:

kubectl get podgroups

要查看包括调度条件在内的完整状态:

kubectl describe podgroup training-worker-0

如何组合使用

控制器、Workload、PodGroup 和 Pod 之间的关系遵循以下模式:

  1. 工作负载控制器创建一个 Workload,该 Workload 定义带有调度策略的 PodGroupTemplates。
  2. 对于每个运行时实例,控制器从 Workload 的其中一个 PodGroupTemplate 创建一个 PodGroup。
  3. 控制器创建通过 spec.schedulingGroup.podGroupName 字段引用 PodGroup 的 Pod。

Job 控制器是目前唯一遵循此模式的内置工作负载控制器。 自定义控制器可以为自己的工作负载类型实现相同的流程。

apiVersion: scheduling.k8s.io/v1alpha2
kind: Workload
metadata:
  name: training-policy
spec:
  podGroupTemplates:
  - name: worker
    schedulingPolicy:
      gang:
        minCount: 4
---
apiVersion: scheduling.k8s.io/v1alpha2
kind: PodGroup
metadata:
  name: training-worker-0
spec:
  podGroupTemplateRef:
    workload:
      workloadName: training-policy
      podGroupTemplateName: worker
  schedulingPolicy:
    gang:
      minCount: 4
---
apiVersion: v1
kind: Pod
metadata:
  name: worker-0
spec:
  schedulingGroup:
    podGroupName: training-worker-0
  containers:
  - name: ml-worker
    image: training:v1

Workload 充当长期存在的策略定义,而 PodGroup 处理瞬态的、每个实例的运行时状态。 这种分离意味着单个 PodGroup 的状态更新不会与共享的 Workload 对象发生冲突。

接下来


最后修改 April 23, 2026 at 11:18 AM PST: [zh-cn]sync podgroup-api/_index (f5856b9931)