資源 Bin Packing
在 kube-scheduler 的 排程外掛 NodeResourcesFit
中,有兩種評分策略支援資源裝箱:MostAllocated
和 RequestedToCapacityRatio
。
使用 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
欄位中,你可以配置兩個引數:requestedToCapacityRatio
和 resources
。requestedToCapacityRatio
引數中的 shape
允許使用者根據 utilization
和 score
值將函式調整為最少請求或最多請求。resources
引數包括在評分期間要考慮的資源的 name
及其相應的 weight
,它指定了每個資源的權重。
以下是使用 requestedToCapacityRatio
欄位為擴充套件資源 intel.com/foo
和 intel.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