Tutoriel : Premiers pas avec AWS Batch Amazon EKS Private Clusters - 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.

Tutoriel : Premiers pas avec AWS Batch Amazon EKS Private Clusters

AWS Batch est un service géré qui orchestre les charges de travail par lots dans vos clusters Amazon Elastic Kubernetes Service (Amazon). EKS Cela inclut la mise en file d'attente, le suivi des dépendances, la gestion des nouvelles tentatives et des priorités des tâches, la gestion des pods et le dimensionnement des nœuds. Cette fonctionnalité connecte votre EKS cluster Amazon privé existant AWS Batch pour exécuter vos tâches à grande échelle. Vous pouvez utiliser eksctl(une interface de ligne de commande pour AmazonEKS), la AWS console ou le AWS Command Line Interfacepour créer un EKS cluster Amazon privé avec toutes les autres ressources nécessaires. Support pour les EKS clusters Amazon privés sur AWS Batch est généralement disponible dans le commerce, Régions AWS là où AWS Batch il est disponible.

Les clusters Amazon EKS Private Only n'ont aucun accès Internet entrant/sortant et ne disposent que de sous-réseaux privés. Les VPC points de terminaison Amazon sont utilisés pour permettre un accès privé à d'autres AWS services. eksctlprend en charge la création de clusters entièrement privés à l'aide d'un Amazon VPC et de sous-réseaux préexistants. eksctlcrée également des VPC points de terminaison Amazon dans l'Amazon fourni VPC et modifie les tables de routage pour les sous-réseaux fournis.

Chaque sous-réseau doit être associé à une table de routage explicite, car cela eksctl ne modifie pas la table de routage principale. Votre cluster doit extraire des images d'un registre de conteneurs qui se trouve sur votre AmazonVPC. Vous pouvez également créer un Amazon Elastic Container Registry dans votre Amazon VPC et y copier des images de conteneurs pour que vos nœuds puissent les extraire. Pour plus d'informations, voir Copier une image de conteneur d'un référentiel vers un autre référentiel. Pour commencer à utiliser les référentiels ECR privés Amazon, consultez la section Dépôts ECR privés Amazon.

Vous pouvez éventuellement créer une règle de cache d'extraction avec AmazonECR. Une fois qu'une règle de cache d'extraction est créée pour un registre public externe, vous pouvez extraire une image de ce registre public externe à l'aide de votre identifiant de ressource uriform () de votre registre ECR privé Amazon. URI Amazon ECR crée ensuite un référentiel et met l'image en cache. Lorsqu'une image mise en cache est extraite à l'aide du registre ECR privé AmazonURI, Amazon ECR vérifie dans le registre distant s'il existe une nouvelle version de l'image et met à jour votre registre privé jusqu'à une fois toutes les 24 heures.

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 EKS ressources Amazon AWS Batch et celles d'Amazon. Vous devez également créer toutes les ressources nécessairesVPC, notamment les sous-réseaux, les tables de routage, les points de VPC terminaison et le cluster Amazon. EKS Vous devez utiliser le AWS CLI.

  • AWS CLI— Un outil de ligne de commande pour travailler avec AWS les services, y compris AmazonEKS. Ce guide nécessite que vous utilisiez la version 2.8.6 ou ultérieure ou la version 1.26.0 ou ultérieure. Pour plus d'informations, consultez la section Installation, mise à jour et désinstallation du AWS CLI dans le guide de l'AWS Command Line Interface utilisateur.

    Après l'avoir installé AWS CLI, nous vous recommandons de le configurer. Pour plus d'informations, consultez la section Configuration rapide avec aws configure dans le Guide de AWS Command Line Interface l'utilisateur.

  • kubectl— Un outil de ligne de commande avec lequel travailler Kubernetes clusters. Ce guide est compatible avec la version 1.23 ou une version ultérieure. Pour plus d'informations, consultez la section Installation ou mise à jour kubectl dans le guide de EKS l'utilisateur Amazon.

  • eksctl— Un outil de ligne de commande conçu pour fonctionner avec les EKS clusters Amazon et qui automatise de nombreuses tâches individuelles. Ce guide est compatible avec la version 0.115.0 ou une version ultérieure. Pour plus d'informations, consultez la section Installation ou mise à jour eksctl dans le guide de EKS l'utilisateur Amazon.

  • Autorisations requises AWS Identity and Access Management (IAM) — Le principal de IAM sécurité que vous utilisez doit disposer des autorisations nécessaires pour utiliser les EKS IAM rôles Amazon et les rôles liés à un service AWS CloudFormation, ainsi qu'avec VPC les ressources associées. Pour plus d'informations, consultez les sections Actions, ressources et clés de condition pour Amazon Elastic Kubernetes Service et Utilisation de rôles liés à un service dans le guide de l'utilisateur. IAM Vous devez effectuer toutes les étapes de ce guide avec le même utilisateur.

  • Création d'un EKS cluster Amazon — Pour plus d'informations, consultez Getting started with Amazon EKS — eksctl dans le guide de EKS l'utilisateur Amazon.

    Note

    AWS Batch ne fournit pas d'orchestration de nœuds gérés pour Core DNS ou d'autres pods de déploiement. Si vous avez besoin de CoreDNS, consultez la section Ajout du EKS module complémentaire DNS Amazon Core dans le guide de EKS l'utilisateur Amazon. Ou, eksctl create cluster create pour créer le cluster, il inclut Core DNS par défaut.

  • Autorisations : les utilisateurs qui appellent l'CreateComputeEnvironmentAPIopération pour créer un environnement informatique utilisant les EKS ressources Amazon ont besoin d'autorisations pour effectuer l'eks:DescribeClusterAPIopération. L'utilisation de AWS Management Console pour créer une ressource de calcul à l'aide EKS des ressources Amazon nécessite des autorisations à la fois pour eks:DescribeCluster eteks:ListClusters.

  • Créez un EKS cluster privé dans la région us-east-1 à l'aide de l'exemple de fichier de configuration. eksctl

    kind: ClusterConfig apiVersion: eksctl.io/v1alpha5 availabilityZones: - us-east-1a - us-east-1b - us-east-1d managedNodeGroups: privateNetworking: true privateCluster: enabled: true skipEndpointCreation: false

    Créez vos ressources à l'aide de la commande : eksctl create cluster -f clusterConfig.yaml

  • Les nœuds gérés par lots doivent être déployés sur des sous-réseaux dotés des points de terminaison VPC d'interface dont vous avez besoin. Pour plus d'informations, consultez la section Exigences relatives aux clusters privés.

Préparez votre EKS cluster pour AWS Batch

Toutes les étapes sont obligatoires.

  1. Créez 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. Activer l'accès via un contrôle d'accès basé sur les rôles () RBAC

    kubectlÀ utiliser pour créer un Kubernetes rôle du cluster pour permettre de AWS Batch surveiller les nœuds et les pods, et pour lier le rôle. Vous devez effectuer cette opération une fois pour chaque EKS cluster Amazon.

    Note

    Pour plus d'informations sur l'utilisation de l'RBACautorisation, consultez la section Utilisation de RBAC l'autorisation dans le Kubernetes documentation.

    $ 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: ["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

    Créer un espace de noms délimité Kubernetes rôle permettant de AWS Batch gérer, de prolonger le cycle de vie des pods et de 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

    Mettre à jour Kubernetes aws-authcarte de configuration pour associer les RBAC autorisations précédentes au rôle lié au AWS Batch service.

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

    Sortie :

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

    Le chemin aws-service-role/batch.amazonaws.com/ a été supprimé 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 ARN dans leur aws-authconfigmap.

Création d'un environnement EKS informatique Amazon

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 (Kubernetes nœuds) au sein de votre EKS cluster Amazon. 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 AWSServiceRoleForBatchle rôle lié à un service a accès à votre EKS cluster Amazon, vous pouvez créer des AWS Batch ressources. Créez d'abord un environnement informatique qui pointe vers votre EKS cluster Amazon.

$ cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:<region>:123456789012:cluster/<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-the-image-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
  • Le serviceRole paramètre ne doit pas être spécifié, le rôle AWS Batch lié au service sera alors utilisé. AWS Batch sur Amazon prend EKS uniquement en charge le rôle AWS Batch lié au service.

  • Seules BEST_FIT_PROGRESSIVESPOT_CAPACITY_OPTIMIZED, et les stratégies SPOT_PRICE_CAPACITY_OPTIMIZED d'allocation sont prises en charge pour les environnements EKS informatiques Amazon.

    Note

    Nous vous recommandons d'utiliser SPOT_PRICE_CAPACITY_OPTIMIZED plutôt que SPOT_CAPACITY_OPTIMIZED n dans la plupart des cas.

  • Pour ce faireinstanceRole, consultez les sections Création du IAM rôle de EKS nœud Amazon et Activation de l'accès IAM principal à votre cluster dans le guide de EKS l'utilisateur Amazon. Si vous utilisez le réseau de modules, consultez Configuration du VPC CNI plug-in Amazon pour Kubernetes pour utiliser IAM des rôles pour les comptes de service dans le guide de EKS l'utilisateur Amazon.

  • Un moyen d'obtenir des sous-réseaux fonctionnels pour le subnets paramètre consiste à utiliser les sous-réseaux publics des groupes de nœuds EKS gérés par Amazon qui ont été créés eksctl lors de la création d'un cluster AmazonEKS. Sinon, utilisez des sous-réseaux dotés d'un chemin réseau permettant d'extraire des images.

  • Le securityGroupIds paramètre peut utiliser le même groupe de sécurité que le EKS cluster Amazon. Cette commande récupère l'ID du groupe de sécurité pour le cluster.

    $ eks describe-cluster \ --name <cluster-name> \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • La maintenance d'un environnement EKS informatique Amazon est une responsabilité partagée. Pour plus d'informations, consultez la section Sécurité sur Amazon EKS.

Important

Il est important de vérifier que l'environnement informatique est sain avant de continuer. L'DescribeComputeEnvironmentsAPIopération peut être utilisée pour cela.

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

Créez une file d'attente de tâches et associez l'environnement de calcul

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

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 EKS cluster Amazon 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

Créer une définition de tâche

Dans le champ image de la définition du travail, au lieu de fournir un lien vers une image dans un ECR référentiel public, fournissez le lien vers l'image stockée dans notre ECR référentiel privé. Consultez l'exemple de définition de tâche suivant :

$ cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "account-id.dkr.ecr.region.amazonaws.com/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

Pour exécuter les commandes kubectl, vous devez disposer d'un accès privé à votre cluster AmazonEKS. Cela signifie que tout le trafic vers votre API serveur de cluster doit provenir du réseau de votre cluster VPC ou d'un réseau connecté.

Envoi d’une tâche

$ aws batch submit-job - -job-queue My-Eks-JQ1 \ - -job-definition MyJobOnEks_Sleep - -job-name My-Eks-Job1 $ aws batch describe-jobs - -job <jobId-from-submit-response>
Remarques

(Facultatif) Soumettez une tâche avec des dérogations

Cette tâche remplace la commande transmise au conteneur.

$ 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

Résolution des problèmes

Si les nœuds lancés par AWS Batch n'ont pas accès au ECR référentiel Amazon (ou à tout autre référentiel) qui stocke votre image, vos tâches peuvent rester dans STARTING cet état. Cela est dû au fait que le module ne pourra pas télécharger l'image et exécuter votre AWS Batch tâche. Si vous cliquez sur le nom du pod lancé par, AWS Batch vous devriez pouvoir voir le message d'erreur et confirmer le problème. Le message d'erreur doit ressembler à ce qui suit :

Failed to pull image "public.ecr.aws/amazonlinux/amazonlinux:2": rpc error: code = Unknown desc = failed to pull and unpack image "public.ecr.aws/amazonlinux/amazonlinux:2": failed to resolve reference "public.ecr.aws/amazonlinux/amazonlinux:2": failed to do request: Head "https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/2": dial tcp: i/o timeout

Pour d'autres scénarios de dépannage courants, consultez la section Résolution des problèmes AWS Batch. Pour résoudre les problèmes liés à l'état du pod, consultez Comment résoudre les problèmes liés à l'état du pod sur Amazon ? EKS .