本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amaz AWS Batch on EKS 上,您可以指定可供容器使用的资源。例如,您可以为 vCPU 和内存资源指定 requests
或 limits
值。
以下是指定 vCPU 资源的限制:
-
至少必须指定一个 vCPU
requests
或limits
。 -
一个 vCPU 单元等同于一个物理或虚拟内核。
-
vCPU 值必须以整数或以 0.25 为增量输入。
-
最小的有效 vCPU 值为 0.25。
-
如果指定了两者的值,则
requests
值必须小于或等于limits
值。这样,您就可以配置软和硬 vCPU 配置。 -
无法以 milliCPU 形式指定 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
值中。
示例:作业定义
Amaz AWS Batch on EKS 任务定义中的以下内容配置了软 vCPU 共享。这允许 AWS Batch 在 Amazon EKS 上使用该实例类型的所有 vCPU 容量。但是,如果还有其他作业在运行,则为该作业分配的最大值为 2
v CPUs。 内存限制在 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"
}
}
}
]
}
}
}
Amaz AWS Batch on EKS 任务定义中的以下内容的request
值为,1
并为该任务分配的最大值CPUs 为 4
v。
{
"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"
}
}
}
]
}
}
}
Amaz AWS Batch on EKS 任务定义中的以下内容将 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 容器时,会将该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
文件的更多信息,请参阅 bootstrap.sh
注意
如果没有实例在运行,vCPU 和内存预留最初可能会影响 AWS Batch 扩展逻辑和决策。实例运行后, AWS Batch 调整初始分配。
示例:节点 CPU 预留
CPU 预留值是使用实例可用的 v 总数,以 millicores 为单位计算CPUs 的。
vCPU 数量 | 预留百分比 |
---|---|
1 | 6% |
2 | 1% |
3-4 | 0.5% |
4 及以上 | 0.25% |
使用上述值,以下各项为真:
-
具有 2 v 的
c5.large
实例的 CPU 预留值CPUs 为 70 m。计算方法如下:(1*60) + (1*10) = 70 m。 -
具有 96 v 的
c5.24xlarge
实例的 CPU 预留值CPUs 为 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 单元的作业合适。
示例:节点内存预留
内存预留值以 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) = 707 4 MiB。在此示例中,一个 8,192 MiB job 不适合这个实例,尽管它是 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 的工作岗位。