Amazon EKS 運算環境 - AWS Batch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS 運算環境

開始使 AWS Batch 用 Amazon EKS提供建立 EKS 運算環境的簡短指南。本節提供有關 Amazon EKS 運算環境的更多詳細資訊。

預設 AMI 選擇

當您建立 Amazon EKS 運算環境時,您不需要指定 Amazon 機器映像 (AMI)。 AWS Batch 根據您在CreateComputeEnvironment請求中指定的Kubernetes版本和執行個體類型,選取 Amazon EKS 最佳化 AMI。一般而言,我們建議您使用預設 AMI 選項。有關 Amazon EKS 優化 AMI 的更多信息,請參閱 Amazon EKS 用戶指南中的 Amazon EKS 優化 Amazon Linux AMI

執行下列命令以查看為您的 Amazon EKS 運算環境選取了哪種 AMI 類型 AWS Batch 。下列範例是非 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.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

當您使用 API 作業或 CreateComputeEnvironment API 作業建立或UpdateComputeEnvironment更新運算環境時,您可能會看到類似下列的錯誤訊息。如果您在中指定不支援的Kubernetes版本,就會發生這個問題EC2Configuration

At least one imageKubernetesVersion in EC2Configuration is not supported.

若要解決此問題,請刪除計算環境,然後使用支援的Kubernetes版本重新建立該環境。

您可以在 Amazon EKS 叢集上執行次要版本升級。例如,即使不支援次要版本,您1.yy也可以1.xx將叢集從升級為。

不過,在主要版本更新INVALID之後,運算環境狀態可能會變更為。例如,如果您執行從1.xx到的主要版本升級2.yy。如果主要版本不受支援 AWS Batch,您會看到類似下列的錯誤訊息。

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

更新運算環境的Kubernetes版本

您可以使用更新運算環境的Kubernetes版本 AWS Batch,以支援 Amazon EKS 叢集升級。運算環境的Kubernetes版本是 Amazon EKS AMI 版本,適用於 AWS Batch 啟動以執行任務的Kubernetes節點。您可以在更新 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節點的共同責任

維護運算環境是共同的責任。

  • 請勿變更或移除 AWS Batch 節點、標籤、污點、命名空間、啟動範本或 auto 調度資源群組。請勿將污染新增至 AWS Batch 受管節點。如果您進行上述任何變更,則無法支援您的運算環境,也會發生包括閒置執行個體在內的故障。

  • 請勿將網繭鎖定至 AWS Batch 受管理節點。如果您將網繭鎖定到受管節點,則會發生中斷的調整和卡住的工作佇列。執行不 AWS Batch 在自我管理節點或受管節點群組上使用的工作負載。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的受管節點群組

  • 您可以DaemonSet將 a 定位為在 AWS Batch 受管節點上執行。如需詳細資訊,請參閱 DaemonSet在 AWS Batch 受管節點上執行

AWS Batch 不會自動更新計算環境 AMI。您有責任更新它們。執行下列命令,將 AMI 更新為最新的 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。請勿/etc/eks/bootstrap.sh在啟動範cloud-inituser-data本或指令碼中執行。您可以將參數以外的其他參--kubelet-extra-args數新增至 bootstrap.sh。若要執行此操作,請在/etc/aws-batch/batch.config檔案中設定AWS_BATCH_KUBELET_EXTRA_ARGS變數。如需詳細資訊,請參閱下列範例。

注意

如果啟動範本在呼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境變數相當於的--container-runtime選項bootstrap.sh。如需詳細資訊,請參閱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文件中的 Cloud 設定範例

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

若要在工作中使用此磁碟區,必須將其加入至 EksProperty 參數中。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 使用者指南將 IPv6 地址指派給網繭和服務中概述的考量和條件。