Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Nozioni di base su AWS Batch su Amazon EKS
AWS Batch su Amazon EKS è un servizio gestito per la pianificazione e la scalabilità dei carichi di lavoro in batch in cluster Amazon EKS esistenti. AWS Batch non crea, amministra o esegue operazioni sul ciclo di vita dei tuoi cluster Amazon EKS per tuo conto. AWS Batch l'orchestrazione aumenta e riduce i nodi gestiti ed esegue i pod su tali nodi. AWS Batch
AWS Batch non tocca i nodi, i gruppi di nodi con scalabilità automatica o i cicli di vita dei pod che non sono associati agli ambienti di elaborazione all'interno del cluster Amazon EKS. AWS Batch AWS Batch Per funzionare in modo efficace, il suo ruolo collegato ai servizi necessita di autorizzazioni di controllo degli accessi (KubernetesRBAC) basate sui ruoli nel cluster Amazon EKS esistente. Per ulteriori informazioni, consulta Using RBAC Authorization nella documentazione.
AWS Batch richiede un Kubernetes namespace in cui possa definire i pod come job. AWS Batch Consigliamo un namespace dedicato per isolare i AWS Batch pod dagli altri carichi di lavoro del cluster.
Dopo AWS Batch aver ottenuto l'accesso RBAC e stabilito uno spazio dei nomi, puoi associare quel cluster Amazon EKS a un ambiente di calcolo utilizzando l'operazione API. AWS Batch CreateComputeEnvironment Una coda di lavoro può essere associata a questo nuovo ambiente di calcolo Amazon EKS. AWS Batch i lavori vengono inviati alla coda dei lavori in base a una definizione di lavoro di Amazon EKS utilizzando l'operazione API. SubmitJob AWS Batch quindi avvia i nodi AWS Batch gestiti e colloca i lavori dalla coda di lavoro come Kubernetes pod nel cluster EKS associato a un ambiente di calcolo. AWS Batch
Le seguenti sezioni spiegano come effettuare la configurazione su Amazon EKS. AWS Batch
Panoramica di
Questo tutorial dimostra come effettuare la configurazione AWS Batch con Amazon EKS utilizzando i tasti AWS CLI, kubectl eeksctl.
- Destinatari
-
Questo tutorial è progettato per gli amministratori di sistema e gli sviluppatori responsabili della configurazione, del test e della distribuzione AWS Batch.
- Funzionalità utilizzate
-
Questo tutorial mostra come usare AWS CLI, per:
-
Creare e configurare un ambiente di calcolo Amazon EKS
-
Crea una coda di lavoro.
-
Creazione di una definizione di processo
-
Crea e invia un lavoro da eseguire
-
Invia un lavoro con sostituzioni
-
- Tempo richiesto
-
Dovrebbero essere necessari circa 30-40 minuti per completare questo tutorial.
- Restrizioni regionali
-
Non ci sono restrizioni nazionali o regionali associate all'utilizzo di questa soluzione.
- Costi di utilizzo delle risorse
-
La creazione di un AWS account è gratuita. Tuttavia, l'implementazione di questa soluzione potrebbe comportare l'addebito di alcuni o tutti i costi elencati nella seguente tabella.
Description Costo (dollari USA) L'addebito viene calcolato in base all'ora del cluster Varia in base all'istanza, consulta i prezzi di Amazon EKS
Prerequisiti
Prima di iniziare questo tutorial, devi installare e configurare i seguenti strumenti e risorse necessari per creare e gestire sia AWS Batch le risorse Amazon EKS che quelle di Amazon EKS.
-
AWS CLI: uno strumento a riga di comando per usare i servizi AWS , tra cui Amazon EKS. Questa guida richiede l'utilizzo della versione 2.8.6 o successiva o 1.26.0 o successiva. Per ulteriori informazioni, vedere Installazione, aggiornamento e disinstallazione nella AWS CLI Guida per l'utente. AWS Command Line Interface Dopo aver installato AWS CLI, ti consigliamo di configurarlo anche tu. Per ulteriori informazioni, vedere Configurazione rapida con
aws configurenella Guida AWS Command Line Interface per l'utente. -
kubectl: uno strumento a riga di comando per lavorare con i cluster Kubernetes. Questa guida richiede l'utilizzo della versione1.23o successiva. Per ulteriori informazioni, consulta la pagina Installing or updatingkubectlnella Guida per l'utente di Amazon EKS. -
— Uno strumento a riga di comando per lavorare con i cluster Amazon EKS che automatizza molte attività individuali. Questa guida richiede l'utilizzo della versioneeksctl0.115.0o successiva. Per ulteriori informazioni, consulta la pagina Installing or updatingnella Guida per l'utente di Amazon EKS.eksctl -
Autorizzazioni IAM richieste: il principio di sicurezza IAM che stai utilizzando deve disporre delle autorizzazioni per funzionare con i ruoli IAM di Amazon EKS e i ruoli collegati ai servizi CloudFormation, nonché un VPC e le risorse correlate. Per ulteriori informazioni, consulta Azioni, risorse e chiavi di condizione per Amazon Elastic Kubernetes Service e Utilizzo dei ruoli collegati ai servizi nella IAM User Guide. È necessario che tutti i passaggi di questa guida siano completati dallo stesso utente.
-
Autorizzazioni: gli utenti che chiamano l'operazione CreateComputeEnvironment API per creare un ambiente di calcolo che utilizza risorse Amazon EKS richiedono le autorizzazioni per il funzionamento dell'API.
eks:DescribeCluster -
Account AWS numero: devi conoscere il tuo ID. Account AWS Segui le istruzioni in Visualizzazione del tuo Account AWS ID.
(Facoltativo) CloudWatch: per esaminare i dettagli di (Facoltativo) Invia un lavoro con sostituzioni, è necessario configurare la registrazione. Per ulteriori informazioni, consulta Usa CloudWatch Logs per monitorare i lavori AWS Batch su Amazon EKS.
Passaggio 1: crea il tuo cluster Amazon EKS per AWS Batch
Importante
Per iniziare nel modo più semplice e veloce possibile, questo tutorial include passaggi con impostazioni predefinite. Prima di creare per l'uso in produzione, ti consigliamo di acquisire familiarità con tutte le impostazioni e di implementarle con le impostazioni che soddisfano i tuoi requisiti.
Una volta installati i prerequisiti, è necessario creare il cluster utilizzando. eksctl La creazione del cluster può richiedere tra 10-15 minuti.
$eksctl create cluster --namemy-cluster-name--regionregion-code
Nel comando precedente sostituisci:
-
Sostituisci
my-cluster-namecon il nome che vuoi usare per il tuo cluster. -
Sostituiscilo
region-codecon Regione AWS il nome in cui creare il cluster, ad esempious-west-2.
Il nome e la regione del cluster sono necessari più avanti in questo tutorial.
Fase 2: Prepara il tuo cluster Amazon EKS per AWS Batch
Tutti i passaggi sono obbligatori.
-
Crea un namespace dedicato per AWS Batch jobs
kubectlUsalo per creare un nuovo namespace.$namespace=my-aws-batch-namespace$cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOFOutput:
namespace/my-aws-batch-namespace created -
Abilita l'accesso tramite il controllo degli accessi basato sui ruoli (RBAC)
Usalo
kubectlper creare un Kubernetes ruolo per il cluster per consentire di AWS Batch controllare nodi e pod e di associare il ruolo. È necessario eseguire questa operazione una volta per ogni cluster EKS.$cat - <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name:aws-batch-cluster-rolerules: - 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-bindingsubjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name:aws-batch-cluster-roleapiGroup: rbac.authorization.k8s.io EOFOutput:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created -
Crea un Kubernetes ruolo con ambito di namespace per la gestione e il ciclo AWS Batch di vita dei pod e associalo. È necessario eseguire questa operazione una volta per ogni namespace univoco.
$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-rolenamespace: ${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-bindingnamespace: ${namespace} subjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: Role name:aws-batch-compute-environment-roleapiGroup: rbac.authorization.k8s.io EOFOutput:
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created -
Aggiorna la mappa Kubernetes
aws-authdi configurazione per mappare le autorizzazioni RBAC precedenti al ruolo collegato al servizio. AWS BatchNel seguente comando sostituisci:
-
Sostituisci
<your-account-number>con il tuo Account AWS numero.
$eksctl create iamidentitymapping \ --clustermy-cluster-name\ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --usernameaws-batchOutput:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMapNota
Il percorso
aws-service-role/batch.amazonaws.com/è stato rimosso dall'ARN del ruolo collegato al servizio. Ciò è dovuto a un problema con laaws-authmappa di configurazione. Per ulteriori informazioni, consulta Ruoli con percorsi non funzionano quando il percorso è incluso nel relativo ARN in. aws-authconfigmapImportante
Una volta creata una voce di accesso AWS Batch gestito per il ruolo AWS Batch collegato al servizio sul cluster (
accessEntry.status=ACTIVE), ha la precedenza sulla configurazione delaws-authConfigMap ruolo. Le ConfigMap voci per il ruolo AWS Batch collegato al servizio non sono utilizzate e AWS Batch vengono autenticate utilizzando invece la voce di accesso. Per ulteriori informazioni sulle voci di accesso, consulta la sezione Autenticazione degli accessi ad Amazon EKS. -
Passaggio 3: creare un ambiente di calcolo Amazon EKS
AWS Batch gli ambienti di calcolo definiscono i parametri delle risorse di calcolo per soddisfare le esigenze di carico di lavoro in batch. In un ambiente di elaborazione gestito, ti AWS Batch aiuta a gestire la capacità e i tipi di istanza delle risorse di calcolo (Kubernetesnodi) all'interno del tuo cluster Amazon EKS. Ciò si basa sulle specifiche delle risorse di calcolo definite al momento della creazione dell'ambiente di elaborazione. È possibile utilizzare le istanze EC2 o On-Demand le istanze Spot EC2.
Ora che il ruolo AWSServiceRoleForBatch collegato al servizio ha accesso al tuo cluster Amazon EKS, puoi creare risorse. AWS Batch Innanzitutto, crea un ambiente di calcolo che punti al tuo cluster Amazon EKS.
-
subnetsEsegui pereksctl get clusterottenere le sottoreti utilizzate dal cluster.my-cluster-name -
Come
securityGroupIdsparametro puoi utilizzare lo stesso gruppo di sicurezza del cluster Amazon EKS. Questo comando recupera l'ID del gruppo di sicurezza per il cluster.$aws eks describe-cluster \ --namemy-cluster-name\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
instanceRoleViene creato quando si crea il cluster. Per trovare l'instanceRoleelenco di tutte le entità che utilizzano laAmazonEKSWorkerNodePolicypolicy:$aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicyIl nome del ruolo della policy contiene il nome del cluster che hai creato
eksctl-.my-cluster-name-nodegroup-examplePer trovare l'
instanceRolearn esegui il comando seguente:$aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-exampleOutput:
INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12examplePer ulteriori informazioni, consulta Creating the Amazon EKS node IAM role e Enabling IAM principal access to your cluster nella Amazon EKS User Guide. Se utilizzi una rete pod, consulta Configurazione del plug-in Amazon VPC CNI per l'utilizzo dei ruoli IAM Kubernetes per gli account di servizio nella Amazon EKS User Guide.
$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
Note
-
La manutenzione di un ambiente di calcolo Amazon EKS è una responsabilità condivisa. Per ulteriori informazioni, consulta Responsabilità condivisa di Kubernetes nodi.
Fase 4: Creare una coda di lavoro e collegare l'ambiente di elaborazione
Importante
È importante confermare che l'ambiente di elaborazione sia integro prima di procedere. L'operazione DescribeComputeEnvironments API può essere utilizzata a tale scopo.
$aws batch describe-compute-environments --compute-environmentsMy-Eks-CE1
Conferma che il status parametro non lo èINVALID. Se lo è, guarda il statusReason parametro relativo alla causa. Per ulteriori informazioni, consulta Risoluzione dei problemi AWS Batch.
I lavori inviati a questa nuova coda di lavoro vengono eseguiti come pod su nodi AWS Batch gestiti che si uniscono al cluster Amazon EKS associato al tuo ambiente di calcolo.
$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
Fase 5: Creare una definizione di lavoro
La seguente definizione di job indica al pod di dormire per 60 secondi.
$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
Note
-
Ci sono delle considerazioni relative ai parametri e.
cpumemoryPer ulteriori informazioni, consulta Considerazioni sulla memoria e sulla vCPU per AWS Batch su Amazon EKS.
Fase 6: Inviare un lavoro
Esegui il seguente AWS CLI comando per inviare un nuovo lavoro.
$aws batch submit-job --job-queueMy-Eks-JQ1\ --job-definitionMyJobOnEks_Sleep--job-nameMy-Eks-Job1
Per verificare lo stato di un Job:
$aws batch describe-jobs --job<jobId-from-submit-response>
Note
-
Per ulteriori informazioni sull'esecuzione di processi sulle risorse Amazon EKS, consultaOfferte di lavoro Amazon EKS.
Fase 7: Visualizzare l'output del lavoro
Per visualizzare l'output del Job, procedi come segue:
-
Apri la AWS Batch console all'indirizzo https://console.aws.amazon.com/batch/
. -
Nel pannello di navigazione, scegli Lavori.
-
Nel menu a discesa Job queue scegli la Job queue che hai creato per il tutorial.
-
La tabella Lavori elenca tutti i tuoi lavori e il loro stato attuale. Una volta completato lo stato del lavoro
My-Eks-JQ1, scegli il nome del lavoro per visualizzarne i dettagli. -
Nel riquadro dei dettagli, l'intervallo tra Iniziato e Interrotto a volte dovrebbe essere distante un minuto.
Fase 8: (Facoltativo) Invia un lavoro con sostituzioni
Questo lavoro sovrascrive il comando passato al contenitore. AWS Batch pulisce in modo aggressivo i contenitori dopo il completamento dei lavori per ridurre il carico a. Kubernetes Per esaminare i dettagli di un lavoro, è necessario configurare la registrazione. Per ulteriori informazioni, consulta Usa CloudWatch Logs per monitorare i lavori AWS Batch su 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
Note
-
Per una migliore visibilità sui dettagli delle operazioni, abilita la registrazione del piano di controllo di Amazon EKS. Per ulteriori informazioni, consulta la registrazione del piano di controllo di Amazon EKS nella Guida per l'utente di Amazon EKS.
-
Daemonsetse il kubelets sovraccarico influisce sulle risorse di vCPU e memoria disponibili, in particolare sulla scalabilità e sull'inserimento lavorativo. Per ulteriori informazioni, consulta Considerazioni sulla memoria e sulla vCPU per AWS Batch su Amazon EKS.
Per visualizzare l'output del Job, effettuate le seguenti operazioni:
-
Apri la AWS Batch console all'indirizzo https://console.aws.amazon.com/batch/
. -
Nel pannello di navigazione, scegli Lavori.
-
Nel menu a discesa Job queue scegli la Job queue che hai creato per il tutorial.
-
La tabella Lavori elenca tutti i tuoi lavori e il loro stato attuale. Una volta completato lo stato del lavoro, scegli il nome del lavoro per visualizzarne i dettagli.
-
Nel riquadro Dettagli, scegli il nome del log stream. La CloudWatch console del Job si aprirà e dovrebbe esserci un evento con il messaggio Message of
hello worldo il tuo messaggio personalizzato.
Passaggio 9: Pulisci le risorse del tutorial
Ti viene addebitato il costo dell'istanza Amazon EC2 mentre è abilitata. Puoi eliminare l'istanza per non incorrere in addebiti.
Per eliminare le risorse che hai creato, procedi come segue:
-
Apri la AWS Batch console all'indirizzo https://console.aws.amazon.com/batch/
. -
Nel pannello di navigazione, scegli Job queue.
-
Nella tabella Job queue scegli la Job queue che hai creato per il tutorial.
-
Scegliere Disabilita. Una volta che lo stato della coda dei lavori è disabilitato, puoi scegliere Elimina.
-
Una volta eliminata la coda dei lavori, nel pannello di navigazione scegli Ambienti di calcolo.
-
Scegli l'ambiente di calcolo che hai creato per questo tutorial, quindi scegli Disabilita. Potrebbero essere necessari 1—2 minuti per completare la disattivazione dell'ambiente di calcolo.
-
Una volta disabilitato lo stato dell'ambiente di calcolo, scegli Elimina. L'eliminazione dell'ambiente di calcolo può richiedere 1—2 minuti.
Risorse aggiuntive
Dopo aver completato il tutorial, potresti voler esplorare i seguenti argomenti:
-
Scopri di più sulle best practice.
-
Esplora i componenti AWS Batch principali. Per ulteriori informazioni, consulta Componenti di AWS Batch.
-
Scopri di più sui diversi ambienti di elaborazione disponibili in AWS Batch.
-
Scopri di più sulle code di lavoro e sulle loro diverse opzioni di pianificazione.
-
Scopri di più sulle definizioni dei job e sulle diverse opzioni di configurazione.
-
Scopri di più sui diversi tipi di lavori.