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
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. 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 VPC points de terminaison Amazon dans l'Amazon fourni VPC 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 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.
Table des matières
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 version1.23
ou une version ultérieure. Pour plus d'informations, consultez la section Installation ou mise à jourkubectl
dans le guide de EKS l'utilisateur Amazon. -
— 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 versioneksctl
0.115.0
ou une version ultérieure. Pour plus d'informations, consultez la section Installation ou mise à jour
dans le guide de EKS l'utilisateur Amazon.eksctl
-
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:DescribeCluster
APIopé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 poureks: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.
-
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
-
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 EOFSortie :
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 EOFSortie :
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-auth
carte 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" \ --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é 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 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_PROGRESSIVE
SPOT_CAPACITY_OPTIMIZED
, et les stratégiesSPOT_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 queSPOT_CAPACITY_OPTIMIZED
n dans la plupart des cas. -
Pour ce faire
instanceRole
, 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ééseksctl
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-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 de plus amples informations, veuillez consulter CPUConsidérations relatives à la mémoire et à la AWS Batch virtualisation sur Amazon EKS. -
Pour plus d'informations sur l'exécution de tâches sur EKS les ressources Amazon, 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 de plus amples informations, veuillez consulter Utilisez CloudWatch les journaux pour surveiller les offres d'EKSemploi AWS Batch sur Amazon.
-
Pour une meilleure visibilité des détails des opérations, activez la journalisation du plan EKS de contrôle Amazon. Pour plus d'informations, consultez la section relative à la connexion au plan de EKS contrôle Amazon dans le guide de EKS l'utilisateur Amazon.
-
Daemonsets and kubelets la surcharge affecte les ressources de mémoire CPU et de mémoire disponibles, en particulier le dimensionnement et le placement des tâches. Pour de plus amples informations, veuillez consulter CPUConsidérations relatives à la mémoire et à la AWS Batch virtualisation sur Amazon EKS.
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