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à.
Guida introduttiva ad AWS Batch Amazon EKS Private Clusters
AWS Batch è un servizio gestito che orchestra carichi di lavoro in batch nei cluster Amazon Elastic Kubernetes Service (Amazon EKS). Ciò include l'accodamento, il monitoraggio delle dipendenze, la gestione delle priorità e dei nuovi tentativi di lavoro, la gestione dei pod e il ridimensionamento dei nodi. Questa funzionalità collega il tuo cluster privato esistente di Amazon EKS AWS Batch per eseguire i tuoi lavori su larga scala. Puoi utilizzare eksctl
I cluster solo privati di Amazon EKS non dispongono di accesso a Internet in entrata/uscita e dispongono solo di sottoreti private. Gli endpoint Amazon VPC vengono utilizzati per consentire l'accesso privato ad altri servizi. AWS
eksctl
supporta la creazione di cluster completamente privati utilizzando un Amazon VPC e sottoreti preesistenti.
crea inoltre endpoint Amazon VPC nell'Amazon VPC fornito e modifica le tabelle di routing per le sottoreti fornite.eksctl
A ogni sottorete deve essere associata una tabella di routing esplicita, poiché
non modifica la tabella di routing principale. Il tuo clustereksctl
Facoltativamente, puoi creare una regola pull through cache con Amazon ECR. Una volta creata una regola pull through cache per un registro pubblico esterno, puoi estrarre un'immagine da quel registro pubblico esterno utilizzando il tuo URI (uriform resource idetifier) del registro privato Amazon ECR. Quindi Amazon ECR crea un repository e memorizza l'immagine nella cache. Quando un'immagine memorizzata nella cache viene estratta utilizzando l'URI del registro privato Amazon ECR, Amazon ECR controlla il registro remoto per verificare se esiste una nuova versione dell'immagine e aggiorna il registro privato fino a una volta ogni 24 ore.
Indice
- Prerequisiti
- Fase 1: Preparazione del cluster EKS per AWS Batch
- Fase 2: creazione di un ambiente di calcolo Amazon EKS
- Fase 3: Creare una coda di lavoro e collegare l'ambiente di calcolo
- Fase 4: Creare una definizione di lavoro
- Fase 5: Inviare un lavoro
- (Facoltativo) Invia un lavoro con eccezioni
- Risoluzione dei problemi
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. È inoltre necessario creare tutte le risorse necessarie tra cui VPC, sottoreti, tabelle di routing, endpoint VPC e cluster Amazon EKS. È necessario utilizzare il. AWS CLI
-
AWS CLI— Uno strumento da riga di comando per lavorare con AWS i servizi, incluso 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 di nella Guida per l' AWS CLIutente.AWS Command Line Interface
Dopo aver installato AWS CLI, si consiglia di configurarlo. Per ulteriori informazioni, vedere Configurazione rapida con
aws configure
nella Guida AWS Command Line Interface per l'utente. -
kubectl
— Uno strumento da riga di comando per lavorare con Kubernetes i cluster. Questa guida richiede l'utilizzo della versione1.23
o successiva. Per ulteriori informazioni, consulta la pagina Installing or updatingkubectl
nella Guida per l'utente di Amazon EKS. -
— Uno strumento da riga di comando per lavorare con i cluster Amazon EKS che automatizza molte attività individuali. Questa guida richiede l'utilizzo della versioneeksctl
0.115.0
o successiva. Per ulteriori informazioni, consulta la pagina Installing or updating
nella Guida per l'utente di Amazon EKS.eksctl
-
Autorizzazioni richieste AWS Identity and Access Management (IAM): il responsabile della sicurezza IAM che stai utilizzando deve disporre delle autorizzazioni per lavorare con i ruoli IAM di Amazon EKS e i ruoli collegati ai servizi AWS CloudFormation, oltre a un VPC e risorse correlate. Per ulteriori informazioni, consulta Azioni, risorse e chiavi di condizione per Amazon Elastic Kubernetes Service e Using service-linked roles nella IAM User Guide. È necessario che tutti i passaggi di questa guida siano completati dallo stesso utente.
-
Creazione di un cluster Amazon EKS — Per ulteriori informazioni, consulta la sezione Guida introduttiva ad Amazon EKS
eksctl
nella Guida per l'utente di Amazon EKS.Nota
AWS Batch non fornisce l'orchestrazione dei nodi gestiti per CoredNS o altri pod di distribuzione. Se hai bisogno di CoreDNS, consulta Aggiungere il componente aggiuntivo CoreDNS Amazon EKS nella Guida per l'utente di Amazon EKS. Oppure, usa
eksctl create cluster create
per creare il cluster, include CoredNS per impostazione predefinita. -
Autorizzazioni: gli utenti che chiamano l'operazione CreateComputeEnvironmentAPI per creare un ambiente di calcolo che utilizza risorse Amazon EKS richiedono le autorizzazioni per il funzionamento dell'
eks:DescribeCluster
API. L'utilizzo AWS Management Console di per creare una risorsa di calcolo utilizzando le risorse Amazon EKS richiede le autorizzazioni per entrambieks:DescribeCluster
e.eks:ListClusters
-
Crea un cluster EKS privato nella regione us-east-1 utilizzando il file di configurazione di esempio.
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
Crea le tue risorse usando il comando:
eksctl create cluster -f clusterConfig.yaml
-
I nodi gestiti in batch devono essere distribuiti su sottoreti che dispongono degli endpoint di interfaccia VPC richiesti. Per ulteriori informazioni, consulta Requisiti del cluster privato.
Fase 1: Preparazione del cluster EKS per AWS Batch
Tutti i passaggi sono obbligatori.
-
Crea un namespace dedicato per i lavori AWS Batch
Utilizzare
kubectl
per creare un nuovo spazio dei nomi.$
namespace=
my-aws-batch-namespace
$
cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOF
Output:
namespace/my-aws-batch-namespace created
-
Abilita l'accesso tramite il controllo degli accessi basato sui ruoli (RBAC)
kubectl
Utilizzalo per creare un Kubernetes ruolo per il cluster che AWS Batch consenta di controllare nodi e pod e di associare il ruolo. È necessario eseguire questa operazione una volta per ogni cluster Amazon EKS.Nota
Per ulteriori informazioni sull'utilizzo dell'autorizzazione RBAC, consulta Using RBAC Authorization
nella documentazione. Kubernetes $
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 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 namespace per AWS Batch la gestione e il ciclo 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-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 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-auth
di configurazione per mappare le autorizzazioni RBAC precedenti al ruolo collegato al servizio. AWS Batch$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Output:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::
<your-account>
: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-auth
mappa di configurazione. Per ulteriori informazioni, consulta Ruoli con percorsi non funzionano quando il percorso è incluso nel relativo ARN in. aws-auth configmap
Fase 2: creazione di 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 istanze delle risorse di calcolo (Kubernetesnodi) all'interno del tuo cluster Amazon EKS. Si basa sulla specifica delle risorse di calcolo che definisci al momento della creazione dell'ambiente di calcolo. Puoi utilizzare le istanze EC2 On-Demand o le istanze Spot EC2.
Ora che il ruolo AWSServiceRoleForBatchcollegato al servizio ha accesso al tuo cluster Amazon EKS, puoi creare AWS Batch risorse. Innanzitutto, crea un ambiente di elaborazione che punti al tuo 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
Note
-
Il
serviceRole
parametro non deve essere specificato, quindi verrà utilizzato il ruolo AWS Batch collegato al servizio. AWS Batch su Amazon EKS supporta solo il ruolo AWS Batch collegato al servizio. -
Le strategie di
SPOT_PRICE_CAPACITY_OPTIMIZED
allocazione sono supportate soloBEST_FIT_PROGRESSIVE
per gli ambienti di calcolo Amazon EKS.SPOT_CAPACITY_OPTIMIZED
Nota
Ti consigliamo di utilizzare
SPOT_PRICE_CAPACITY_OPTIMIZED
anzichéSPOT_CAPACITY_OPTIMIZED
n nella maggior parte dei casi. -
Per la
instanceRole
, consulta Creazione del ruolo IAM del nodo Amazon EKS e Abilitazione dell'accesso principale IAM al cluster nella Guida per l'utente di Amazon EKS. Se utilizzi il pod networking, 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. -
Un modo per ottenere sottoreti funzionanti per il
subnets
parametro consiste nell'utilizzare le sottoreti pubbliche dei gruppi di nodi gestiti di Amazon EKS create durante laeksctl
creazione di un cluster Amazon EKS. Altrimenti, utilizza sottoreti con un percorso di rete che supporta l'estrazione di immagini. -
Il
securityGroupIds
parametro può utilizzare lo stesso gruppo di sicurezza del cluster Amazon EKS. Questo comando recupera l'ID del gruppo di sicurezza per il cluster.$
eks describe-cluster \ --name
<cluster-name>
\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
La manutenzione di un ambiente di calcolo Amazon EKS è una responsabilità condivisa. Per ulteriori informazioni, consulta la sezione Sicurezza in Amazon EKS.
Importante
È importante confermare che l'ambiente di elaborazione sia integro prima di procedere. A tale scopo è possibile utilizzare l'operazione DescribeComputeEnvironmentsAPI.
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
Conferma che il status
parametro non lo siaINVALID
. Se lo è, esamina il statusReason
parametro relativo alla causa. Per ulteriori informazioni, consulta Risoluzione dei problemi AWS Batch.
Fase 3: Creare una coda di lavoro e collegare l'ambiente di calcolo
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
I lavori inviati a questa nuova coda di lavoro vengono eseguiti come pod su nodi AWS Batch gestiti che si sono uniti al cluster Amazon EKS associato al tuo ambiente di elaborazione.
$
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 4: Creare una definizione di lavoro
Nel campo immagine della definizione del lavoro, invece di fornire un collegamento all'immagine in un archivio ECR pubblico, inserisci il link all'immagine archiviata nel nostro archivio ECR privato. Vedi il seguente esempio di definizione del lavoro:
$
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
Per eseguire i comandi kubectl, è necessario l'accesso privato al cluster Amazon EKS. Ciò significa che tutto il traffico verso il server API del cluster deve provenire dal VPC del cluster o da una rete connessa.
Fase 5: Inviare un lavoro
$
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>
Note
-
Sono supportati solo i lavori in un singolo contenitore.
-
Assicurati di conoscere tutte le considerazioni pertinenti relative ai
memory
parametricpu
and. Per ulteriori informazioni, consulta Considerazioni su AWS Batch memoria e vCPU per Amazon EKS. -
Per ulteriori informazioni sull'esecuzione di processi sulle risorse di Amazon EKS, consultaOfferte di EKS lavoro su Amazon.
(Facoltativo) Invia un lavoro con eccezioni
Questo lavoro sostituisce il comando passato al contenitore.
$
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
-
AWS Batch pulisce in modo aggressivo i pod 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.
-
Per una migliore visibilità dei 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 sul posizionamento lavorativo. Per ulteriori informazioni, consulta Considerazioni su AWS Batch memoria e vCPU per Amazon EKS.
Risoluzione dei problemi
Se i nodi avviati da AWS Batch non hanno accesso al repository Amazon ECR (o a qualsiasi altro repository) che memorizza l'immagine, i lavori potrebbero rimanere nello stato STARTING. Questo perché il pod non sarà in grado di scaricare l'immagine ed eseguire il processo. AWS Batch Se fai clic sul nome del pod lanciato da, AWS Batch dovresti essere in grado di vedere il messaggio di errore e confermare il problema. Il messaggio di errore dovrebbe essere simile al seguente:
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
Per altri scenari di risoluzione dei problemi comuni, consulta Risoluzione dei problemi AWS Batch. Per la risoluzione dei problemi in base allo stato del pod, consulta Come posso risolvere lo stato del pod in