Commencer à utiliser AWS Batch sur Amazon EKS - AWS Batch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Commencer à utiliser AWS Batch sur Amazon EKS

AWS Batch sur Amazon EKS est un service géré permettant de planifier et de dimensionner les charges de travail par lots dans les clusters Amazon EKS existants. AWS Batch ne crée, n'administre ni n'effectue d'opérations de cycle de vie de vos clusters Amazon EKS en votre nom. AWS Batch l'orchestration fait évoluer vers le haut et vers le bas les nœuds gérés par ces nœuds AWS Batch et exécute des pods sur ces nœuds.

AWS Batch ne touche pas les nœuds, les groupes de nœuds à dimensionnement automatique ou les cycles de vie des pods qui ne sont pas associés aux environnements AWS Batch informatiques de votre cluster Amazon EKS. AWS Batch Pour fonctionner efficacement, son rôle lié à un service nécessite des autorisations de contrôle d'accès Kubernetes basé sur les rôles (RBAC) dans votre cluster Amazon EKS existant. Pour plus d'informations, consultez la section Utilisation de l'autorisation RBAC dans la Kubernetesdocumentation.

AWS Batch nécessite un espace de Kubernetes noms dans lequel il peut étendre les pods en tant que AWS Batch tâches. Nous recommandons un espace de noms dédié pour isoler les AWS Batch pods de vos autres charges de travail de cluster.

Une fois AWS Batch que vous avez obtenu l'accès RBAC et qu'un espace de noms a été établi, vous pouvez associer ce cluster Amazon EKS à un environnement AWS Batch informatique à l'aide de l'opération CreateComputeEnvironmentAPI. Une file d'attente de tâches peut être associée à ce nouvel environnement de calcul Amazon EKS. AWS Batch les tâches sont soumises à la file d'attente des tâches sur la base d'une définition de tâche Amazon EKS à l'aide de l'opération SubmitJobAPI. AWS Batch lance ensuite les nœuds AWS Batch gérés et place les tâches de la file d'attente sous forme de Kubernetes pods dans le cluster EKS associé à un environnement AWS Batch informatique.

Les sections suivantes expliquent comment procéder à la configuration AWS Batch sur Amazon EKS.

Présentation

Ce didacticiel explique comment effectuer AWS Batch une configuration avec Amazon EKS à AWS CLI l'aide kubectl eksctl des

Public visé

Ce didacticiel est destiné aux administrateurs système et aux développeurs chargés de la configuration, des tests et du déploiement AWS Batch.

Fonctionnalités utilisées

Ce didacticiel vous montre comment utiliser le AWS CLI, pour :

  • Création et configuration d'un environnement informatique Amazon EKS

  • Créez une file d'attente de tâches.

  • Créer une définition de tâche

  • Création et soumission d'une tâche à exécuter

  • Soumettre une offre d'emploi avec des dérogations

Temps requis

La réalisation de ce didacticiel devrait prendre environ 30 à 40 minutes.

Restrictions régionales

Aucune restriction nationale ou régionale n'est associée à l'utilisation de cette solution.

Coûts d'utilisation des ressources

La création d'un AWS compte est gratuite. Cependant, en mettant en œuvre cette solution, vous pouvez être redevable de tout ou partie des frais répertoriés dans le tableau suivant.

Description Coût (dollar américain)
Vous êtes facturé en fonction de l'heure du cluster Varie en fonction de l'instance, voir la tarification d'Amazon EKS

Prérequis

Avant de commencer ce didacticiel, vous devez installer et configurer les outils et ressources suivants dont vous avez besoin pour créer et gérer à la fois les ressources Amazon EKS AWS Batch et les ressources Amazon EKS.

Étape 1 : Créez votre cluster Amazon EKS pour AWS Batch

Important

Pour démarrer le plus simplement et le plus rapidement possible, ce didacticiel inclut des étapes avec les paramètres par défaut. Avant de créer pour une utilisation en production, nous vous recommandons de vous familiariser avec tous les paramètres et de déployer avec ceux qui répondent à vos besoins.

Une fois que vous avez installé les prérequis, vous devez créer votre cluster à l'aide eksctl de. La création du cluster peut prendre entre 10 et 15 minutes.

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

Dans la commande précédente, remplacez :

  • my-cluster-nameRemplacez-le par le nom que vous souhaitez utiliser pour votre cluster.

  • region-codeRemplacez-le par le Région AWS pour créer le cluster dans, par exempleus-west-2.

Le nom et la région du cluster sont nécessaires pour la suite de ce didacticiel.

Étape 2 : Préparez votre cluster Amazon EKS pour AWS Batch

Toutes les étapes sont obligatoires.

  1. Création d'un espace de noms dédié aux tâches AWS Batch

    kubectlÀ utiliser pour créer un nouvel espace de noms.

    $ namespace=my-aws-batch-namespace
    $ cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOF

    Sortie :

    namespace/my-aws-batch-namespace created
  2. Permettre l'accès via le contrôle d'accès basé sur les rôles (RBAC)

    kubectlÀ utiliser pour créer un Kubernetes rôle pour le cluster afin de AWS Batch permettre de surveiller les nœuds et les pods, et de lier le rôle. Vous devez effectuer cette opération une fois pour chaque cluster 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

    Sortie :

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
  3. Créez un Kubernetes rôle délimité par un espace de noms pour gérer et prolonger le cycle AWS Batch de vie des pods et les lier. Vous devez effectuer cette opération une fois pour chaque espace de noms unique.

    $ 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

    Sortie :

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
  4. Mettez à Kubernetes aws-auth jour la carte de configuration pour associer les autorisations RBAC précédentes au rôle lié au service. AWS Batch

    Dans la commande suivante, remplacez :

    • Remplacez <your-account-number> par votre Compte AWS numéro.

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

    Sortie :

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

    Le chemin aws-service-role/batch.amazonaws.com/ a été supprimé de l'ARN du rôle lié au service. Cela est dû à un problème avec la carte aws-auth de configuration. Pour plus d'informations, consultez la section Les rôles dotés de chemins ne fonctionnent pas lorsque le chemin est inclus dans leur ARN dans le aws-authconfigmap.

Étape 3 : Création d'un environnement informatique Amazon EKS

AWS Batch les environnements informatiques définissent les paramètres des ressources de calcul pour répondre à vos besoins en matière de charge de travail par lots. Dans un environnement informatique géré, vous AWS Batch aide à gérer la capacité et les types d'instances des ressources de calcul (Kubernetesnœuds) au sein de votre cluster Amazon EKS. Ceci est basé sur la spécification des ressources de calcul que vous définissez lors de la création de l'environnement de calcul. Vous pouvez utiliser des instances EC2 à la demande ou des instances EC2 ponctuelles.

Maintenant que le rôle AWSServiceRoleForBatchlié au service a accès à votre cluster Amazon EKS, vous pouvez créer des AWS Batch ressources. Créez d'abord un environnement informatique qui pointe vers votre cluster Amazon EKS.

  • Pour subnets exécuter eksctl get cluster my-cluster-name pour obtenir les sous-réseaux utilisés par le cluster.

  • Pour les securityGroupIds paramètres, vous pouvez utiliser le même groupe de sécurité que le cluster Amazon EKS. Cette commande récupère l'ID du groupe de sécurité pour le cluster.

    $ aws eks describe-cluster \ --name my-cluster-name \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • Le instanceRole est créé lorsque vous créez le cluster. Pour trouver la instanceRole liste de toutes les entités qui utilisent la AmazonEKSWorkerNodePolicy politique :

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

    Le nom du rôle de stratégie contient le nom du cluster que vous avez crééeksctl-my-cluster-name-nodegroup-example.

    Pour trouver l'instanceRoleARN, exécutez la commande suivante :

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

    Sortie :

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

    Pour plus d'informations, consultez les sections Création du rôle IAM du nœud Amazon EKS et Activation de l'accès principal IAM à votre cluster dans le guide de l'utilisateur Amazon EKS. Si vous utilisez un réseau de modules, consultez la section Configuration du plug-in Amazon VPC CNI pour utiliser les rôles IAM Kubernetes pour les comptes de service dans le guide de l'utilisateur 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
Remarques

Étape 4 : créer une file d'attente de tâches et associer l'environnement informatique

Important

Il est important de vérifier que l'environnement informatique est sain avant de continuer. L'opération DescribeComputeEnvironmentsAPI peut être utilisée à cette fin.

$ aws batch describe-compute-environments --compute-environments My-Eks-CE1

Vérifiez que le status paramètre ne l'est pasINVALID. Si c'est le cas, examinez le statusReason paramètre correspondant à la cause. Pour de plus amples informations, veuillez consulter Résolution des problèmes AWS Batch.

Les tâches soumises à cette nouvelle file d'attente sont exécutées en tant que modules sur des nœuds AWS Batch gérés qui ont rejoint le cluster Amazon EKS associé à votre environnement informatique.

$ 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

Étape 5 : Création d'une définition de tâche

La définition de Job suivante indique au module de rester en veille pendant 60 secondes.

$ 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
Remarques

Étape 6 : Soumettre une offre d'emploi

Exécutez la AWS CLI commande suivante pour soumettre un nouveau Job.

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1

Pour vérifier le statut d'un Job :

$ aws batch describe-jobs --job <jobId-from-submit-response>
Remarques

Étape 7 : Afficher le résultat de la tâche

Pour afficher le résultat du Job, procédez comme suit :

  1. Ouvrez la AWS Batch console à l'adresse https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, sélectionnez Jobs.

  3. Dans le menu déroulant Job Queue, sélectionnez la file d'attente des Job que vous avez créée pour le didacticiel.

  4. Le tableau des tâches répertorie toutes vos tâches et leur statut actuel. Une fois que le statut du Job est atteint, choisissez le nom du JobMy-Eks-JQ1, pour afficher les détails du Job.

  5. Dans le volet Détails, les moments de démarrage et d'arrêt doivent être espacés d'une minute.

Étape 8 : (Facultatif) Soumettre une tâche avec des remplacements

Cette tâche remplace la commande transmise au conteneur. AWS Batch nettoie agressivement les capsules une fois les travaux terminés afin de réduire la charge à. Kubernetes Pour examiner les détails d'une tâche, la journalisation doit être configurée. Pour de plus amples informations, veuillez consulter Utiliser CloudWatch les journaux pour surveiller AWS Batch les tâches 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
Remarques

Pour afficher le résultat du Job, procédez comme suit :

  1. Ouvrez la AWS Batch console à l'adresse https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, sélectionnez Jobs.

  3. Dans le menu déroulant Job Queue, sélectionnez la file d'attente des Job que vous avez créée pour le didacticiel.

  4. Le tableau des tâches répertorie toutes vos tâches et leur statut actuel. Une fois que le statut du Job est atteint, choisissez le nom du Job pour afficher les détails du Job.

  5. Dans le volet Détails, choisissez le nom du flux du journal. La CloudWatch console du Job s'ouvre et il devrait y avoir un événement avec le message de hello world ou votre message personnalisé.

Étape 9 : Nettoyez les ressources de votre didacticiel

L' EC2 instance Amazon vous est facturée lorsqu'elle est activée. Vous pouvez supprimer l'instance pour ne plus encourir de frais.

Pour supprimer les ressources que vous avez créées, procédez comme suit :

  1. Ouvrez la AWS Batch console à l'adresse https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, choisissez Job queue.

  3. Dans le tableau des files d'attente de tâches, choisissez la file d'attente de tâches que vous avez créée pour le didacticiel.

  4. Choisissez Désactiver. Une fois que l'état de la file d'attente des Job est désactivé, vous pouvez choisir Delete.

  5. Une fois la file d'attente de Job supprimée, dans le volet de navigation, sélectionnez Compute environments.

  6. Choisissez l'environnement informatique que vous avez créé pour ce didacticiel, puis sélectionnez Désactiver. La désactivation complète de l'environnement informatique peut prendre 1 à 2 minutes.

  7. Une fois que l'état de l'environnement informatique est désactivé, choisissez Supprimer. La suppression de l'environnement informatique peut prendre 1 à 2 minutes.

Ressources supplémentaires

Une fois le didacticiel terminé, vous souhaiterez peut-être explorer les sujets suivants :