Introducción a AWS Batch en Amazon EKSEKS
AWS Batch en Amazon EKS es un servicio administrado para programar y escalar cargas de trabajo por lotes en clústeres de Amazon EKS existentes. AWS Batch no crea, administra ni realiza las operaciones del ciclo de vida de los clústeres de Amazon EKS en su nombre. La orquestación AWS Batch amplía y reduce los nodos gestionados por AWS Batch y ejecuta pods en dichos nodos.
AWS Batch no afecta a los nodos, ni a los grupos de nodos con escalado automático ni a los ciclos de vida de los pods que no estén asociados a los entornos de computación AWS Batch de su clúster de Amazon EKS. Para que AWS Batch funcione de forma eficaz, su función vinculada a los servicios necesita permisos de control de acceso Kubernetes basado en funciones (RBAC) en el clúster de Amazon EKS existente. Para obtener más información, consulte Utilización de la autorización de RBAC
AWS Batch requiere un espacio de nombres Kubernetes en el que pueda clasificar los pods como trabajos AWS Batch. Recomendamos un espacio de nombres dedicado para aislar los pods AWS Batch de las demás cargas de trabajo del clúster.
Una vez se haya otorgado acceso RBAC a AWS Batch y se haya establecido un espacio de nombres, puede asociar ese clúster de Amazon EKS a un entorno de computación de AWS Batch mediante la operación de API CreateComputeEnvironment. Se puede asociar una cola de trabajos a este nuevo entorno de computación de Amazon EKS. Los trabajos AWS Batch se envían a la cola de trabajos en función de una definición de trabajo de Amazon EKS mediante la operación de API SubmitJob. A continuación, AWS Batch lanza los nodos administrados por AWS Batch y coloca los trabajos de la cola de trabajos en forma de pods Kubernetes en el clúster de EKS asociado a un entorno de computación de AWS Batch.
En las siguientes secciones, se explica cómo configurar AWS Batch en Amazon EKS.
Descripción general
En este tutorial se muestra cómo configurar AWS Batch con Amazon EKS mediante AWS CLI, kubectl y eksctl.
- Destinatarios previstos
-
Este tutorial está diseñado para los administradores y desarrolladores de sistemas responsables de la configuración, las pruebas y la implementación de AWS Batch.
- Características utilizadas
-
En este tutorial se muestra cómo utilizar AWS CLI para realizar lo siguiente:
-
crear y configurar un entorno de computación de Amazon EKS,
-
crear una cola de trabajos,
-
crear una definición de trabajo,
-
crear y enviar un flujo de trabajo para ejecutarlo,
-
enviar un trabajo con anulaciones.
-
- Tiempo necesario
-
Debe tardar entre 30 y 40 minutos en completar este tutorial.
- Restricciones regionales
-
No hay restricciones regionales o de país asociadas al uso de esta solución.
- Costos de uso de recursos
-
La creación de una cuenta de AWS no supone ningún coste. Sin embargo, mediante la implementación de esta solución, es posible que incurra en algunos o todos los costos que se enumeran en la siguiente tabla.
Descripción Costo (dólares estadounidenses) El cobro será por hora de uso del clúster Varía según la instancia. Consulte los precios de Amazon EKS
Requisitos previos
Antes de comenzar este tutorial, debe instalar y configurar las siguientes herramientas y recursos que necesita para crear y administrar recursos tanto de AWS Batch como de Amazon EKS.
-
AWS CLI: una herramienta de línea de comandos para trabajar con servicios de AWS, incluido Amazon EKS. Esta guía requiere que utilices la versión 2.8.6 o posterior o la 1.26.0 o posterior. Para obtener más información, consulte Instalar, actualizar y desinstalar la AWS CLI en la Guía del usuario de AWS Command Line Interface. Después de instalar la AWS CLI, recomendamos que también la configure. Para obtener más información, consulte Configuración rápida con
aws configureen la Guía del usuario de AWS Command Line Interface. -
kubectl: una herramienta de línea de comandos para trabajar con clústeres de Kubernetes. Esta guía requiere que utilice la versión1.23o una posterior. Para obtener más información, consulte Instalación o actualización dekubectlen la Guía del usuario de Amazon EKS. -
– una herramienta de línea de comandos para trabajar con clústeres de Amazon EKS que automatiza varias tareas individuales. Esta guía requiere que utilice la versióneksctl0.115.0o una posterior. Para obtener más información, consulte Instalación o actualización deen la Guía del usuario de Amazon EKS.eksctl -
Permisos de IAM necesarios: la entidad principal de seguridad de IAM que está utilizando debe contar con permisos para trabajar con los roles de IAM de Amazon EKS y los roles vinculados al servicio, CloudFormation, y una VPC y recursos relacionados. Para obtener más información, consulte Acciones, recursos y claves de condición de Amazon Elastic Kubernetes Service y Uso de roles vinculados a servicios en la Guía del usuario de IAM. Debe completar todos los pasos de esta guía como el mismo usuario.
-
Permisos: los usuarios que llamen a la operación de API CreateComputeEnvironment para crear un entorno de procesamiento que utilice recursos de Amazon EKS requieren permisos para la operación de API de
eks:DescribeCluster. -
Número de la Cuenta de AWS: Debe conocer el ID de su Cuenta de AWS. Siga las instrucciones que se indican en Visualización de su ID de Cuenta de AWS.
CloudWatch (opcional): Para examinar los detalles de (opcional) Enviar un trabajo con anulaciones, es obligatorio que el registro esté configurado. Para obtener más información, consulte Utilice los Registros de CloudWatch para supervisar AWS Batch en los trabajos de Amazon EKS.
Paso 1: Crear el clúster de Amazon EKS para AWS Batch
importante
Para comenzar de la manera más sencilla y rápida posible, en este tutorial se incluirán los pasos con la configuración predeterminada. Antes de crear para su uso en producción, recomendamos que conozca toda la configuración e implemente la configuración que satisfaga sus requisitos.
Tras haber instalado los requisitos previos, debe crear su clúster con eksctl. Crear el clúster puede tardar entre 10 y 15 minutos.
$eksctl create cluster --namemy-cluster-name--regionregion-code
Sustituya en el comando anterior:
-
my-cluster-namepor el nombre que desee para el nuevo clúster. -
region-codepor la Región de AWS para crear el clúster, por ejemplous-west-2.
El nombre y la región del clúster serán necesarios en otro momento para este tutorial.
Paso 2: Preparar el clúster de Amazon EKS para AWS Batch
Todos los pasos son obligatorios.
-
Cree un espacio de nombres dedicado a los trabajos AWS Batch
Se utiliza
kubectlpara crear un nuevo espacio de nombres.$namespace=my-aws-batch-namespace$cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOFSalida:
namespace/my-aws-batch-namespace created -
Habilite el acceso a través del control de acceso basado en roles (RBAC)
Se utiliza
kubectlpara crear un rol de Kubernetes para el clúster que permita a AWS Batch vigilar los nodos y los pods y vincular el rol. Debe hacerlo una vez para cada clúster de EKS.$cat - <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name:aws-batch-cluster-rolerules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list"] - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["daemonsets", "deployments", "statefulsets", "replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["clusterroles", "clusterrolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name:aws-batch-cluster-role-bindingsubjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name:aws-batch-cluster-roleapiGroup: rbac.authorization.k8s.io EOFSalida:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created -
Cree un rol de Kubernetes dentro del espacio de nombres para administrar los pods y AWS Batch vincularlos durante todo el ciclo de vida. Debe hacerlo una vez para cada espacio de nombres único.
$namespace=my-aws-batch-namespace$cat - <<EOF | kubectl apply -f - --namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name:aws-batch-compute-environment-rolenamespace: ${namespace} rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get", "list", "watch", "delete", "patch"] - apiGroups: [""] resources: ["serviceaccounts"] verbs: ["get", "list"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name:aws-batch-compute-environment-role-bindingnamespace: ${namespace} subjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: Role name:aws-batch-compute-environment-roleapiGroup: rbac.authorization.k8s.io EOFSalida:
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created -
Actualice el mapa de configuración Kubernetes
aws-authpara asignar los permisos de RBAC anteriores a la función vinculada al servicio AWS Batch.Reemplace en el siguiente comando:
-
<your-account-number>por su número de la Cuenta de AWS.
$eksctl create iamidentitymapping \ --clustermy-cluster-name\ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --usernameaws-batchSalida:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMapnota
La ruta
aws-service-role/batch.amazonaws.com/se ha eliminado del ARN del rol vinculado a un servicio. Esto se debe a un problema con el mapa de configuración deaws-auth. Para obtener más información, consulte Roles con rutas que no funcionan cuando la ruta está incluida en su ARN en el aws-authconfigmap. -
Paso 3: Crear un entorno de computación de Amazon EKS
AWS Batch Los entornos de computación definen los parámetros de los recursos de computación para satisfacer sus necesidades de carga de trabajo por lotes. En un entorno de computación administrado, AWS Batch le ayuda a administrar la capacidad y los tipos de instancias de los recursos de computación (nodos Kubernetes) dentro de su clúster de Amazon EKS. Se basa en la especificación de recursos de computación que se define al crear el entorno de computación. Puede utilizar instancias bajo demanda EC2 o instancias de spot EC2.
Ahora que el rol vinculado al servicio AWSServiceRoleForBatch tiene acceso a su clúster de Amazon EKS, puede crear recursos de AWS Batch. En primer lugar, cree un entorno de computación que apunte a su clúster de Amazon EKS.
-
En
subnetsejecuteeksctl get clusterpara obtener las subredes que el clúster utilizó.my-cluster-name -
En el parámetro
securityGroupIds, puede utilizar el mismo grupo de seguridad que utiliza el clúster de Amazon EKS. Este comando recupera el ID del grupo de seguridad del clúster.$aws eks describe-cluster \ --namemy-cluster-name\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
El
instanceRolese creará con la formación del clúster. Si desea encontrar la listainstanceRolede todas las entidades que utilizan la políticaAmazonEKSWorkerNodePolicy:$aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicyEl nombre del rol de política contiene el nombre del clúster que se creó en
eksctl-.my-cluster-name-nodegroup-exampleEjecute el siguiente comando para buscar el ARN de
instanceRole:$aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-exampleSalida:
INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12examplePara obtener más información, consulte Crear el rol de IAM de nodo de Amazon EKS y Habilitar el acceso de entidad principal para el clúster de IAM en la Guía del usuario de Amazon EKS. Si utiliza redes de pod, consulte Configuración del complemento de CNI de Amazon VPC de Kubernetes para utilizar roles de IAM en las cuentas de servicio en la Guía del usuario de Amazon EKS.
$cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:region-code:your-account-number:cluster/my-cluster-name", "kubernetesNamespace": "my-aws-batch-namespace" }, "computeResources": { "type": "EC2", "allocationStrategy": "BEST_FIT_PROGRESSIVE", "minvCpus": 0, "maxvCpus": 128, "instanceTypes": [ "m5" ], "subnets": [ "<eks-cluster-subnets-with-access-to-internet-for-image-pull>" ], "securityGroupIds": [ "<eks-cluster-sg>" ], "instanceRole": "<eks-instance-profile>" } } EOF
$aws batch create-compute-environment --cli-input-json file://./batch-eks-compute-environment.json
Notas
-
El mantenimiento de un entorno de computación de Amazon EKS es una responsabilidad compartida. Para obtener más información, consulte Responsabilidad compartida de los nodos Kubernetes.
Paso 4: cree una cola de trabajos y adjunte el entorno de computación
importante
Es importante confirmar que el entorno de computación está en buen estado antes de continuar. Para ello, se puede utilizar la operación de la API DescribeComputeEnvironments.
$aws batch describe-compute-environments --compute-environmentsMy-Eks-CE1
Confirme que el parámetro status no es INVALID. Si es así, busque la causa en el parámetro statusReason. Para obtener más información, consulte Resolución de problemas de AWS Batch.
Los trabajos enviados a esta nueva cola de trabajos se ejecutan como pods en los nodos administrados AWS Batch que se unieron al clúster de Amazon EKS asociado a su entorno de computación.
$cat <<EOF > ./batch-eks-job-queue.json { "jobQueueName": "My-Eks-JQ1", "priority": 10, "computeEnvironmentOrder": [ { "order": 1, "computeEnvironment": "My-Eks-CE1" } ] } EOF
$aws batch create-job-queue --cli-input-json file://./batch-eks-job-queue.json
Paso 5: crear una definición de trabajo
La siguiente definición de trabajo le indica al pod que permanezca en espera durante 60 segundos.
$cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "sleep", "60" ], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ], "metadata": { "labels": { "environment": "test" } } } } } EOF
$aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
Notas
-
Hay que tener en cuenta los parámetros
cpuymemory. Para obtener más información, consulte Consideraciones sobre memoria y vCPU para AWS Batch en Amazon EKS.
Paso 6: presentar un trabajo
Ejecute el siguiente comando AWS CLI para enviar un trabajo nuevo.
$aws batch submit-job --job-queueMy-Eks-JQ1\ --job-definitionMyJobOnEks_Sleep--job-nameMy-Eks-Job1
Cómo comprobar el estado de un trabajo:
$aws batch describe-jobs --job<jobId-from-submit-response>
Notas
-
Para obtener más información sobre la ejecución de trabajos en recursos de Amazon EKS, consulte Trabajos de Amazon EKS.
Paso 7: Ver la salida del trabajo
Para ver la salida del trabajo, realice lo siguiente:
-
Abra la consola de AWS Batch en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, seleccione Trabajos.
-
En el menú desplegable de Colas de trabajo, elija la cola de trabajos que creó para el tutorial.
-
La tabla Trabajos muestra todos los trabajos y su estado actual. Una vez que el Estado sea Correcto, seleccione el Nombre del trabajo,
My-Eks-JQ1, para consultar sus detalles. -
En el panel Detalles, las horas de Iniciado a las y Terminado a las deben estar separadas por un minuto.
Paso 8: (opcional) Enviar un trabajo con anulaciones
Este trabajo anula el comando pasado al contenedor. AWS Batch elimina decididamente los pod una vez finalizadas las tareas para reducir la carga a Kubernetes. Para examinar los detalles de un trabajo, se debe configurar el registro. Para obtener más información, consulte Utilice los Registros de CloudWatch para supervisar AWS Batch en los trabajos de Amazon EKS.
$cat <<EOF > ./submit-job-override.json { "jobName": "EksWithOverrides", "jobQueue": "My-Eks-JQ1", "jobDefinition": "MyJobOnEks_Sleep", "eksPropertiesOverride": { "podProperties": { "containers": [ { "command": [ "/bin/sh" ], "args": [ "-c", "echo hello world" ] } ] } } } EOF
$aws batch submit-job --cli-input-json file://./submit-job-override.json
Notas
-
Para mejorar la visibilidad de los detalles de las operaciones, habilite el registro del plano de control de Amazon EKS. Para obtener más información, consulte Registros del plano de control del clúster de Amazon EKS en la Guía del usuario de Amazon EKS.
-
La sobrecarga Daemonsets y kubelets afectan a los recursos de vCPU y de memoria disponibles, específicamente al escalado y la colocación de trabajos. Para obtener más información, consulte Consideraciones sobre memoria y vCPU para AWS Batch en Amazon EKS.
Para ver la salida del trabajo, realice lo siguiente:
-
Abra la consola AWS Batch en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, seleccione Trabajos.
-
En el menú desplegable de Colas de trabajo, elija la cola de trabajos que creó para el tutorial.
-
La tabla Trabajos muestra todos los trabajos y su estado actual. Una vez que el Estado del trabajo sea Correcto, seleccione el Nombre del trabajo para consultar sus detalles.
-
En el panel Detalles, elija el Nombre del flujo de registro. Se abrirá la consola CloudWatch del trabajo junto con un evento con el Mensaje de
hello worldo su mensaje personalizado.
Paso 9: Eliminar los recursos del tutorial
Se le cobrará por la instancia de Amazon EC2 mientras esté habilitada. Puede eliminar la instancia para dejar de generar cargos.
Para eliminar los recursos que usted creó, haga lo que se indica a continuación:
-
Abra la consola AWS Batch en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, elija Cola de trabajos.
-
En la tabla Cola de trabajos, elija la cola de trabajos que creó para el tutorial.
-
Elija Deshabilitar. Una vez que el Estado de la cola de trabajos esté deshabilitado, puede elegir Eliminar.
-
Una vez se elimine la cola de trabajos, en el panel de navegación, elija Entornos de computación.
-
Elija el entorno de computación que creó para este tutorial y, a continuación, elija Deshabilitar. El entorno de computación puede tardar entre 1 y 2 minutos en terminar de deshabilitarse.
-
Una vez que el Estado del entorno de computación esté deshabilitado, seleccione Eliminar. La eliminación del entorno de computación puede tardar entre 1 y 2 minutos.
Recursos adicionales
Después de completar el tutorial, recomendamos consultar alguno de los siguientes temas:
-
Obtenga más información sobre las prácticas recomendadas.
-
Consulte los componentes de AWS Batch principales. Para obtener más información, consulte Componentes de AWS Batch.
-
Obtenga más información sobre los diferentes entornos de computación disponibles en AWS Batch.
-
Obtenga más información sobre las colas de trabajos y sus diferentes opciones de programación.
-
Obtenga más información sobre las definiciones de trabajos y las diferentes opciones de configuración.
-
Obtenga más información sobre los distintos tipos de trabajos.