資源 Bin Packing

在 kube-scheduler 的 排程外掛 NodeResourcesFit 中,有兩種評分策略支援資源裝箱: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% 時獲得 0 分,在 utilization 為 100% 時獲得 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

函式形狀點 {{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)