Kubernetes v1.35 [alpha](默认禁用)PodGroup 是一个运行时对象,代表一组作为单个单元一起调度的 Pod。
虽然工作负载 API 定义了调度策略模板, 但 PodGroup 是运行时对应的对象,它同时承载了策略和该组特定实例的调度状态。
PodGroup API 资源是 scheduling.k8s.io/v1alpha2
API 组的一部分,
在使用此 API 之前,你的集群必须启用该 API 组以及 GenericWorkload
特性门控。
PodGroup 是一个自包含的调度单元。它定义了应该一起调度的 Pod 组, 承载了控制放置的调度策略,并记录了该调度决策的运行时状态。
PodGroup 由定义所需调度行为的 spec 和反映当前调度状态的 status 组成。
每个 PodGroup 在 spec.schedulingPolicy 中承载一个调度策略
(basic 或 Gang)。当工作负载控制器创建 PodGroup 时,
此策略在创建时从 Workload 的 PodGroupTemplate 复制。
对于独立的 PodGroup,你直接设置策略。
spec:
schedulingPolicy:
gang:
minCount: 4
可选的 spec.podGroupTemplateRef 将 PodGroup 链接回它所创建自的 Workload 中的 PodGroupTemplate。
这对于可观测性和工具非常有用。
spec:
podGroupTemplateRef:
workload:
workloadName: training-policy
podGroupTemplateName: worker
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 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 之间的关系遵循以下模式:
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 对象发生冲突。