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 a un servicio necesita permisos de control Kubernetes de acceso 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

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 AWS Batch.

Funciones utilizadas

En este tutorial se muestra cómo utilizar el AWS CLI, para:

  • Creación y configuración de un entorno informático Amazon EKS

  • Cree una cola de trabajos.

  • Creación de una definición de trabajo

  • Cree y envíe un trabajo para ejecutarlo

  • Envíe un trabajo con anulaciones

Tiempo requerido

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

Restricciones regionales

No hay restricciones nacionales o regionales asociadas al uso de esta solución.

Costos de uso de recursos

La creación de una AWS cuenta es gratuita. 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)
Se te cobrará por hora de 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 empezar de la forma más sencilla y rápida posible, este tutorial incluye pasos con la configuración predeterminada. Antes de crear para su uso en producción, le recomendamos que se familiarice con todos los ajustes e implemente los ajustes que se ajusten a sus necesidades.

Una vez que haya instalado los requisitos previos, debe crear su clúster medianteeksctl. La creación del clúster puede tardar entre 10 y 15 minutos.

$ eksctl create cluster --name my-cluster-name --region region-code

En el comando anterior, sustituya:

  • my-cluster-nameSustitúyalo por el nombre que desee usar para el 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 son necesarios para más adelante en 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

    En el siguiente comando, sustituya:

    • 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 informático 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 EC2 bajo demanda o instancias EC2 puntuales.

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.

  • Para subnets ejecutar para eksctl get cluster my-cluster-name obtener las subredes utilizadas por el clúster.

  • Como securityGroupIds parámetro, puede usar el mismo grupo de seguridad que 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
  • instanceRoleSe crea al crear el clúster. Para encontrar la instanceRole lista de todas las entidades que utilizan la AmazonEKSWorkerNodePolicy política:

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

    El nombre de la función de política contiene el nombre del clúster que ha creadoeksctl-my-cluster-name-nodegroup-example.

    Para encontrar el instanceRole arn, ejecute el siguiente comando:

    $ 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 Creación del rol de IAM del nodo de Amazon EKS y Habilitar el acceso principal de IAM a su clúster en la Guía del usuario de Amazon EKS. Si utiliza redes de pod, consulte Configuración del complemento de CNI de Amazon VPC para 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 informático.

$ 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 Job indica al módulo que duerma 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: Enviar 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

Para comprobar el estado de un Job:

$ 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 el resultado del trabajo

Para ver el resultado del trabajo, haga lo siguiente:

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

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

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

  4. La tabla de trabajos muestra todos sus 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 de detalles, las horas de inicio y parada deben estar separadas por un minuto.

Paso 8: (opcional) Enviar un trabajo con sustituciones

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 el resultado del trabajo, haga lo siguiente:

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

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

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

  4. La tabla de trabajos muestra todos sus trabajos y su estado actual. Una vez que el estado del trabajo sea correcto, elija el nombre del trabajo para ver los detalles del trabajo.

  5. En el panel de 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: Limpia los recursos de tu tutorial

Se te cobrará por la EC2 instancia de Amazon mientras esté habilitada. Puedes eliminar la instancia para dejar de incurrir en cargos.

Para eliminar los recursos que ha creado, haga lo siguiente:

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

  2. En el panel de navegación, seleccione Lista de trabajos.

  3. En la tabla de colas 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 eliminada la cola de trabajos, en el panel de navegación, elija Entornos de cómputo.

  6. Elija el entorno informático que creó para este tutorial y, a continuación, elija Desactivar. El entorno de cómputo puede tardar entre 1 y 2 minutos en terminar de inhabilitarse.

  7. Una vez que el estado del entorno de cómputo esté deshabilitado, seleccione Eliminar. La eliminación del entorno informático puede tardar entre 1 y 2 minutos.

Recursos adicionales

Después de completar el tutorial, es posible que desee explorar los siguientes temas: