Entornos de computación de Amazon EKS - AWS Batch

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Entornos de computación de Amazon EKS

Cómo empezar con AWS Batch Amazon EKS proporciona una breve guía para crear entornos de cómputo de EKS. En esta sección se proporcionan más detalles sobre los entornos de cómputo de Amazon EKS.

Selección de AMI predeterminada

Al crear un entorno informático Amazon EKS, no necesita especificar una imagen de máquina de Amazon (AMI). AWS Batch selecciona una AMI optimizada para Amazon EKS en función de los tipos de Kubernetes versión e instancia que se especifican en la CreateComputeEnvironmentsolicitud. En general, recomendamos que utilice la selección de AMI predeterminada. Para obtener más información sobre AMI optimizadas para Amazon EKS, consulte AMI de Linux optimizadas para Amazon EKS en la Guía del usuario de Amazon EKS.

Ejecute el siguiente comando para ver qué tipo de AMI AWS Batch está seleccionado para su entorno informático Amazon EKS. El siguiente ejemplo es un tipo de instancia que no es de 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" } ]

El siguiente ejemplo es un tipo de instancia de 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" } ]

Versiones de Kubernetes compatibles

AWS Batch en Amazon EKS actualmente es compatible con las siguientes Kubernetes versiones:

  • 1.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

Es posible que aparezca un mensaje de error similar al siguiente cuando utilice la operación de CreateComputeEnvironment API o la operación de UpdateComputeEnvironment API para crear o actualizar un entorno de computación. Este problema se produce si especifica una versión de Kubernetes no compatible en EC2Configuration.

At least one imageKubernetesVersion in EC2Configuration is not supported.

Para resolver este problema, elimine el entorno de procesamiento y vuelva a crearlo con una versión de Kubernetes compatible.

Puede realizar una actualización de una versión menor en su clúster de Amazon EKS. Por ejemplo, puede actualizar el clúster de 1.xx a 1.yy incluso si la versión secundaria no es compatible.

Sin embargo, es posible que el estado del entorno de computación cambie a INVALID después de una actualización de la versión principal. Por ejemplo, si realiza una actualización de una versión principal de 1.xx a 2.yy. Si la versión principal no es compatible con AWS Batch, aparecerá un mensaje de error similar al siguiente.

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

Actualización la versión de Kubernetes del entorno de computación

Con AWS Batch, puede actualizar la Kubernetes versión de un entorno informático para que sea compatible con las actualizaciones de clústeres de Amazon EKS. La Kubernetes versión de un entorno de cómputo es la versión AMI de Amazon EKS para los Kubernetes nodos que se AWS Batch lanzan para ejecutar tareas. Puede realizar una actualización de Kubernetes versión en sus nodos de Amazon EKS antes o después de actualizar la versión del plano de control del clúster de Amazon EKS. Le recomendamos que actualice los nodos después de actualizar el plano de control. Para obtener más información, consulte Actualizar la versión de Kubernetes del clúster de Amazon EKS en la Guía del usuario de Amazon EKS.

Para actualizar la versión de Kubernetes de un entorno de computación, utilice la operación UpdateComputeEnvironment API.

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

Responsabilidad compartida de los nodos Kubernetes

El mantenimiento de los entornos de computación es una responsabilidad compartida.

  • No cambies ni elimines AWS Batch nodos, etiquetas, manchas, espacios de nombres, plantillas de lanzamiento ni grupos de escalado automático. No añada información contaminada a los nodos gestionados. AWS Batch Si realiza alguno de estos cambios, su entorno de computación no será compatible y se producirán errores, incluidas las instancias inactivas.

  • No dirija sus pods a los nodos AWS Batch gestionados. Si dirige sus pods a los nodos gestionados, se producirán problemas de escalado y las colas de trabajos se atascarán. Ejecuta cargas de trabajo que no se usen AWS Batch en nodos autogestionados o grupos de nodos gestionados. Para obtener más información, consulte Grupos de nodos administrados en la Guía del usuario de Amazon EKS.

  • Puede seleccionar DaemonSet a para que se ejecute en nodos AWS Batch gestionados. Para obtener más información, consulte Ejecuta un DaemonSet nodo AWS Batch gestionado.

AWS Batch no actualiza automáticamente las AMI del entorno de cómputo. Es su responsabilidad actualizarlas. Para actualizar las AMI a la versión más reciente, ejecute el siguiente comando.

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

AWS Batch no actualiza automáticamente la Kubernetes versión. Ejecute el siguiente comando para actualizar la versión Kubernetes de su entorno de computación a la 1.23.

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

Al actualizar a una AMI o a una Kubernetes versión más reciente, puede especificar si desea finalizar los trabajos cuando se actualicen (terminateJobsOnUpdate) y cuánto tiempo esperar antes de reemplazar una instancia si los trabajos en ejecución no terminan (jobExecutionTimeoutMinutes.) Para obtener más información, consulte Actualizar entornos informáticos y la política de actualización de la infraestructura (UpdatePolicy) establecida en la operación UpdateComputeEnvironment de la API.

Ejecuta un DaemonSet nodo AWS Batch gestionado

AWS Batch perjudica a los Kubernetes nodos AWS Batch gestionados. Puede seleccionar a DaemonSet para que se ejecute en nodos AWS Batch gestionados con lo siguientetolerations.

tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists"

Otra forma de hacerlo es con lo siguiente tolerations.

tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoSchedule" - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoExecute"

Personalización con plantillas de lanzamiento

AWS Batch en Amazon EKS admite plantillas de lanzamiento. Existen limitaciones en cuanto a lo que puede hacer su plantilla de lanzamiento.

importante

AWS Batch se ejecuta/etc/eks/bootstrap.sh. No ejecute /etc/eks/bootstrap.sh en su plantilla de lanzamiento ni en sus scripts cloud-init user-data. Puede añadir parámetros adicionales además del parámetro --kubelet-extra-args a bootstrap.sh. Para ello, defina la variable AWS_BATCH_KUBELET_EXTRA_ARGS en el archivo /etc/aws-batch/batch.config. Consulte el ejemplo siguiente para obtener información detallada.

nota

Si la plantilla de lanzamiento se cambia después de CreateComputeEnvironmentllamarla, UpdateComputeEnvironmenthay que llamarla para evaluar la versión de la plantilla de lanzamiento que se va a reemplazar.

Añadir argumentos adicionales kubelet

AWS Batch admite la adición de argumentos adicionales al kubelet comando. Para ver una lista completa de parámetros que admite kubelet, consulte la Documentación de Kubernetes. En el siguiente ejemplo, --node-labels mylabel=helloworld se agrega a la línea de comandos de 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==--

Configuración del tiempo de ejecución del contenedor

Puede utilizar la variable de entorno AWS Batch CONTAINER_RUNTIME para configurar el tiempo de ejecución del contenedor en un nodo administrado. En el siguiente ejemplo, se establece el tiempo de ejecución del contenedor en containerd cuando se ejecuta bootstrap.sh. Para obtener más información, consulte containerd en la documentación de Kubernetes.

nota

La variable de entorno de CONTAINER_RUNTIME equivale a la opción --container-runtime de bootstrap.sh. Para obtener más información, consulte Options en la documentación de 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==--

Montaje de un volumen de Amazon EFS

Puede utilizar plantillas de lanzamiento para montar los volúmenes en el nodo. En el siguiente ejemplo, se utilizan los ajustes cloud-config packages y runcmd. Para obtener más información, consulte ejemplos de configuración de nube en la cloud-initdocumentación.

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

Para usar este volumen en el trabajo, debe añadirse al parámetro eksProperties a. RegisterJobDefinition El siguiente ejemplo es una gran parte de la definición del trabajo.

{ "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" } } ] } } }

En el nodo, el volumen de Amazon EFS está montado en el directorio /mnt/efs. En el contenedor del trabajo de Amazon EKS, el volumen se monta en el /efs directorio.

Compatibilidad con IPv6

AWS Batch admite clústeres de Amazon EKS que tienen direcciones IPv6. No se requieren personalizaciones para obtener AWS Batch soporte. Sin embargo, antes de empezar, le recomendamos que revise las consideraciones y condiciones que se describen en la sección Asignación de direcciones IPv6 a los pods y servicios de la Guía del usuario de Amazon EKS.