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

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

亚马逊 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.xx2.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,请参阅Kubernetes文档。在以下示例中,--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,请参阅Kubernetes文档

注意

CONTAINER_RUNTIME环境变量等同于的--container-runtime选项bootstrap.sh。有关更多信息 Options,请参阅Kubernetes文档

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-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==--

要在作业中使用此卷,必须将其添加到 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 地址中概述的注意事项和条件。