本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 EKSAmazon Batch 上的内存和 vCPU 注意事项
Amazon Batch在 Amazon EKS 上,您可以指定可供容器使用的资源。例如,您可以为 vCPU 和内存资源指定requests
或limits
值。
以下是指定 vCPU 资源的限制:
-
必须指定至少一个 vCPU
requests
或limits
值。 -
一个 vCPU 单元等同于一个物理或虚拟内核。
-
vCPU 值必须以整数或以 0.25 为增量输入。
-
最小的有效 vCPU 值为 0.25。
-
如果同时指定的,该
requests
值必须小于或等于该limits
值。这样,您可以配置软和硬 vCPU 配置。 -
无法以 milliCPU 形式指定 vCPU 值。例如,
100m
不是有效值。 -
Amazon Batch使用该
requests
值来做出扩展决策。如果未指定requests
值,则该limits
值将复制到该requests
值中。
以下是指定内存资源的限制:
-
必须指定至少一个内存
requests
或limits
值。 -
内存值必须在mebibytes (MiBs) 中。
-
如果两者都指定,则该
requests
值必须等于该limits
值。 -
Amazon Batch使用该
requests
值来做出扩展决策。如果未指定requests
值,则将该limits
值复制到该requests
值中。
以下是指定 GPU 资源的限制:
-
如果两者都指定,则该
requests
值必须等于该limits
值。 -
Amazon Batch使用该
requests
值来做出扩展决策。如果未指定requests
值,则该limits
值将复制到该requests
值中。
示例作业定义
AmazAmazon Batch on EKS 任务定义中的以下内容配置了软 vCPU 共享。这允许 AmazAmazon Batch on 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" } } } ] } } }
以下是 AmazAmazon Batch on EKS 任务定义的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" } } } ] } } }
AmazAmazon Batch on EKS 任务定义中的以下内容将 vCPUlimits
值设置为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 EKSAmazon Batch 上的任务Amazon Batch转换为 Amazon EKS Pod 时,将limits
值Amazon Batch复制到该requests
值中。这是在未指定requests
值时。当您提交前面的示例任务定义时,pspec
od 如下所示。
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 和内存预留
Amazon Batch依赖于bootstrap.sh
文件的 vCPU 和内存预留的默认逻辑。有关bootstrap.sh
文件的更多信息,请参阅 bootstrap.sh
注意
如果没有实例在运行,vCPU 和内存预留最初可能会影响Amazon Batch扩展逻辑和决策。实例运行后,Amazon Batch调整初始分配。
节点 CPU 预留示例
CPU 预留值是使用实例可用的 vCPUs 总数以毫核为单位计算的。
vCPU 编号 | 保留百分比 |
---|---|
1 | 6 |
2 | 11 |
3-4 | 0.5% |
4 | 0.25 |
使用上述值,以下各项适用:
-
具有 2 个 vCPUs 的
c5.large
实例的 CPU 预留值为 70 m。这是通过以下方式计算的:(1*60) + (1*10) = 70 m。 -
具有 96 个 vCPUs 的
c5.24xlarge
实例的 CPU 预留值为 310 m。这是通过以下方式计算的:(1*60) + (1*10) + (2*5) + (92*2.5) = 310 m。
在此示例中,有 1930 个(计算为 2000-70 年)百万个 vCPU 单位可用于在c5.large
实例上运行作业。假设您的任务需要2
(2*1000 m) 个 vCPU 单元,则该任务不适用于单个c5.large
实例。但是,需要1.75
vCPU 单元的工作很合适。
节点内存预留示例
内存预留值是使用以下公式以兆字节为单位计算的:
-
实例容量。例如,一个 8 GB 的实例是 7,748MiB。
-
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
值。
一个c5.large
实例最多支持 29 个 pod。对于HardEvictionLimit
值为 100 MiB 的 8 GBc5.large
实例,可分配的内存为 7074MiB。这是通过以下方式计算的:(7748-(11 * 29) -255 -100) = 7074 MiB。在此示例中,8,192 个MiB作业不适合此实例,即使它是 8gibibyte (GiB) 实例。
DaemonSets
在使用时DaemonSets,请注意以下几点:
-
如果 Amazon EKS 实例Amazon Batch上没有在运行,则最初DaemonSets可能会影响Amazon Batch扩展逻辑和决策。 Amazon Batch最初分配 0.5 个 vCPU 单元,为预期分配 500 MiBDaemonSets。实例运行后,Amazon Batch调整初始分配。
-
如果 aDaemonSet 定义了 vCPU 或内存限制,则Amazon Batch在 Amazon EKS 上,任务的资源会减少。我们建议您尽可能减少分配给Amazon Batch任务的DaemonSets数量。