资源箱打包

调度插件 NodeResourcesFit 中,kube-scheduler 有两种评分策略支持资源的装箱:MostAllocatedRequestedToCapacityRatio

使用 MostAllocated 策略启用装箱

MostAllocated 策略根据资源使用情况对节点进行评分,优先选择分配率更高的节点。对于每种资源类型,您可以设置权重以修改其在节点评分中的影响。

要为 NodeResourcesFit 插件设置 MostAllocated 策略,请使用类似于以下内容的 调度器配置

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- pluginConfig:
  - args:
      scoringStrategy:
        resources:
        - name: cpu
          weight: 1
        - name: memory
          weight: 1
        - name: intel.com/foo
          weight: 3
        - name: intel.com/bar
          weight: 3
        type: MostAllocated
    name: NodeResourcesFit

要了解有关其他参数及其默认配置的更多信息,请参阅 NodeResourcesFitArgs 的 API 文档。

使用 RequestedToCapacityRatio 启用装箱

RequestedToCapacityRatio 策略允许用户指定资源以及每种资源的权重,根据请求与容量的比率对节点进行评分。这允许用户通过使用适当的参数来装箱扩展资源,从而提高大型集群中稀缺资源的使用率。它根据分配资源的配置函数优先考虑节点。NodeResourcesFit 评分函数中 RequestedToCapacityRatio 的行为可以通过 scoringStrategy 字段控制。在 scoringStrategy 字段中,您可以配置两个参数:requestedToCapacityRatioresourcesrequestedToCapacityRatio 参数中的 shape 允许用户根据 utilizationscore 值调整函数,使之成为最小请求或最大请求。resources 参数包含在评分过程中要考虑的资源的 name 以及其相应的 weight,它指定每个资源的权重。

以下是一个示例配置,它使用 requestedToCapacityRatio 字段为扩展资源 intel.com/foointel.com/bar 设置装箱行为。

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- pluginConfig:
  - args:
      scoringStrategy:
        resources:
        - name: intel.com/foo
          weight: 3
        - name: intel.com/bar
          weight: 3
        requestedToCapacityRatio:
          shape:
          - utilization: 0
            score: 0
          - utilization: 100
            score: 10
        type: RequestedToCapacityRatio
    name: NodeResourcesFit

使用 kube-scheduler 标志 --config=/path/to/config/file 引用 KubeSchedulerConfiguration 文件,将配置传递给调度器。

要了解有关其他参数及其默认配置的更多信息,请参阅 NodeResourcesFitArgs 的 API 文档。

调整评分函数

shape 用于指定 RequestedToCapacityRatio 函数的行为。

shape:
  - utilization: 0
    score: 0
  - utilization: 100
    score: 10

以上参数如果 utilization 为 0%,则将节点的 score 设置为 0,如果 utilization 为 100%,则将 score 设置为 10,从而实现装箱行为。要启用最小请求,必须反转评分值,如下所示。

shape:
  - utilization: 0
    score: 10
  - utilization: 100
    score: 0

resources 是一个可选参数,默认为

resources:
  - name: cpu
    weight: 1
  - name: memory
    weight: 1

它可以用来添加扩展资源,如下所示

resources:
  - name: intel.com/foo
    weight: 5
  - name: cpu
    weight: 3
  - name: memory
    weight: 1

weight 参数是可选的,如果未指定,则设置为 1。此外,weight 不能设置为负值。

容量分配的节点评分

本节面向那些希望了解此功能内部细节的用户。以下是如何为给定的一组值计算节点评分的示例。

请求的资源

intel.com/foo : 2
memory: 256MB
cpu: 2

资源权重

intel.com/foo : 5
memory: 1
cpu: 3

FunctionShapePoint {{0, 0}, {100, 10}}

节点 1 规范

Available:
  intel.com/foo: 4
  memory: 1 GB
  cpu: 8

Used:
  intel.com/foo: 1
  memory: 256MB
  cpu: 1

节点评分

intel.com/foo  = resourceScoringFunction((2+1),4)
               = (100 - ((4-3)*100/4)
               = (100 - 25)
               = 75                       # requested + used = 75% * available
               = rawScoringFunction(75)
               = 7                        # floor(75/10)

memory         = resourceScoringFunction((256+256),1024)
               = (100 -((1024-512)*100/1024))
               = 50                       # requested + used = 50% * available
               = rawScoringFunction(50)
               = 5                        # floor(50/10)

cpu            = resourceScoringFunction((2+1),8)
               = (100 -((8-3)*100/8))
               = 37.5                     # requested + used = 37.5% * available
               = rawScoringFunction(37.5)
               = 3                        # floor(37.5/10)

NodeScore   =  ((7 * 5) + (5 * 1) + (3 * 3)) / (5 + 1 + 3)
            =  5

节点 2 规范

Available:
  intel.com/foo: 8
  memory: 1GB
  cpu: 8
Used:
  intel.com/foo: 2
  memory: 512MB
  cpu: 6

节点评分

intel.com/foo  = resourceScoringFunction((2+2),8)
               =  (100 - ((8-4)*100/8)
               =  (100 - 50)
               =  50
               =  rawScoringFunction(50)
               = 5

memory         = resourceScoringFunction((256+512),1024)
               = (100 -((1024-768)*100/1024))
               = 75
               = rawScoringFunction(75)
               = 7

cpu            = resourceScoringFunction((2+6),8)
               = (100 -((8-8)*100/8))
               = 100
               = rawScoringFunction(100)
               = 10

NodeScore   =  ((5 * 5) + (7 * 1) + (10 * 3)) / (5 + 1 + 3)
            =  7

下一步

上次修改时间:2024 年 2 月 19 日下午 1:54 PST: 修复调度器部分中的尾随空格 (2f298d2077)