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 les clusters privés Amazon EKS
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 cluster privé Amazon EKS existant à votre cluster Amazon EKS AWS Batch pour exécuter vos tâches à grande échelle. Vous pouvez utiliser eksctl
Les clusters privés Amazon EKS ne disposent d'aucun accès Internet entrant/sortant et ne disposent que de sous-réseaux privés. Les points de terminaison Amazon VPC sont utilisés pour permettre un accès privé à d'autres services. AWS
eksctl
prend en charge la création de clusters entièrement privés à l'aide d'un Amazon VPC et de sous-réseaux préexistants.
crée également des points de terminaison Amazon VPC dans le VPC Amazon fourni et modifie les tables de routage pour les sous-réseaux fournis.eksctl
Chaque sous-réseau doit être associé à une table de routage explicite, car cela
ne modifie pas la table de routage principale. Votre clustereksctl
Vous pouvez éventuellement créer une règle de cache d'extraction avec Amazon ECR. 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 (URI) du registre privé Amazon ECR. 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 de l'URI du registre privé Amazon ECR, Amazon ECR vérifie le registre distant pour voir s'il existe une nouvelle version de l'image et met à jour votre registre privé jusqu'à une fois toutes les 24 heures.
Table des matières
- Prérequis
- Étape 1 : Préparation de votre cluster EKS pour AWS Batch
- Étape 2 : Création d'un environnement informatique Amazon EKS
- Étape 3 : créer une file d'attente de tâches et associer l'environnement informatique
- Étape 4 : Création d'une définition de tâche
- Étape 5 : Soumettre une offre d'emploi
- (Facultatif) Soumettez une tâche avec des dérogations
- Résolution des problèmes
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. Vous devez également créer toutes les ressources nécessaires, notamment le VPC, les sous-réseaux, les tables de routage, les points de terminaison VPC et le cluster Amazon EKS. Vous devez utiliser le AWS CLI.
-
AWS CLI— Un outil de ligne de commande permettant de travailler avec AWS des services, notamment Amazon EKS. 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 permettant de travailler avec des Kubernetes clusters. Ce guide est compatible avec la version1.23
ou une version ultérieure. Pour plus d'informations, veuillez consulter Installation ou mise à jour dekubectl
dans le Guide de l'utilisateur Amazon EKS. -
— Un outil de ligne de commande conçu pour fonctionner avec les clusters Amazon EKS et qui automatise de nombreuses tâches individuelles. Ce guide est compatible avec la versioneksctl
0.115.0
ou une version ultérieure. Pour plus d'informations, veuillez consulter Installation ou mise à jour de
dans le Guide de l'utilisateur Amazon EKS.eksctl
-
Autorisations requises AWS Identity and Access Management (IAM) : le principal de sécurité IAM que vous utilisez doit être autorisé à utiliser les rôles IAM Amazon EKS et les rôles liés à un service AWS CloudFormation, ainsi qu'un VPC et 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 cluster Amazon EKS — Pour plus d'informations, consultez Getting started with Amazon EKS —
eksctl
dans le guide de l'utilisateur Amazon EKS.Note
AWS Batch ne fournit pas d'orchestration de nœuds gérés pour CoreDNS ou d'autres pods de déploiement. Si vous avez besoin de CoreDNS, consultez la section Ajout du module complémentaire CoreDNS Amazon EKS dans le guide de l'utilisateur Amazon EKS. Ou,
eksctl create cluster create
pour créer le cluster, il inclut CoreDNS par défaut. -
Autorisations : les utilisateurs qui appellent l'opération d'CreateComputeEnvironmentAPI pour créer un environnement informatique utilisant les ressources Amazon EKS ont besoin d'autorisations pour l'opération
eks:DescribeCluster
d'API. L'utilisation de AWS Management Console pour créer une ressource de calcul à l'aide des ressources Amazon EKS nécessite des autorisations à la fois poureks:DescribeCluster
eteks:ListClusters
. -
Créez un cluster EKS 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 d'interface VPC dont vous avez besoin. Pour plus d'informations, consultez la section Exigences relatives aux clusters privés.
Étape 1 : Préparation de votre cluster EKS pour AWS Batch
Toutes les étapes sont obligatoires.
-
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
-
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 Amazon EKS.Note
Pour plus d'informations sur l'utilisation de l'autorisation RBAC, consultez la section Utilisation de l'autorisation RBAC
dans la 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 EOFSortie :
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
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 EOFSortie :
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
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$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Sortie :
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::
<your-account>
:role/AWSServiceRoleForBatch" to auth ConfigMapNote
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 carteaws-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 2 : 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 ponctuelles EC2.
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.
$
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, EKS prend uniquement en charge le AWS Batch rôle lié au service. -
Seules
BEST_FIT_PROGRESSIVE
SPOT_CAPACITY_OPTIMIZED
, et les stratégiesSPOT_PRICE_CAPACITY_OPTIMIZED
d'allocation sont prises en charge pour les environnements informatiques Amazon EKS.Note
Nous vous recommandons d'utiliser
SPOT_PRICE_CAPACITY_OPTIMIZED
plutôt queSPOT_CAPACITY_OPTIMIZED
n dans la plupart des cas. -
Pour ce faire
instanceRole
, 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. -
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 gérés par Amazon EKS qui ont été crééseksctl
lors de la création d'un cluster Amazon EKS. 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 cluster Amazon EKS. 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 informatique Amazon EKS est une responsabilité partagée. Pour plus d'informations, consultez la section Sécurité dans Amazon EKS.
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 plus d’informations, consultez Résolution des problèmes AWS Batch.
Étape 3 : créer une file d'attente de tâches et associer l'environnement informatique
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Les tâches soumises à cette nouvelle file d'attente de tâches 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 4 : Création d'une définition de tâche
Dans le champ image de la définition de tâche, au lieu de fournir un lien vers une image dans un référentiel ECR public, fournissez le lien vers l'image stockée dans notre référentiel ECR 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 des commandes kubectl, vous devez disposer d'un accès privé à votre cluster Amazon EKS. Cela signifie que tout le trafic vers le serveur API de votre cluster doit provenir du VPC de votre cluster ou d'un réseau connecté.
Étape 5 : Soumettre une offre d'emploi
$
aws batch submit-job - -job-queue
My-Eks-JQ1
\ - -job-definitionMyJobOnEks_Sleep
- -job-nameMy-Eks-Job1
$
aws batch describe-jobs - -job
<jobId-from-submit-response>
Remarques
-
Seules les tâches liées à un seul conteneur sont prises en charge.
-
Assurez-vous de connaître toutes les considérations pertinentes relatives aux
memory
paramètrescpu
et. Pour plus d’informations, consultez Considérations relatives à la mémoire et au vCPU pour AWS Batch Amazon EKS. -
Pour plus d'informations sur l'exécution de tâches sur les ressources Amazon EKS, consultezEKSOffres d'emploi Amazon.
(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
-
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 plus d’informations, consultez Utiliser CloudWatch les journaux pour surveiller AWS Batch les tâches Amazon EKS.
-
Pour une meilleure visibilité des détails des opérations, activez la journalisation du plan de contrôle Amazon EKS. Pour plus d'informations, consultez la section Connexion au plan de contrôle Amazon EKS dans le guide de l'utilisateur Amazon EKS.
-
Daemonsetset la kubelets surcharge affecte les ressources de vCPU et de mémoire disponibles, en particulier le dimensionnement et le placement des tâches. Pour plus d’informations, consultez Considérations relatives à la mémoire et au vCPU pour AWS Batch Amazon EKS.
Résolution des problèmes
Si les nœuds lancés par AWS Batch n'ont pas accès au référentiel Amazon ECR (ou à tout autre référentiel) qui stocke votre image, vos tâches peuvent rester à l'état STARTING. 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 résolution des problèmes courants, consultez la section Résolution des problèmes AWS Batch. Pour le dépannage basé sur l'état du pod, consultez Comment résoudre le problème de l'état du pod dans Amazon EKS