Guida introduttiva ad AWS Batch Amazon EKS Private Clusters - AWS Batch

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(un'interfaccia a riga di comando per Amazon EKS), la AWS console o AWS Command Line Interfacecreare un cluster Amazon EKS privato con tutte le altre risorse necessarie. Il supporto per i cluster Amazon EKS privati su AWS Batch è generalmente disponibile in ambito commerciale, Regioni AWS laddove AWS Batch disponibile.

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 eksctlsupporta la creazione di cluster completamente privati utilizzando un Amazon VPC e sottoreti preesistenti. eksctlcrea inoltre endpoint Amazon VPC nell'Amazon VPC fornito e modifica le tabelle di routing per le sottoreti fornite.

A ogni sottorete deve essere associata una tabella di routing esplicita, poiché eksctl non modifica la tabella di routing principale. Il tuo cluster deve estrarre immagini da un registro di container che si trova nel tuo Amazon VPC. Inoltre, puoi creare un Amazon Elastic Container Registry nel tuo Amazon VPC e copiarvi le immagini dei container per i nodi da cui estrarre. Per ulteriori informazioni, consulta Copiare l'immagine di un contenitore da un repository a un altro. Per iniziare a usare gli archivi privati di Amazon ECR, consulta la sezione Archivi privati di Amazon ECR.

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.

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 versione 1.23 o successiva. Per ulteriori informazioni, consulta la pagina Installing or updating kubectl nella Guida per l'utente di Amazon EKS.

  • eksctl— Uno strumento da riga di comando per lavorare con i cluster Amazon EKS che automatizza molte attività individuali. Questa guida richiede l'utilizzo della versione 0.115.0 o successiva. Per ulteriori informazioni, consulta la pagina Installing or updating eksctl nella Guida per l'utente di Amazon EKS.

  • 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:DescribeClusterAPI. L'utilizzo AWS Management Console di per creare una risorsa di calcolo utilizzando le risorse Amazon EKS richiede le autorizzazioni per entrambi eks: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.

  1. 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
  2. Abilita l'accesso tramite il controllo degli accessi basato sui ruoli (RBAC)

    kubectlUtilizzalo 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 EOF

    Output:

    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 EOF

    Output:

    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" \ --username aws-batch

    Output:

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

    Il percorso aws-service-role/batch.amazonaws.com/ è stato rimosso dall'ARN del ruolo collegato al servizio. Ciò è dovuto a un problema con la aws-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 solo BEST_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 lainstanceRole, 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 la eksctl 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-definition MyJobOnEks_Sleep - -job-name My-Eks-Job1 $ aws batch describe-jobs - -job <jobId-from-submit-response>
Note

(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

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 Amazon EKS? .