Cómo empezar con AWS Batch 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.

Cómo empezar con AWS Batch Amazon EKS

AWS Batch on Amazon EKS es un servicio gestionado para programar y escalar cargas de trabajo por lotes en clústeres de Amazon EKS existentes. AWS Batch no crea, administra ni realiza operaciones del ciclo de vida de sus clústeres de Amazon EKS en su nombre. AWS Batch la orquestación amplía y reduce los nodos administrados por dichos nodos AWS Batch y los ejecuta en ellos.

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 AWS Batch informáticos de su clúster de Amazon EKS. AWS Batch Para funcionar de forma eficaz, su función vinculada al servicio necesita permisos de control de acceso Kubernetes basado en funciones (RBAC) en su clúster Amazon EKS existente. Para obtener más información, consulte Utilización de la autorización de RBAC en la documentación Kubernetes.

AWS Batch requiere un espacio de Kubernetes nombres en el que pueda clasificar los pods como trabajos. AWS Batch Recomendamos un espacio de nombres dedicado para aislar los AWS Batch pods de las demás cargas de trabajo del clúster.

Una vez AWS Batch que se le haya otorgado acceso a RBAC y se haya establecido un espacio de nombres, puede asociar ese clúster de Amazon EKS a un entorno AWS Batch informático mediante la operación de API. CreateComputeEnvironment Se puede asociar una cola de trabajos a este nuevo entorno informático de Amazon EKS. AWS Batch los trabajos 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 SubmitJobAPI. AWS Batch a continuación, lanza los nodos AWS Batch gestionados y coloca los trabajos de la cola de trabajos en forma de Kubernetes pods en el clúster EKS asociado a un entorno AWS Batch informático.

En las siguientes secciones se explica cómo configurar AWS Batch Amazon EKS.

Descripción general de

En este tutorial se muestra cómo realizar la configuración AWS Batch con Amazon EKS mediante AWS CLI, kubectl yeksctl.

Público al que va dirigido

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 el AWS CLI, para:

  • 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 requerido

Completar este tutorial debería tardar entre 30 y 40 minutos.

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 AWS cuenta no conlleva ningún cargo. 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.

Description (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 tanto AWS Batch los recursos de Amazon EKS.

Paso 1: Cree su 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 --name my-cluster-name --region region-code

Sustituya en el comando anterior:

  • my-cluster-nameSustitúyalo por el nombre que desee usar para su clúster.

  • region-codeSustitúyalo por el 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: Prepare el clúster de Amazon EKS para AWS Batch

Todos los pasos son obligatorios.

  1. Cree un espacio de nombres dedicado a los trabajos AWS Batch

    Se utiliza kubectl para 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}" } } } EOF

    Salida:

    namespace/my-aws-batch-namespace created
  2. Habilite el acceso a través del control de acceso basado en roles (RBAC)

    kubectlUtilícelo para crear un Kubernetes rol para el clúster que AWS Batch permita 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-role rules: - 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-binding subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: aws-batch-cluster-role apiGroup: rbac.authorization.k8s.io EOF

    Salida:

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
  3. Cree un Kubernetes rol dentro del espacio de nombres para administrar los pods durante AWS Batch todo el ciclo de vida y vincúlelo. 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-role namespace: ${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-binding namespace: ${namespace} subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: aws-batch-compute-environment-role apiGroup: rbac.authorization.k8s.io EOF

    Salida:

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
  4. Actualice el Kubernetes aws-auth mapa de configuración para asignar los permisos RBAC anteriores al rol vinculado al servicio. AWS Batch

    Reemplace en el siguiente comando:

    • Reemplace <your-account-number> por el ID de su  Cuenta de AWS .

    $ eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --username aws-batch

    Salida:

    2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMap
    nota

    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 de aws-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 informáticos definen los parámetros de los recursos informáticos para satisfacer sus necesidades de carga de trabajo por lotes. En un entorno informático gestionado, le AWS Batch ayuda a gestionar la capacidad y los tipos de instancia de los recursos informáticos (Kubernetesnodos) 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 AWSServiceRoleForBatchvinculado al servicio tiene acceso a su clúster de Amazon EKS, puede crear AWS Batch recursos. En primer lugar, cree un entorno de computación que apunte a su clúster de Amazon EKS.

  • En subnets ejecute eksctl get cluster my-cluster-name para obtener las subredes que el clúster utilizó.

  • 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 \ --name my-cluster-name \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • El instanceRole se creará con la formación del clúster. Si desea encontrar la lista instanceRole de todas las entidades que utilizan la política AmazonEKSWorkerNodePolicy:

    $ aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy

    El nombre del rol de política contiene el nombre del clúster que se creó en eksctl-my-cluster-name-nodegroup-example.

    Ejecute el siguiente comando para buscar el ARN de instanceRole:

    $ aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-example

    Salida:

    INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12example

    Para 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

Paso 4: Cree una cola de trabajos y adjunte el entorno informático

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 DescribeComputeEnvironmentsAPI.

$ aws batch describe-compute-environments --compute-environments My-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 Solución de problemas AWS Batch.

Los trabajos enviados a esta nueva cola de trabajos se ejecutan como pods en los nodos AWS Batch gestionados que se unieron al clúster de Amazon EKS asociado a su entorno de cómputo.

$ 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

Paso 6: Presentar un trabajo

Ejecute el siguiente AWS CLI comando para enviar un nuevo Job.

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-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:

  1. Abra la AWS Batch consola en https://console.aws.amazon.com/batch/.

  2. En el panel de navegación, seleccione Trabajos.

  3. En el menú desplegable de Colas de trabajo, elija la cola de trabajos que creó para el tutorial.

  4. La tabla Trabajos muestra todos los trabajos y su estado actual. Una vez que el estado del trabajo sea correcto, elija el nombre del trabajoMy-Eks-JQ1, para ver los detalles del trabajo.

  5. 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 limpia agresivamente las cápsulas una vez finalizadas las tareas para reducir la carga. Kubernetes Para examinar los detalles de un trabajo, se debe configurar el registro. Para obtener más información, consulte Utilice CloudWatch los registros para supervisar AWS Batch 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 ver la salida del trabajo, realice lo siguiente:

  1. Abre la AWS Batch consola en. https://console.aws.amazon.com/batch/

  2. En el panel de navegación, seleccione Trabajos.

  3. En el menú desplegable de Colas de trabajo, elija la cola de trabajos que creó para el tutorial.

  4. 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.

  5. En el panel Detalles, elija el Nombre del flujo de registro. Se abrirá la CloudWatch consola del Job y debería haber un evento con el Mensaje de hello world o 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:

  1. Abra la AWS Batch consola en https://console.aws.amazon.com/batch/.

  2. En el panel de navegación, elija Cola de trabajos.

  3. En la tabla Cola de trabajos, elija la cola de trabajos que creó para el tutorial.

  4. Elija Deshabilitar. Una vez que el Estado de la cola de trabajos esté deshabilitado, puede elegir Eliminar.

  5. Una vez se elimine la cola de trabajos, en el panel de navegación, elija Entornos de computación.

  6. 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.

  7. 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: