Amazon EKS 计算环境 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon EKS 计算环境

亚马逊 EK Amazon Batch S 入门提供了创建 EKS 计算环境的简短指南。本节提供有关 Amazon EKS 计算环境的更多详细信息。

默认 AMI 选择

创建 Amazon EKS 计算环境时,无需指定亚马逊系统映像 (AMI)。 Amazon Batch 根据您的CreateComputeEnvironment请求中指定的Kubernetes版本和实例类型选择 Amazon EKS 优化的 AMI。一般情况下,我们建议您使用默认 AMI 选择。有关 Amazon EKS 优化的 AMI 的更多信息,请参阅 《Amazon EKS 用户指南》中的 Amazon EKS 优化 Amazon Linux AMI

运行以下命令,查看为您的 Amazon EKS 计算环境选择了 Amazon Batch 哪种 AMI 类型。以下示例是非 GPU 实例类型。

# compute CE example: indicates Batch has chosen the AL2 x86 or ARM EKS 1.29 AMI, depending on instance types $ aws batch describe-compute-environments --compute-environments My-Eks-CE1 \ | jq '.computeEnvironments[].computeResources.ec2Configuration' [ { "imageType": "EKS_AL2", "imageKubernetesVersion": "1.29" } ]

以下示例是 GPU 实例类型。

# GPU CE example: indicates Batch has choosen the AL2 x86 EKS Accelerated 1.29 AMI $ aws batch describe-compute-environments --compute-environments My-Eks-GPU-CE \ | jq '.computeEnvironments[].computeResources.ec2Configuration' [ { "imageType": "EKS_AL2_NVIDIA", "imageKubernetesVersion": "1.29" } ]

支持的Kubernetes版本

Amazon Batch 在 Amazon 上,EKS 目前支持以下Kubernetes版本:

  • 1.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

当使用 CreateComputeEnvironment API 操作或 UpdateComputeEnvironmentAPI 操作以创建或更新计算环境时,可能会看到类似于以下内容的错误消息。如果在EC2Configuration中指定不受支持的Kubernetes版本,则会出现此问题。

At least one imageKubernetesVersion in EC2Configuration is not supported.

要解决此问题,请删除计算环境,然后使用支持的Kubernetes版本重新创建。

可以在 Amazon EKS 集群上执行次要版本升级。例如,即使不支持次要版本,也可以将集群从1.xx升级到1.yy

但是,主要版本更新后,计算环境的状态可能会更改为INVALID。例如,如果将主要版本从1.xx升级到2.yy。如果不支持主要版本 Amazon Batch,则会看到类似于以下内容的错误消息。

reason=CLIENT_ERROR - ... EKS Cluster version [2.yy] is unsupported

更新计算环境的Kubernetes版本

使用 Amazon Batch,您可以更新计算环境的Kubernetes版本以支持 Amazon EKS 集群升级。计算环境的Kubernetes版本是 Amazon Batch 启动运行任务的Kubernetes节点的 Amazon EKS AMI 版本。在更新 Amazon EKS 集群的控制平面Kubernetes版本之前或之后,您可以在他们的 Amazon EKS 节点上执行版本升级。我们建议在升级控制面板后更新节点。有关更多信息,请参阅《Amazon 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 节点、标签、污点、命名空间、启动模板或 auto Scaling 组。不要向 Amazon Batch 托管节点添加污点。如果要进行上述任何更改,则无法支持计算环境,并且会出现故障,包括空闲实例。

  • 不要将 pod 定位到 Amazon Batch 托管节点。如果将容器组(pod)定位到托管节点,则会出现扩展中断和作业队列卡死的情况。运行不在自管节点或托管节点组 Amazon Batch 上使用的工作负载。有关更多信息,请参阅《Amazon EKS 用户指南》中的托管节点组

  • 您可以将 a 定位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将 a 设置为在 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 在 Amazon 上,EKS 支持启动模板。启动模板的功能受到限制。

重要

Amazon Batch 运行/etc/eks/bootstrap.sh。请勿在启动模板或cloud-inituser-data脚本中运行/etc/eks/bootstrap.sh。除了 bootstrap.sh--kubelet-extra-args参数外,还可以添加其他参数。为此,请在AWS_BATCH_KUBELET_EXTRA_ARGS文件中设置/etc/aws-batch/batch.config变量。详情请参阅以下示例。

注意

如果在调用后CreateComputeEnvironment更改了启动模板,则UpdateComputeEnvironment必须调用该启动模板来评估要替换的启动模板的版本。

添加kubelet额外参数

Amazon Batch 支持向kubelet命令添加额外的参数。有关支持的参数列表,请参阅Kubernetes文档中的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 Batch CONTAINER_RUNTIME环境变量在托管节点上配置容器运行时系统。以下示例将容器运行时系统设置为“bootstrap.sh运行时containerd”。有关更多信息,请参阅Kubernetes文档中的containerd

注意

CONTAINER_RUNTIME环境变量等同于bootstrap.sh--container-runtime选项。有关更多信息,请参阅Kubernetes文档中的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==--

安装 Amazon EFS 卷

可以使用启动模板将卷装载到节点上。在以下示例中,使用了cloud-configpackagesruncmd设置。有关更多信息,请参阅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==--

要在作业中使用此卷,必须将其添加到 eksPro perties 参数中。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目录中。在 Amazon EKS 作业的容器中,卷安装在/efs目录中。

IPv6 支持

Amazon Batch 支持具有 IPv6 地址的 Amazon EKS 集群。无需自定义即可获得 Amazon Batch 支持。但是,在开始之前,我们建议查看《Amazon EKS 用户指南》为容器组(pod)和服务分配 IPv6 地址中概述的注意事项和条件。