本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EKS AWS Batch 上的記憶體和 vCPU 考量
AWS Batch在 Amazon EKS 中,您可以指定可供容器使用的資源。例如,您可以為 vCPU 和記憶體資源指定requests
或limits
值。
以下是指定 vCPU 資源的限制:
-
至少必須指定一個 vCPU
requests
或limits
值。 -
一個 vCPU 單元相當於一個實體或虛擬核心。
-
vCPU 值必須以整數輸入,或以 0.25 的遞增方式輸入。
-
最小的有效 vCPU 值為 0.25。
-
如果同時指定兩者,則
requests
值必須小於或等於該limits
值。如此一來,您就可以同時設定軟體和硬體 vCPU 組態。 -
無法以毫升形式指定 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
並將記憶體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 和記憶體保留最初可能會影響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工作的數量。