Amazon EKS 计算环境 - AWS Batch

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

Amazon EKS 计算环境

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

默认AMI选择

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

运行以下命令,查看为您的 Amazon EKS 计算环境选择了 AWS 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版本

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

  • 1.30

  • 1.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

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

At least one imageKubernetesVersion in EC2Configuration is not supported.

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

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

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

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

更新计算环境的Kubernetes版本

使用 AWS Batch,您可以更新计算环境的Kubernetes版本以支持 Amazon EKS 集群升级。计算环境的Kubernetes版本是 AWS Batch 启动运行任务的Kubernetes节点的 Amazon EKS AMI 版本。在更新 Amazon 集群控制平面Kubernetes版本之前或之后,您可以在他们的 Amazon EKS EKS 节点上执行版本升级。我们建议在升级控制面板后更新节点。有关更多信息,请参阅《亚马逊EKS用户指南》中的更新亚马逊EKS集群Kubernetes版本

要升级计算环境的Kubernetes版本,请使用UpdateComputeEnvironmentAPI操作。

$ aws batch update-compute-environment \ --compute-environment <compute-environment-name> \ --compute-resources \ 'ec2Configuration=[{imageType=EKS_AL2,imageKubernetesVersion=1.23}]'

Kubernetes节点的共同责任

计算环境的维护是一项共同责任。

  • 请勿更改或移除 AWS Batch 节点、标签、污点、命名空间、启动模板或 auto Scaling 组。不要向 AWS Batch 托管节点添加污点。如果要进行上述任何更改,则无法支持计算环境,并且会出现故障,包括空闲实例。

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

  • 您可以将 a 定位DaemonSet为在 AWS Batch 托管节点上运行。有关更多信息,请参阅 DaemonSet在 AWS Batch 托管节点上运行

AWS Batch 不会自动更新计算环境AMIs。您要负责更新它们。运行以下命令将您的版本更新AMIs到最新AMI版本。

$ aws batch update-compute-environment \ --compute-environment <compute-environment-name> \ --compute-resources 'updateToLatestImageVersion=true'

AWS 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在 AWS Batch 托管节点上运行

AWS Batch 在 AWS Batch 托管Kubernetes节点上设置污点。您可以通过以下方式DaemonSet将 a 设置为在 AWS 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"

使用启动模板进行自定义

AWS Batch Amazon 上EKS支持启动模板。启动模板的功能受到限制。

重要

AWS 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额外参数

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

配置容器运行时系统

您可以使用 AWS 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==--

要在作业中使用此卷,必须将其添加到eksProperties参数中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支持

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