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

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

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

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

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

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

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

  • vCPU 值必須以整數輸入,或以 0.25 的遞增方式輸入。

  • 最小的有效 vCPU 值為 0.25。

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

  • 無法以毫升形式指定 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 limits 值設定為,1並將記憶體limits值設定為 1 GB。

{ "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 EKS AWS Batch 上的任務AWS Batch轉譯為 Amazon EKS 網繭時,請將該值AWS Batch複製到該limits值。requests這是如果沒有指定requests值。當您提交上述範例工作定義時,網繭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依賴 vCPU 和記憶體保留區的bootstrap.sh檔案預設邏輯。如需有關bootstrap.sh檔案的詳細資訊,請參閱 bootstrap.sh。調整 vCPU 和記憶體資源的大小時,請考慮以下範例。

注意

如果沒有執行任何執行個體,vCPU 和記憶體保留最初可能會影響AWS Batch擴展邏輯和決策。執行執行個體之後,AWS Batch調整初始配置。

節點 CPU 保留範例

CPU 保留值是使用執行個體可用的 vCPUs 總數來計算,以毫秒為單位。

vCPU 編號 保留百分比
1 6%
2 1%
3-4 0.5%
4 及以上 0.25%

使用前面的值,下列情況為真:

  • 具有 2 個 vCPUs 的c5.large執行個體的 CPU 保留值為 70 公尺。這是通過以下方式計算:(1* 60)+(1* 10)= 70 米。

  • 具有 96 個 vCPUs 的c5.24xlarge執行個體的 CPU 保留值為 310 公尺。這是通過以下方式計算:(1* 60)+(1* 10)+(2* 5)+(92* 2.5)= 310 米。

在此範例中,有 1930 個 (計算出 2000-70) 毫米 vCPU 單位可用於在執行個體上執行工作。c5.large假設您的工作需要 2 (2*1000 m) vCPU 單位,則該工作不適用於單一執行個體。c5.large但是,需要 1.75 vCPU 單元的工作適合。

節點記憶體保留範例

記憶體保留值以 MB 為單位,使用下列項目計算:

  • 執行個體容量 (MB)。例如,一個 8 GB 的執行個體是 7,748 MiB 個。

  • kubeReserved值。此kubeReserved值是為系統精靈保留的記憶體容量。此kubeReserved值的計算方式如下:((11* 執行個體類型支援的網繭數目上限) + 255)。如需執行個體類型所支援之網繭數目上限的相關資訊,請參閱 eni-max-pods. txt

  • HardEvictionLimit值。當可用記憶體低於該HardEvictionLimit值時,執行個體會嘗試收回 Pod。

用於計算可分配存儲器的公式如下:(實例容量 _ 英寸)-(11*(最大值))-255-(值。HardEvictionLimit )).

c5.large執行個體最多可支援 29 個網繭。對於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 或記憶體限制,則AWS Batch在 Amazon EKS 任務上擁有的資源較少。我們建議您盡可DaemonSets能減少指派給AWS Batch工作的數量。