Kubernetes v1.36 [alpha](默认禁用)拓扑感知调度(Topology-Aware Scheduling,TAS)是一种调度算法, 用于为指定的 PodGroup 寻找最优的放置位置,并保证所有 Pod 都被调度到同一拓扑域中。 用户可以通过修改 TAS 插件配置来适配自身的特定需求。
调度器包含了新的以及扩展的内置插件,用于实现 TAS 的扩展点:
TopologyPlacement:实现了 PlacementGeneratePlugin 接口。
它通过根据 PodGroup 中定义的拓扑 key 的不同取值对节点进行分组,从而生成候选放置方案。NodeResourcesFit:扩展实现了 PlacementScorePlugin 接口。其逻辑类似于标准的 Pod 装箱,
基于放置中所有节点的资源分配比例对候选方案进行打分。它使用 MostAllocated 策略来最大化放置内的资源利用率,
并继承了逐 Pod 插件中的资源权重设置。PodGroupPodsCount:实现了 PlacementScorePlugin 接口。
它根据在该放置方案中可以成功调度的 PodGroup 中 Pod 的总数量来对候选方案进行评分。默认情况下,NodeResourcesFit 和 PodGroupPodsCount 插件具有相同的权重(默认均为 1),
以在装箱策略与尽可能多调度 Pod 之间保持良好的平衡。
你可以在 KubeSchedulerConfiguration 中调整这些权重,或修改装箱策略中的资源权重。
以下示例展示了如何更改这两个插件的权重,以及如何覆盖 NodeResourcesFit 的资源权重。
后者的修改将同时应用于逐 Pod 调度和放置评分算法:
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
plugins:
placementScore:
enabled:
# 1) 修改放置评分插件的默认权重
- name: NodeResourcesFit
weight: 2
- name: PodGroupPodsCount
weight: 5
pluginConfig:
- name: NodeResourcesFit
args:
# 2) 修改逐 Pod 和放置评分算法中的资源评分权重
scoringStrategy:
# 此类别仅在逐 Pod 调度中生效。放置评分始终使用 MostAllocated 策略
type: LeastAllocated
# 资源权重将同时应用于逐 Pod 和放置评分算法
resources:
- name: cpu
weight: 2
- name: memory
weight: 3