Amazon AWS Batch 上 的記憶體和 vCPU 考量 EKS - AWS Batch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon AWS Batch 上 的記憶體和 vCPU 考量 EKS

在 Amazon AWS Batch 上EKS,您可以指定容器可用的資源。例如,您可以指定 vCPU 和記憶體資源的 requestslimits值。

以下是指定 vCPU 資源的限制:

  • 必須指定至少一個 vCPU requestslimits值。

  • 一個 vCPU 單元相當於一個實體或虛擬核心。

  • vCPU 值必須以整數或 0.25 增量輸入。

  • 最小的有效 vCPU 值為 0.25。

  • 如果指定兩者,則requests值必須小於或等於 limits值。如此一來,您就可以同時設定軟式和硬式 vCPU 組態。

  • 無法以公釐CPU形式指定 vCPU 值。例如, 100m不是有效的值。

  • AWS Batch 會使用 requests值進行擴展決策。如果未指定requests值,則會將該limits值複製到該requests值。

以下是指定記憶體資源的限制:

  • 必須指定至少一個記憶體requestslimits值。

  • 記憶體值必須位於 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 limits1和 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 和記憶體資源的大小時,請考慮以下範例。

注意

如果沒有執行個體正在執行,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 的任務。