这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

CompositePodGroup API

特性状态: Alpha since Kubernetes v1.37; (默认禁用)
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the CompositePodGroup feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

CompositePodGroup 是一个运行时对象,表示多级工作负载层级结构中的非叶节点。 虽然 Workload API 定义了静态调度策略模板,但 CompositePodGroup 和 PodGroup 对象是运行时对应的对象, 它们为特定工作负载实例承载策略和层级引用。

什么是 CompositePodGroup?

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

CompositePodGroup 表示一组子组(子组可以是 CompositePodGroup 或 PodGroup 对象)。 它承载调度策略、干扰模式、优先级设置,以及跨其子组集体生效的可选拓扑约束。

API 结构

CompositePodGroup 由定义其子组所需调度行为的 spec 和一个 status 子资源组成。

调度策略

每个 CompositePodGroup 在 spec.schedulingPolicy 中承载一个调度策略(basic 或 gang)。 当工作负载控制器创建 CompositePodGroup 时, 此策略在创建时从 Workload 的 CompositePodGroupTemplate 复制。

对于 CompositePodGroup 上的 gang 策略, minGroupCount 字段指定必须可同时调度的最小组数量:

spec:
  schedulingPolicy:
    gang:
      minGroupCount: 2

父组引用

非根级 CompositePodGroup 资源使用 spec.parentCompositePodGroupName 指定其父组。 根级 CompositePodGroup 对象不设置此字段。

spec:
  parentCompositePodGroupName: root-group-0

Workload 引用

spec.workloadRef 字段将 CompositePodGroup 关联回其派生自的 Workload 对象中的 CompositePodGroupTemplate。

spec:
  workloadRef:
    workloadName: hierarchical-workload
    templateName: replica-group

状态

CompositePodGroup API 模式中包含一个 status 子资源。 在 Alpha 版本中,API 类型里存在 status 字段, 但 kube-scheduler 不会为 CompositePodGroup 对象更新或填充状态状况。 复合组的状态跟踪将在未来的发行版本中实现。

创建 CompositePodGroup

工作负载控制器在运行时自动从 Workload 模板创建 CompositePodGroup 对象。

以下清单创建一个带有 gang 调度策略的根级 CompositePodGroup, 该策略要求至少 2 个子组可同时调度:

apiVersion: scheduling.k8s.io/v1alpha3
kind: CompositePodGroup
metadata:
  name: root-group-0
  namespace: default
spec:
  workloadRef:
    workloadName: hierarchical-workload
    templateName: root
  schedulingPolicy:
    gang:
      minGroupCount: 2

你可以在集群中检查 CompositePodGroup 资源:

kubectl get compositepodgroups

要查看某个特定复合组的详细信息:

kubectl describe compositepodgroup root-group-0

如何组合使用

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

  1. 工作负载控制器创建一个 Workload,其中定义了一棵由 CompositePodGroupTemplate 和叶子 PodGroupTemplate 组成的树。
  2. 对于每个运行时实例,控制器以自顶向下的方式创建一个根级 CompositePodGroup、 若干后代 CompositePodGroup 对象以及叶子 PodGroup 对象。
  3. 控制器创建通过 spec.schedulingGroup.podGroupName 引用其叶子 PodGroup 的 Pod。

以下示例展示了一个双层工作负载的完整清单层级结构:

apiVersion: scheduling.k8s.io/v1alpha3
kind: Workload
metadata:
  name: hierarchical-workload
  namespace: default
spec:
  compositePodGroupTemplates:
  - name: root
    schedulingPolicy:
      gang:
        minGroupCount: 2
    podGroupTemplates:
    - name: workers-a
      schedulingPolicy:
        gang:
          minCount: 4
    - name: workers-b
      schedulingPolicy:
        gang:
          minCount: 4
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: CompositePodGroup
metadata:
  name: root-group-0
  namespace: default
spec:
  workloadRef:
    workloadName: hierarchical-workload
    templateName: root
  schedulingPolicy:
    gang:
      minGroupCount: 2
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: PodGroup
metadata:
  name: workers-a-0
  namespace: default
spec:
  parentCompositePodGroupName: root-group-0
  workloadRef:
    workloadName: hierarchical-workload
    templateName: workers-a
  schedulingPolicy:
    gang:
      minCount: 4
---
apiVersion: scheduling.k8s.io/v1alpha3
kind: PodGroup
metadata:
  name: workers-b-0
  namespace: default
spec:
  parentCompositePodGroupName: root-group-0
  workloadRef:
    workloadName: hierarchical-workload
    templateName: workers-b
  schedulingPolicy:
    gang:
      minCount: 4
---
apiVersion: v1
kind: Pod
metadata:
  name: worker-a-0
  namespace: default
spec:
  schedulingGroup:
    podGroupName: workers-a-0
  containers:
  - name: worker
    image: registry.k8s.io/pause:3.9

Workload 充当长期存在的策略模板,而 CompositePodGroup 和 PodGroup 资源负责处理每个实例的运行时调度状态。

接下来

1 - CompositePodGroup 生命周期

特性状态: Alpha since Kubernetes v1.37; (默认禁用)
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the CompositePodGroup feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

CompositePodGroup 表示多级 PodGroup 层级结构中的一个非叶节点。 与 PodGroup 资源不同,CompositePodGroup 资源不直接包含 Pod。 相反,它们维护由后代 CompositePodGroup 和 PodGroup 对象构成的层级结构, 并承载适用于其子组的调度策略。

属主关系与垃圾收集

一个 CompositePodGroup 对象及其后代 CompositePodGroup 和 PodGroup 资源, 归属于创建它的工作负载控制器(通过 Kubernetes 的 ownerReferences 建立属主关系)。 当拥有它的工作负载对象被删除时,级联垃圾收集会自动删除关联的组层级结构。

CompositePodGroup 名称在名字空间内必须唯一,且必须是合法的 DNS 子域名。

创建顺序

为确保正确的层级解析和调度,工作负载控制器按自顶向下的顺序创建资源:

  1. Workload:定义静态模板(CompositePodGroupTemplates 和 PodGroupTemplates)。
  2. 根级 CompositePodGroup:创建时用 spec.workloadRef 指向 Workload 中的根模板。
  3. 后代 CompositePodGroup 和 PodGroup:按自顶向下的顺序创建。每个子组通过 spec.parentCompositePodGroupName 指定其父组,并通过 spec.workloadRef 指定其模板。
  4. Pods:创建时用 spec.schedulingGroup.podGroupName 指向其所属的叶子 PodGroup。

如果某个组引用的父 CompositePodGroup 不存在,或者某个 Pod 引用的 PodGroup 尚未创建, 则调度器会暂缓调度,直到层级结构中的所有父资源都存在为止。

限制与验证规则

  • 一致的调度器名称:整个 CompositePodGroup 层级结构中的所有 Pod 必须使用相同的 spec.schedulerName。如果检测到不一致,调度器会将该层级结构视为不可调度而拒绝。
  • 一致的优先级:整个 CompositePodGroup 层级结构中的所有 Pod 必须指定相同的 spec.priority 值,且该值必须等于根组指定的优先级。如果检测到不一致, 调度器会将该层级结构视为不可调度而拒绝。
  • 一致的抢占策略:整个 CompositePodGroup 层级结构中的所有 Pod 必须使用相同的 spec.preemptionPolicy。此外,当启用 PodGroupPreemptionPolicy 特性门控时,根组的抢占策略必须与 Pod 指定的策略一致。如果检测到不一致, 调度器会将该层级结构视为不可调度而拒绝。
  • 最大嵌套深度:组模板层级结构最多支持 4 级嵌套。
  • 列表项数量上限:Workload 任意层级下的子 CompositePodGroupTemplates 和 PodGroupTemplates 数量上限为 8。
  • 不可变的 gang 组数量:CompositePodGroup 上的 spec.schedulingPolicy.gang.minGroupCount 字段在创建后不可变。
  • 不可变的层级引用:组上的 spec.parentCompositePodGroupName 和 Pod 上的 spec.schedulingGroup 一经设置便不可变。

接下来