本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 EKS 计算环境
亚马逊 EKS Amazon Batch 上入门提供了创建 EKS 计算环境的简短指南。本节提供有关 EKS 计算环境的更多详细信息。
主题
默认 AMI 选择
创建 EKS 计算环境时,无需指定亚马逊系统映像 (AMI)。 Amazon Batch根据您在CreateComputeEnvironment请求中指定的Kubernetes版本和实例类型选择 Amazon EKS 优化的 AMI。通常,我们建议您使用默认 AMI 选择。有关亚马逊 EKS 优化的 AMI 的更多信息,请参阅亚马逊 EKS 用户指南中的亚马逊 EKS 优化亚马逊 Linux AMI。
运行以下命令查看为您的 EKS 计算环境选择了哪个 AMI 类型Amazon Batch。以下示例是非 GPU 实例类型。
# compute CE example: indicates Batch has chosen the AL2 x86 or ARM EKS 1.22 AMI, depending on instance types
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
\ | jq '.computeEnvironments[].computeResources.ec2Configuration'[ { "imageType": "EKS_AL2", "imageKubernetesVersion": "1.22" } ]
以下示例是 GPU 实例类型。
# GPU CE example: indicates Batch has choosen the AL2 x86 EKS Accelerated 1.22 AMI
$
aws batch describe-compute-environments --compute-environments
My-Eks-GPU-CE
\ | jq '.computeEnvironments[].computeResources.ec2Configuration'[ { "imageType": "EKS_AL2_NVIDIA", "imageKubernetesVersion": "1.22" } ]
支持的 Kubernetes 版本
Amazon Batch在亚马逊 EKS 上目前支持以下Kubernetes版本:
-
1.27
-
1.26
-
1.25
-
1.24
-
1.23
-
1.22
当您使用 API 操作或 CreateComputeEnvironment
API 操作创建或UpdateComputeEnvironment
更新计算环境时,您可能会看到类似于以下内容的错误消息。如果您在中EC2Configuration
指定了不支持的Kubernetes版本,则会出现此问题。
At least one imageKubernetesVersion in EC2Configuration is not supported.
要解决此问题,请删除计算环境,然后使用支持的Kubernetes版本重新创建计算环境。
您可以在 Amazon EKS 集群上执行次要版本升级。例如,1.yy
即使不支持次1.xx
要版本,也可以将集群从升级到。
但是,在主要版本更新INVALID
之后,计算环境状态可能会更改为。例如,如果您执行主要版本从升级1.xx
到2.yy
。如果不支持主要版本Amazon Batch,则会看到一条类似于以下内容的错误消息。
reason=CLIENT_ERROR - ...
EKS
Cluster version [2.yy
] is unsupported
更新计算环境Kubernetes版本
使用Amazon Batch,您可以更新计算环境的Kubernetes版本以支持 EKS 集群升级。计算环境的Kubernetes版本是Amazon Batch启动运行任务的Kubernetes节点的 EKS AMI 版本。在更新 EKS 集群的控制平面Kubernetes版本之前或之后,您可以在其的 EKS 节点上执行版本升级。我们建议您在升级控制平面后更新节点。有关更多信息,请参阅亚马逊 EKS 用户指南中的更新 Amazon EKS 集群Kubernetes版本。
要升级计算环境的Kubernetes版本,请使用 UpdateComputeEnvironmentAPI 操作。
$
aws batch update-compute-environment \ --compute-environment
<compute-environment-name>
\ --compute-resources \ 'ec2Configuration=[{imageType=EKS_AL2,imageKubernetesVersion=1.23
}]'
Kubernetes节点的共同责任
维护计算环境是一项共同的责任。
-
不要更改或删除Amazon Batch节点、标签、污点、命名空间、启动模板或自动扩展组。不要向Amazon Batch托管节点添加污点。如果您进行任何更改,则无法支持您的计算环境,并且会出现包括空闲实例在内的故障。
-
不要将你的 pod 定位到Amazon Batch托管节点。如果您将 pod 定位到托管节点,则会出现扩展中断和任务队列卡住的情况。运行不在自管节点或托管节点组Amazon Batch上使用的工作负载。有关更多信息,请参阅《Amazon EKS 用户指南》中的托管节点组。
-
您可以将目标设置DaemonSet为在Amazon Batch托管节点上运行。有关更多信息,请参阅DaemonSet在Amazon Batch托管节点上运行:
Amazon Batch不会自动更新计算环境 AMI。你有责任更新它们。运行以下命令将您的 AMI 更新到最新的 AMI 版本。
$
aws batch update-compute-environment \ --compute-environment
<compute-environment-name>
\ --compute-resources 'updateToLatestImageVersion=true'
Amazon Batch不会自动升级Kubernetes版本。运行以下命令将您的计算机环境Kubernetes版本更新到 1.23
。
$
aws batch update-compute-environment \ --compute-environment
<compute-environment-name>
\ --compute-resources \ 'ec2Configuration=[{imageType=EKS_AL2,imageKubernetesVersion=1.23
}]'
更新到最新的 AMI 或Kubernetes版本时,您可以指定是否在任务更新时终止作业 (terminateJobsOnUpdate
),以及在正在运行的任务未完成时等待多长时间才能替换实例 (jobExecutionTimeoutMinutes
.) 有关更多信息更新计算环境,请参阅在 UpdateComputeEnvironmentAPI 操作中设置的基础设施更新策略 (UpdatePolicy)。
DaemonSet在Amazon Batch托管节点上运行
Amazon Batch在Amazon Batch托管Kubernetes节点上设置污点。您可以使用以下方法DaemonSet将目标设置为在Amazon Batch托管节点上运行tolerations
。
tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists"
另一种方法是使用以下方法tolerations
。
tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoSchedule" - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoExecute"
使用启动模板进行自定义
Amazon Batch在亚马逊 EKS 上支持启动模板。您的启动模板可以做什么存在限制。
重要
Amazon Batch运行/etc/eks/bootstrap.sh
。不要/etc/eks/bootstrap.sh
在你的启动模板或cloud-inituser-data脚本中运行。除了参数之外,您还可以向 bootstrap.sh--kubelet-extra-args
参数。为此,请在/etc/aws-batch/batch.config
文件中设置AWS_BATCH_KUBELET_EXTRA_ARGS
变量。有关详细信息,请参阅以下示例。
注意
如果启动模板在调用后CreateComputeEnvironment发生了变化,则UpdateComputeEnvironment必须调用该启动模板来评估要替换的启动模板的版本。
添加kubelet
额外的参数
Amazon Batch支持向kubelet
命令添加额外的参数。有关支持的参数列表 kubelet
已添加到--node-labels mylabel=helloworld
kubelet
命令行中。
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash mkdir -p /etc/aws-batch echo AWS_BATCH_KUBELET_EXTRA_ARGS=\"
--node-labels mylabel=helloworld
\" >> /etc/aws-batch/batch.config --==MYBOUNDARY==--
配置容器运行时间
您可以使用Amazon BatchCONTAINER_RUNTIME
环境变量在托管节点上配置容器运行时间。以下示例在运行时将容器bootstrap.sh
运行containerd
时设置为。有关更多信息 containerd
注意
CONTAINER_RUNTIME
环境变量等同于的--container-runtime
选项bootstrap.sh
。有关更多信息 Options
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash mkdir -p /etc/aws-batch echo CONTAINER_RUNTIME=containerd >> /etc/aws-batch/batch.config --==MYBOUNDARY==--
安装亚马逊 EFS 卷
您可以使用启动模板将卷装载到节点。在以下示例中,使用cloud-config
packages
和runcmd
设置。有关更多信息,请参阅cloud-init文档中的云配置示例
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-abcdef123 - efs_directory=/mnt/efs - mkdir -p ${efs_directory} - echo "${file_system_id_01}:/ ${efs_directory} efs _netdev,noresvport,tls,iam 0 0" >> /etc/fstab - mount -t efs -o tls ${file_system_id_01}:/ ${efs_directory} --==MYBOUNDARY==--
要在作业中使用此卷,必须将其添加到 eksProperti es 参数中。RegisterJobDefinition以下示例是作业定义的很大一部分。
{ "jobDefinitionName": "MyJobOnEks_EFS", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["ls", "-la", "/efs"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } }, "volumeMounts": [ { "name": "
efs-volume
", "mountPath": "/efs
" } ] } ], "volumes": [ { "name": "efs-volume
", "hostPath": { "path": "/mnt/efs
" } } ] } } }
在节点中,Amazon EFS 卷安装在/mnt/efs
目录中。在 EKS 作业的容器中,该卷安装在/efs
目录中。
IPv6 支持
Amazon Batch支持具有 IPv6 地址的亚马逊 EKS 集群。无需进行自定义即可获得Amazon Batch支持。但是,在开始之前,我们建议您查看 Amazon EKS 用户指南中为 pod 和服务分配 IPv6 地址中概述的注意事项和条件。