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
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.
-
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 . Tras instalarlo AWS CLI, le recomendamos que también lo configure. Para obtener más información, consulte Configuración rápida con
aws configure
en 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.23
o una posterior. Para obtener más información, consulte Instalación o actualización dekubectl
en 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óneksctl
0.115.0
o una posterior. Para obtener más información, consulte Instalación o actualización de
en la Guía del usuario de Amazon EKS.eksctl
-
Permisos de IAM necesarios: el responsable de seguridad de IAM que utilice debe tener permisos para trabajar con las funciones de IAM de Amazon EKS y las funciones vinculadas a servicios AWS CloudFormation, así como con una VPC y los 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 CreateComputeEnvironmentAPI para crear un entorno de cómputo que utilice los recursos de Amazon EKS necesitan permisos para la operación de
eks:DescribeCluster
API. -
Cuenta de AWS número: necesita saber su Cuenta de AWS ID. Sigue las instrucciones que se indican en Cómo ver tu Cuenta de AWS identificación.
(Opcional) CloudWatch: para examinar los detalles de (opcional) Enviar un trabajo con anulaciones, 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.
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
--regionregion-code
En el comando anterior, sustituya:
-
my-cluster-name
Sustitúyalo por el nombre que desee usar para el clúster. -
region-code
Sustitú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.
-
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
-
Habilite el acceso a través del control de acceso basado en roles (RBAC)
kubectl
Utilí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 EOFSalida:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
-
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 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 Kubernetes
aws-auth
mapa de configuración para asignar los permisos RBAC anteriores al rol vinculado al servicio. AWS BatchEn 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" \ --usernameaws-batch
Salida:
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 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 paraeksctl get cluster
obtener las subredes utilizadas por el clúster.my-cluster-name
-
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 -
instanceRole
Se crea al crear el clúster. Para encontrar lainstanceRole
lista de todas las entidades que utilizan laAmazonEKSWorkerNodePolicy
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 creado
eksctl-
.my-cluster-name
-nodegroup-examplePara encontrar el
instanceRole
arn, ejecute el siguiente comando:$
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 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
-
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 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
-
Hay que tener en cuenta los parámetros
cpu
ymemory
. Para obtener más información, consulte Consideraciones sobre memoria y vCPU para AWS Batch Amazon EKS.
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-definitionMyJobOnEks_Sleep
--job-nameMy-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:
-
Abra la AWS Batch consola en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, elija Trabajos.
-
En el menú desplegable de colas de trabajos, elija la cola de trabajos que creó para el tutorial.
-
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
My-Eks-JQ1
, para ver los detalles del trabajo. -
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 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 Amazon EKS.
Para ver el resultado del trabajo, haga lo siguiente:
-
Abra la AWS Batch consola en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, elija Trabajos.
-
En el menú desplegable de colas de trabajos, elija la cola de trabajos que creó para el tutorial.
-
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.
-
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:
-
Abra la AWS Batch consola en https://console.aws.amazon.com/batch/
. -
En el panel de navegación, seleccione Lista de trabajos.
-
En la tabla de colas 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 eliminada la cola de trabajos, en el panel de navegación, elija Entornos de cómputo.
-
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.
-
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:
-
Obtenga más información sobre las prácticas recomendadas.
-
Explore los componentes AWS Batch principales. Para obtener más información, consulte Componentes de AWS Batch.
-
Obtenga más información sobre los diferentes entornos de cómputo disponibles en AWS Batch.
-
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.