扩展资源的资源装箱

    MostAllocated 策略基于资源的利用率来为节点计分,优选分配比率较高的节点。 针对每种资源类型,你可以设置一个权重值以改变其对节点得分的影响。

    要为插件 NodeResourcesFit 设置 MostAllocated 策略, 可以使用一个类似于下面这样的调度器配置

    要进一步了解其它参数及其默认配置,请参阅 的 API 文档。

    RequestedToCapacityRatio 策略允许用户基于请求值与容量的比率,针对参与节点计分的每类资源设置权重。 这一策略是的用户可以使用合适的参数来对扩展资源执行装箱操作,进而提升大规模集群中稀有资源的利用率。 此策略根据所分配资源的一个配置函数来评价节点。 NodeResourcesFit 计分函数中的 RequestedToCapacityRatio 可以通过字段 scoringStrategy 来控制。 在 scoringStrategy 字段中,你可以配置两个参数:requestedToCapacityRatioParamresourcesrequestedToCapacityRatioParam 参数中的 shape 设置使得用户能够调整函数的算法,基于 utilizationscore 值计算最少请求或最多请求。 resources 参数中包含计分过程中需要考虑的资源的 name,以及用来设置每种资源权重的 weight

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

    1. apiVersion: kubescheduler.config.k8s.io/v1beta3
    2. kind: KubeSchedulerConfiguration
    3. profiles:
    4. - pluginConfig:
    5. - args:
    6. scoringStrategy:
    7. resources:
    8. - name: intel.com/foo
    9. weight: 3
    10. - name: intel.com/bar
    11. weight: 3
    12. requestedToCapacityRatioParam:
    13. shape:
    14. - utilization: 0
    15. score: 0
    16. score: 10
    17. type: RequestedToCapacityRatio
    18. name: NodeResourcesFit

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

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

    1. shape:
    2. - utilization: 0
    3. score: 0
    4. - utilization: 100

    上面的参数在 utilization 为 0% 时给节点评分为 0,在 utilization 为 100% 时给节点评分为 10,因此启用了装箱行为。 要启用最少请求(least requested)模式,必须按如下方式反转得分值。

    1. shape:
    2. - utilization: 0
    3. score: 10
    4. - utilization: 100
    5. score: 0

    resources 是一个可选参数,默认情况下设置为:

    它可以像下面这样用来添加扩展资源:

    1. resources:
    2. - name: intel.com/foo
    3. weight: 5
    4. - name: cpu
    5. weight: 3
    6. - name: memory
    7. weight: 1

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

    节点容量分配的评分

    本节适用于希望了解此功能的内部细节的人员。 以下是如何针对给定的一组值来计算节点得分的示例。

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

    资源权重:

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

    节点 1 配置:

    1. 可用:
    2. memory : 1 GB
    3. cpu: 8
    4. 已用:
    5. intel.com/foo: 1
    6. memory: 256MB
    7. cpu: 1

    节点得分:

    1. intel.com/foo = resourceScoringFunction((2+1),4)
    2. = (100 - 25)
    3. = 75 # requested + used = 75% * available
    4. = rawScoringFunction(75)
    5. = 7 # floor(75/10)
    6. memory = resourceScoringFunction((256+256),1024)
    7. = (100 -((1024-512)*100/1024))
    8. = 50 # requested + used = 50% * available
    9. = rawScoringFunction(50)
    10. = 5 # floor(50/10)
    11. cpu = resourceScoringFunction((2+1),8)
    12. = (100 -((8-3)*100/8))
    13. = 37.5 # requested + used = 37.5% * available
    14. = rawScoringFunction(37.5)
    15. = 3 # floor(37.5/10)
    16. NodeScore = (7 * 5) + (5 * 1) + (3 * 3) / (5 + 1 + 3)
    17. = 5

    节点 2 配置:

    1. 可用:
    2. intel.com/foo: 8
    3. memory: 1GB
    4. cpu: 8
    5. 已用:
    6. intel.com/foo: 2
    7. memory: 512MB

    节点得分: