View a markdown version of this page

Démarrage avec AWS Batch sur Amazon EKS à l'aide de ConfigMap authentification - 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.

Démarrage avec AWS Batch sur Amazon EKS à l'aide de ConfigMap authentification

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

ConfigMap-based l'authentification est obsolète

Le aws-auth ConfigMap mode d'authentification (CONFIG_MAP) est obsolète et a été remplacée par l'API d'entrée d'accès Amazon EKS avec le cluster Amazon EKS authenticationMode réglé sur API ou API_AND_CONFIG_MAP.

Si votre cluster prend en charge les entrées d'accès (authenticationMode est API ou API_AND_CONFIG_MAP), nous vous recommandons vivement d'utiliser plutôt la méthode de saisie d'accès. Voir Démarrage avec AWS Batch sur Amazon EKS pour l'approche recommandée.

Utilise ça ConfigMap-based tutoriel uniquement si votre cluster est authenticationMode est CONFIG_MAP.

AWS Batch ne touche pas les nœuds, ne dimensionne pas automatiquement les groupes de nœuds ou les cycles de vie des pods qui ne sont pas associés à AWS Batch environnements informatiques au sein de votre cluster Amazon EKS. Pour AWS Batch pour fonctionner efficacement, ses rôle lié à un service besoins Kubernetes autorisations de contrôle d'accès basé sur les rôles (RBAC) dans votre cluster Amazon EKS existant. Pour plus d'informations, voir Utilisation de l'autorisation RBAC dans le Kubernetes documentation.

AWS Batch nécessite un Kubernetes espace de noms où il peut définir les pods comme AWS Batch emplois dans. Nous recommandons un espace de noms dédié pour isoler les AWS Batch pods provenant de vos autres charges de travail de cluster.

Après AWS Batch a reçu un accès RBAC et un espace de noms a été créé, vous pouvez associer ce cluster Amazon EKS à un AWS Batch environnement de calcul utilisant le CreateComputeEnvironment Fonctionnement de l'API. 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 du SubmitJob Fonctionnement de l'API. AWS Batch puis lance AWS Batch nœuds gérés et placez les tâches depuis la file d'attente des tâches comme Kubernetes pods dans le cluster EKS associé à un AWS Batch environnement informatique.

Les sections suivantes expliquent comment configurer AWS Batch sur Amazon EKS.

Vue d’ensemble

Ce didacticiel explique comment configurer AWS Batch avec Amazon EKS à l'aide du AWS CLI, kubectl et eksctl.

Public cible

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.

Caractéristiques utilisées

Ce tutoriel vous montre comment utiliser le AWS CLI, à :

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

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

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

  • Créez et soumettez une tâche à exécuter

  • Soumettre une offre d'emploi avec des modifications

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. 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é à l'heure cumulée Varie en fonction de l'instance, voir Tarification Amazon EKS

Conditions préalables

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 les deux AWS Batch et des 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 comprend 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 ceux qui répondent à vos besoins.

Une fois que vous avez installé les prérequis, vous devez créer votre cluster à l'aide de eksctl. 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 :

  • Remplacer my-cluster-name avec le nom que vous souhaitez utiliser pour votre cluster.

  • Remplacer region-code avec le Région AWS pour créer le cluster dans, par exemple us-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éez un espace de noms dédié pour AWS Batch jobs

    Utiliser kubectl 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)

    Utiliser kubectl pour créer un Kubernetes rôle que le cluster doit autoriser AWS Batch pour surveiller les nœuds et les pods, et pour 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éer un espace de noms limité Kubernetes rôle pour AWS Batch pour gérer et assurer le cycle 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. Mettre à jour Kubernetes aws-auth carte de configuration pour mapper les autorisations RBAC précédentes au AWS Batch rôle lié à un service.

    Dans la commande suivante, remplacez :

    • Remplacer <your-account-number> avec 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é à un service. Cela est dû à un problème avec aws-auth carte de configuration. Pour plus d'informations, voir 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 de calcul Amazon EKS

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

Maintenant que le AWSServiceRoleForBatch le rôle lié à un service a accès à votre cluster Amazon EKS, vous pouvez créer AWS Batch ressources. Tout d'abord, créez un environnement de calcul qui pointe vers votre cluster Amazon EKS.

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

  • Pour securityGroupIds paramètre vous permettant d'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 le instanceRole répertorier toutes les entités qui utilisent le AmazonEKSWorkerNodePolicy politique :

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

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

    Pour trouver le instanceRole arn exécute 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, voir 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 d'Amazon EKS. Si vous utilisez la mise en réseau des pods, voir Configuration du plug-in Amazon VPC CNI pour Kubernetes pour utiliser les rôles IAM pour les comptes de service dans le Guide de l'utilisateur d'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éation d'une file d'attente de tâches et attachement de l'environnement informatique

Important

Il est important de vérifier que l'environnement informatique est sain avant de poursuivre. Le DescribeComputeEnvironments Le fonctionnement de l'API peut être utilisé pour ce faire.

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

Confirmez que status le paramètre n'est pas INVALID. Si c'est le cas, regardez le statusReason paramètre de la cause. Pour plus d’informations, consultez Résolution des problèmes AWS Batch.

Les tâches soumises à cette nouvelle file d'attente de tâches sont exécutées sous forme de modules sur AWS Batch nœuds 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 poste

La définition de tâche suivante indique au module de dormir 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 ce qui suit AWS CLI commande pour soumettre une nouvelle tâche.

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

Pour vérifier le statut d'une tâche :

$ 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 le AWS Batch console à https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, choisissez Offres d'emploi.

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

  4. Le Offres d'emploi Un tableau répertorie toutes vos offres d'emploi et leur statut actuel. Une fois le job État est A réussi choisissez le Nom du Job, My-Eks-Job1, pour consulter les détails de la tâche.

  5. Dans le Détails volet le Commencé à et Arrêté à les horaires devraient être espacés d'une minute.

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

Cette tâche remplace la commande transmise au conteneur. AWS Batch nettoie de manière agressive 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 plus d’informations, consultez 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 le AWS Batch console à https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, choisissez Offres d'emploi.

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

  4. Le Offres d'emploi Un tableau répertorie toutes vos offres d'emploi et leur statut actuel. Une fois le job État est A réussi choisissez le Nom de la tâche pour afficher les détails de la tâche.

  5. Dans le Détails volet choisir Nom du flux de journaux. Le CloudWatch la console du Job s'ouvrira 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'instance Amazon EC2 vous est facturée tant qu'elle est activée. Vous pouvez supprimer l'instance pour ne plus entraîner de frais.

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

  1. Ouvrez le AWS Batch console à https://console.aws.amazon.com/batch/.

  2. Dans le volet de navigation, choisissez File d'attente des tâches.

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

  4. Choisissez Désactiver. Une fois la file d'attente des tâches État est désactivé, vous pouvez choisir Supprimer.

  5. Une fois la file d'attente des tâches supprimée, dans le volet de navigation, choisissez Environnements informatiques.

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

  7. Une fois que l'environnement informatique État 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 :