本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon AWS Batch 上 的記憶體和 vCPU 考量 EKS
在 Amazon AWS Batch 上EKS,您可以指定容器可用的資源。例如,您可以指定 vCPU 和記憶體資源的 requests
或 limits
值。
以下是指定 vCPU 資源的限制:
-
必須指定至少一個 vCPU
requests
或limits
值。 -
一個 vCPU 單元相當於一個實體或虛擬核心。
-
vCPU 值必須以整數或 0.25 增量輸入。
-
最小的有效 vCPU 值為 0.25。
-
如果指定兩者,則
requests
值必須小於或等於limits
值。如此一來,您就可以同時設定軟式和硬式 vCPU 組態。 -
無法以公釐CPU形式指定 vCPU 值。例如,
100m
不是有效的值。 -
AWS Batch 會使用
requests
值進行擴展決策。如果未指定requests
值,則會將該limits
值複製到該requests
值。
以下是指定記憶體資源的限制:
-
必須指定至少一個記憶體
requests
或limits
值。 -
記憶體值必須位於 mebibytes (MiBs).
-
如果指定兩者,則
requests
值必須等於limits
值。 -
AWS Batch 會使用
requests
值進行擴展決策。如果未指定requests
值,則會將該limits
值複製到該requests
值。
以下是指定GPU資源的限制:
-
如果指定兩者,則
requests
值必須等於limits
值。 -
AWS Batch 會使用
requests
值進行擴展決策。如果未指定requests
值,則會將該limits
值複製到該requests
值。
範例:任務定義
Amazon EKS任務定義 AWS Batch 上的下列項目會設定軟 vCPU 共用。這可讓 AWS Batch Amazon EKS使用執行個體類型的所有 vCPU 容量。不過,如果有其他任務正在執行,則任務最多會配置 2
vCPUs。記憶體限制為 2 GB。
{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "2", "memory": "2048Mi" } } } ] } } }
下列在 Amazon EKS任務定義 AWS Batch 上的request
值為 1
,並配置最多 4
vCPUs 給任務。
{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "requests": { "cpu": "1" }, "limits": { "cpu": "4", "memory": "2048Mi" } } } ] } } }
下列在 Amazon EKS任務定義 AWS Batch 上設定 vCPU limits
值1
和 1 GB 的記憶體limits
值。
{ "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["sleep", "60"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ] } } }
當 將 Amazon AWS Batch 任務 AWS Batch 轉換為 Amazon EKS Pod EKS時, 會將limits
值 AWS Batch 複製到 requests
值。如果未指定requests
值,則表示此值。當您提交上述範例任務定義時,Pod spec
如下所示。
apiVersion: v1 kind: Pod ... spec: ... containers: - command: - sleep - 60 image: public.ecr.aws/amazonlinux/amazonlinux:2 resources: limits: cpu: 1 memory: 1024Mi requests: cpu: 1 memory: 1024Mi ...
節點CPU和記憶體保留
AWS Batch 依賴bootstrap.sh
檔案的預設邏輯進行 vCPU 和記憶體保留。如需有關 bootstrap.sh
檔案的詳細資訊,請參閱 https://bootstrap.sh
注意
如果沒有執行個體正在執行,vCPU 和記憶體保留最初會影響 AWS Batch 擴展邏輯和決策。執行個體執行後, 會 AWS Batch 調整初始配置。
範例:節點CPU保留
CPU 保留值使用執行個體 vCPUs 可用的總數,以毫核心計算。
vCPU 號碼 | 預留百分比 |
---|---|
1 | 6% |
2 | 1% |
3-4 | 0.5% |
4 及更高版本 | 0.25% |
使用上述值,下列為真:
-
2
c5.large
執行個體的CPU保留值 vCPUs 為 70 m。計算方式如下:(1*60) + (1*10) = 70 m 。 -
96
c5.24xlarge
執行個體的CPU保留值 vCPUs 為 310 m。計算方式如下:(1*60) + (1*10) + (2*5) + (92*2.5) = 310 m。
在此範例中,有 1930 (計算值為 2000-70) 毫核心 vCPU 單位可用於在c5.large
執行個體上執行任務。假設您的任務需要 2
(2*1000 公尺) vCPU 單位,則該任務不適用於單一c5.large
執行個體。不過,需要 1.75
vCPU 單位符合的任務。
範例:節點記憶體保留
記憶體保留值的計算單位為 MB,使用下列各項:
-
執行個體容量,以 MB 為單位。例如,8 GB 執行個體為 7,748 MiB.
-
kubeReserved
值。此kubeReserved
值是為系統常駐保留的記憶體量。kubeReserved
值的計算方式如下:((11 * 執行個體類型支援的 Pod 數量上限) + 255)。如需執行個體類型支援的 Pod 數量上限的相關資訊,請參閱 eni-max-pods.txt -
HardEvictionLimit
值。當可用的記憶體低於HardEvictionLimit
值時,執行個體會嘗試逸出 Pod。
計算可配置記憶體的公式如下:(instance_capacity_in_MiB
) - (11 * (maximum_number_of_pods
) - 255 - (
)).HardEvictionLimit
value.
c5.large
執行個體最多支援 29 個 Pod。對於HardEvictionLimit
值為 100 MiB 的 8 GB c5.large
執行個體,可配置記憶體為 7074 MiB。 計算方式如下:(7748 - (11 * 29) -255 -100) = 7074 MiB 。在此範例中,8,192 MiB 任務不適合此執行個體,即使這是 8 gibibyte
(GiB) 執行個體。
DaemonSets
當您使用 時 DaemonSets,請考慮下列事項:
-
如果 Amazon EKS執行個體 AWS Batch 上沒有正在執行,DaemonSets 一開始會影響 AWS Batch 擴展邏輯和決策。 AWS Batch 一開始為預期配置 0.5 vCPU 單位和 500 MiB DaemonSets。 執行個體執行後, 會 AWS Batch 調整初始配置。
-
如果 DaemonSet 定義 vCPU 或記憶體限制,在 Amazon EKS任務 AWS Batch 上資源較少。我們建議您保留 DaemonSets 指派給盡可能低 AWS Batch 的任務。