Creazione di un gruppo di nodi gestiti - Amazon EKS

Creazione di un gruppo di nodi gestiti

In questo argomento viene descritto come avviare un gruppo di nodi gestiti Amazon EKS di nodi che si registrano con il cluster Amazon EKS. Dopo che i nodi vengono aggiunti al cluster, puoi implementare applicazioni Kubernetes per gli stessi.

Se è la prima volta che avvii un gruppo di nodi gestiti Amazon EKS, è invece consigliabile seguire una delle nostre guide Guida introduttiva ad Amazon EKS. Le guide forniscono procedure dettagliate per la creazione di un cluster Amazon EKS con nodi.

Importante

Prerequisiti

È possibile creare un gruppo di nodi gestiti con eksctl o il AWS Management Console.

eksctl

Creazione di un gruppo di nodi gestito con eksctl

Questa procedura richiede eksctl versione 0.84.0 o versioni successive. Puoi verificare la versione con il seguente comando:

eksctl version

Per ulteriori informazioni sull'installazione o l'aggiornamento di eksctl, consulta Installazione o aggiornamento di eksctl.

  1. (Facoltativo) Se la policy IAM gestita AmazonEKS_CNI_Policy è collegata al Ruolo IAM del nodo Amazon EKS, si consiglia, invece, di assegnarla a un ruolo IAM associato all'account di servizio Kubernetes aws-node. Per ulteriori informazioni, consulta . Configurazione del plug-in CNI di Amazon VPC per l'utilizzo dei ruoli IAM per gli account di servizio.

  2. Creare un gruppo di nodi gestiti con o senza utilizzare un modello di avvio personalizzato. La specifica manuale di un modello di avvio consente una maggiore personalizzazione di un gruppo di nodi. Ad esempio, può consentire l'implementazione di un'AMI personalizzata o la presenza di argomenti sullo script boostrap.sh in un'AMI ottimizzata per Amazon EKS. Per un elenco completo di tutte le opzioni e le impostazioni predefinite disponibili, inserire il comando seguente.

    eksctl create nodegroup --help

    Sostituisci ogni example-value con i valori in tuo possesso.

    Importante

    Se non si utilizza un modello di avvio personalizzato durante la prima creazione di un gruppo di nodi gestiti, non utilizzarne uno per il gruppo di nodi in un secondo momento. Se non hai specificato un modello di avvio personalizzato, il sistema genera automaticamente un modello di avvio che non è consigliabile modificare manualmente. La modifica manuale di questo modello di avvio generato automaticamente potrebbe causare errori.

    • Senza modello di avvioeksctl crea un modello di avvio Amazon EC2 di default nell'account e implementa il gruppo di nodi utilizzando un modello di avvio creato in base alle opzioni specificate. Prima di specificare un valore per --node-type, consultare Scelta di un tipo di istanza Amazon EC2.

      Sostituisci my-key con il nome della coppia di chiavi Amazon EC2 o della chiave pubblica. Questa chiave viene utilizzata per eseguire il SSH nei nodi dopo il loro avvio. Se non hai già una coppia di chiavi Amazon EC2, puoi crearla nella AWS Management Console. Per ulteriori informazioni, consulta la sezione relativa alle coppie di chiavi Amazon EC2 nella Guida per l'utente di Amazon EC2 per le istanze Linux.

      (Facoltativo) Se intendi assegnare ruoli IAM a tutti gli account del servizio Kubernetes in modo che i pod dispongano solo delle autorizzazioni minime necessarie e che nessun pod nel cluster richieda l'accesso ad Amazon EC2 Instance Metadata Service (IMDS) per altri motivi, ad esempio il recupero della Regione AWS corrente, ti consigliamo di bloccare l'accesso dei pod a IMDS. Per ulteriori informazioni, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker). Se si desidera bloccare l'accesso del pod a IMDS, aggiungere l'opzione --disable-pod-imds al seguente comando.

      eksctl create nodegroup \ --cluster my-cluster \ --region region-code \ --name my-mng \ --node-type m5.large \ --nodes 3 \ --nodes-min 2 \ --nodes-max 4 \ --ssh-access \ --ssh-public-key my-key

      Le istanze possono opzionalmente assegnare un numero significativamente superiore di indirizzi IP ai pod, assegnare indirizzi IP ai pod da un blocco CIDR diverso da quello dell'istanza ed essere distribuite in un cluster senza accesso a Internet. Per ulteriori informazioni, consultare Aumentare la quantità di indirizzi IP disponibili per i nodi Amazon EC2, Rete personalizzata CNI, e Cluster privati per ulteriori opzioni da aggiungere al comando precedente.

      In base al tipo di istanza, i gruppi di nodi gestiti calcolano e applicano un singolo valore per il numero massimo di pod che possono essere eseguiti su ogni nodo del gruppo. Se si crea un gruppo di nodi con tipi di istanza diversi, il valore più piccolo calcolato in tutti i tipi di istanza viene applicato come numero massimo di pod che possono essere eseguiti su ogni tipo di istanza nel gruppo di nodi. I gruppi di nodi gestiti calcolano il valore utilizzando lo script a cui si fa riferimento in Per ogni tipo di istanza Amazon EC2, Amazon EKS consiglia un numero massimo di pod.

    • Con un modello di avvio – Il modello di avvio deve già esistere e deve soddisfare i requisiti specificati in Informazioni di base sulla configurazione del modello di avvio. (Facoltativo) Se intendi assegnare ruoli IAM a tutti gli account del servizio Kubernetes in modo che i pod dispongano solo delle autorizzazioni minime necessarie e che nessun pod nel cluster richieda l'accesso ad Amazon EC2 Instance Metadata Service (IMDS) per altri motivi, ad esempio il recupero della Regione AWS corrente, ti consigliamo di bloccare l'accesso dei pod a IMDS. Per ulteriori informazioni, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker). Se si desidera bloccare l'accesso del pod a IMDS, specificare le impostazioni necessarie nel modello di avvio.

      1. Crea un file denominato eks-nodegroup.yaml con i seguenti contenuti. Diverse impostazioni specificate durante la distribuzione senza un modello di avvio vengono spostate nel modello di avvio. Se non si specifica un version, viene utilizzata la versione di default del modello.

        apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code managedNodeGroups: - name: node-group-lt launchTemplate: id: lt-id version: "1"

        Per un elenco completo delle impostazioni del file di configurazione eksctl, vedere Schema del file Config nella documentazione eksctl. Facoltativamente, le istanze possono assegnare un numero significativamente più elevato di indirizzi IP ai pod, assegnare indirizzi IP ai pod da un blocco CIDR diverso da quello dell'istanza, utilizzare il tempo di esecuzione containerd ed essere distribuite in un cluster senza accesso a Internet in uscita. Per ulteriori informazioni, consultare Aumentare la quantità di indirizzi IP disponibili per i nodi Amazon EC2, Rete personalizzata CNI, Abilitazione del tempo di esecuzione del flag di bootstrap containerd, e Cluster privati per ulteriori opzioni da aggiungere al file di configurazione.

        Se non è stato specificato un ID AMI nel modello di avvio, i gruppi di nodi gestiti calcolano e applicano un singolo valore per il numero massimo di pod che possono essere eseguiti su ciascun nodo del gruppo di nodi, in base al tipo di istanza. Se si crea un gruppo di nodi con tipi di istanza diversi, il valore più piccolo calcolato in tutti i tipi di istanza viene applicato come numero massimo di pod che possono essere eseguiti su ogni tipo di istanza nel gruppo di nodi. I gruppi di nodi gestiti calcolano il valore utilizzando lo script a cui si fa riferimento in Per ogni tipo di istanza Amazon EC2, Amazon EKS consiglia un numero massimo di pod.

        Se nel modello di avvio è stato specificato un ID AMI, specificare il numero massimo di pod che possono essere eseguiti su ciascun nodo del gruppo se si utilizzano reti personalizzate o se si vuole aumentare il numero di indirizzi IP assegnati all'istanza. Per ulteriori informazioni, consulta . Per ogni tipo di istanza Amazon EC2, Amazon EKS consiglia un numero massimo di pod.

      2. Implementare il gruppo di nodi mediante il comando seguente.

        eksctl create nodegroup --config-file eks-nodegroup.yaml
AWS Management Console

Per creare un gruppo di nodi gestiti utilizzando la AWS Management Console

  1. Attendere che lo stato del cluster risulti ACTIVE. Non è possibile creare un gruppo di nodi gestiti per un cluster non ancora ACTIVE.

  2. Aprire la console Amazon EKS all'indirizzo https://console.aws.amazon.com/eks/home#/clusters.

  3. Scegliere il nome del cluster in cui si desidera creare un gruppo di nodi gestiti.

  4. Selezionare la scheda Configurazione.

  5. Nella scheda Configurazione cluster, selezionare la scheda Calcolo e quindi scegliere Aggiungi gruppo di nodi.

  6. Nella pagina Configure node group (Configura gruppo di nodi) compilare i parametri opportunamente e quindi scegliere Next (Successivo).

    • Nome – Immettere un nome univoco per il gruppo di nodi gestiti.

    • Nome del ruolo IAM del nodo – Scegliere il ruolo dell'istanza del nodo da utilizzare con il gruppo di nodi. Per ulteriori informazioni, consulta . Ruolo IAM del nodo Amazon EKS.

      Importante

      Consigliamo di utilizzare un ruolo che non è attualmente in uso da alcun gruppo di nodi autogestiti. In caso contrario, prevedi l'utilizzo di un nuovo gruppo di nodi autogestiti. Per ulteriori informazioni, consulta . Eliminazione di un gruppo di nodi gestiti.

    • Usa modello di avvio – (Facoltativo) Scegliere se si desidera utilizzare un modello di avvio esistente. Quindi, selezionare una versione del modello di avvio(facoltativo). Se non selezioni una versione, Amazon EKS utilizza la versione di default del modello. I modelli di avvio permettono una maggiore personalizzazione del gruppo di nodi, ad esempio permettendo di implementare un'AMI personalizzata, assegnare un numero significativamente più elevato di indirizzi IP ai pod, assegnare indirizzi IP ai pod da un blocco CIDR diverso da quello dell'istanza, abilitare il tempo di esecuzione containerd per le istanze e implementare i nodi in un cluster senza accesso a Internet in uscita. Per ulteriori informazioni, vedere Aumentare la quantità di indirizzi IP disponibili per i nodi Amazon EC2, Rete personalizzata CNI, Abilitazione del tempo di esecuzione del flag di bootstrap containerd e Cluster privati.

      Il modello di avvio deve soddisfare i requisiti in Supporto modello di avvio. Se non usi il tuo modello di avvio, l'API Amazon EKS crea un modello di avvio Amazon EC2 di default nel tuo account e implementa il gruppo di nodi utilizzando il modello di avvio predefinito.

      Se implementi IAM roles for service accounts (Ruoli IAM per gli account di servizio), assegna le autorizzazioni necessarie direttamente a tutti i pod che richiedono l'accesso ai servizi AWS. Se nessun pod nel cluster richiede l'accesso a IMDS per altri motivi, ad esempio il recupero della Regione AWS corrente, puoi anche disabilitare l'accesso a IMDS per i pod che non utilizzano la rete host in un modello di avvio. Per ulteriori informazioni, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker).

    • Etichette Kubernetes – (Facoltativo) È possibile scegliere di applicare etichette Kubernetes ai nodi del gruppo di nodi gestiti.

    • Taint di Kubernetes: (facoltativo) è possibile decidere di applicare i taint Kubernetes con l'effetto di No_Schedule, Prefer_No_Schedule oppure No_Execute ai nodi del gruppo di nodi gestito.

    • Tag – (Facoltativo) È possibile scegliere di taggare il gruppo di nodi gestiti Amazon EKS. Questi tag non si propagano ad altre risorse del gruppo di nodi, ad esempio gruppi Auto Scaling o istanze. Per ulteriori informazioni, consulta . Assegnazione di tag alle risorse Amazon EKS.

    • Configurazione aggiornamento del gruppo di nodi – (Facoltativo) È possibile selezionare il numero o la percentuale di nodi da aggiornare in parallelo. Selezionare una delle opzioni Numero o Percentuale per immettere un valore. Questi nodi non saranno disponibili durante l'aggiornamento.

  7. Nella pagina Impostare la configurazione di calcolo e dimensionamento compilare i parametri opportunamente e quindi scegliere Successivo.

    • Tipo AMI – Scegliere Amazon Linux 2 (AL2_x86_64) per istanze Linux non GPU, GPU Amazon Linux 2 abilitata (AL2_x86_64_GPU) per istanze GPU Linux, Amazon Linux 2 (AL2_ARM_64) per istanze Linux Arm, Bottlerocket (ARM_64) per istanze Bottlerocket Arm o Bottlerocket (x86_64) per istanze Bottlerocket x86_64.

      Se si sta eseguendo l'implementazione di istanze Arm, assicurarsi di esaminare le considerazioni in AMI Arm Amazon Linux ottimizzate per Amazon EKS prima della distribuzione.

      Se nella pagina precedente è stato specificato un modello di avvio e nel modello di avvio è stata specificata un'AMI, non è possibile selezionare un valore. Viene visualizzato il valore del modello. L'AMI specificato nel modello deve soddisfare i requisiti in Specifica di un'AMI.

    • Tipo capacità – Selezionare un tipo di capacità. Per ulteriori informazioni sulla scelta di un tipo di capacità, consultare Tipi di capacità del gruppo di nodi gestiti. Non è possibile combinare diversi tipi di capacità all'interno dello stesso gruppo di nodi. Se si desidera utilizzare entrambi i tipi di capacità, creare gruppi di nodi separati, ognuno con la propria capacità e con i propri tipi di istanza.

    • Tipo di istanza – Per impostazione predefinita, viene specificato uno o più tipi di istanza. Per rimuovere un tipo di istanza di default, selezionare il X sul lato destro del tipo di istanza. Scegliere il tipo di istanza da utilizzare nel gruppo di nodi gestiti.

      Nella console viene visualizzato un insieme di tipi di istanza di uso comune. Per il set completo di tipi di istanza supportati, consultare l'elenco in eni-max-pods.txt su GitHub. Se è necessario creare un gruppo di nodi gestiti con un tipo di istanza non visualizzato, utilizzare eksctl, la AWS CLI, AWS CloudFormation o un SDK per creare il gruppo di nodi. Se nella pagina precedente è stato specificato un modello di avvio, non è possibile selezionare un valore perché il tipo di istanza deve essere specificato nel modello di avvio. Viene visualizzato il valore del modello di avvio. Se è stato selezionato Spot per Tipo capacità, al fine di migliorare la disponibilità è consigliabile specificare più tipi di istanza.

    • Dimensione disco – Inserire la dimensione del disco (in GiB) da utilizzare per il volume root del nodo.

      Se nella pagina precedente è stato specificato un modello di avvio, non è possibile selezionare un valore perché deve essere specificato nel modello di avvio.

    • Dimensione minima – Specifica il numero massimo di nodi a cui il gruppo di nodi gestiti può essere ridotto orizzontalmente.

    • Dimensione massima – Specifica il numero massimo di nodi a cui il gruppo di nodi gestiti può essere aumentato orizzontalmente.

    • Dimensione desiderata – Specifica il numero corrente di nodi che il gruppo di nodi gestiti deve mantenere all'avvio.

      Nota

      Amazon EKS non dimensiona automaticamente il gruppo di nodi. Tuttavia, è possibile configurare il Cluster Autoscaler di Kubernetes per eseguire questa operazione.

    • Per Massimo non disponibile, selezionare una delle seguenti opzioni e specificare un Valore:

      • Numero – Selezionare e specificare il numero di nodi nel gruppo nodi che possono essere aggiornati in parallelo. Questi nodi non saranno disponibili durante l'aggiornamento.

      • Percentuale – Selezionare e specificare la percentuale di nodi nel gruppo di nodi che possono essere aggiornati in parallelo. Questi nodi non saranno disponibili durante l'aggiornamento. Questa funzione è utile se si dispone di un numero elevato di nodi nel gruppo di nodi.

  8. Nella pagina Specifica reti, compila i parametri opportunamente, quindi scegli Successivo.

    • Sottoreti – Sceglii le sottoreti in cui avviare i nodi gestiti.

      Importante

      Se esegui un'applicazione con stato in più zone di disponibilità supportate dai volumi Amazon EBS e che utilizza il Cluster Autoscaler Kubernetes, è necessario configurare più gruppi di nodi, ognuno dei quali definito per una singola zona di disponibilità. Inoltre, è necessario abilitare la caratteristica --balance-similar-node-groups.

      Importante
      • Se si sceglie una sottorete pubblica e nel cluster è abilitato solo l'endpoint del server API pubblico, è necessario che la sottorete disponga di MapPublicIPOnLaunch impostato su true per consentire alle istanze di unirsi correttamente a un cluster. Se la sottorete è stata creata utilizzando eksctl o i modelli AWS CloudFormation forniti da Amazon EKS in data 26 marzo 2020 successiva, questa impostazione è già impostata su true. Se le sottoreti sono state create con eksctl o con i modelli AWS CloudFormation precedenti al 26 marzo 2020, è necessario modificare manualmente l'impostazione. Per ulteriori informazioni, consulta Modifica dell'attributo di assegnazione degli indirizzi IPv4 pubblici della sottorete.

      • Se utilizzi un modello di avvio e specifichi più interfacce di rete, Amazon EC2 non assegnerà automaticamente un indirizzo IPv4 pubblico, anche se MapPublicIpOnLaunch è impostato su true. Affinché i nodi possano unirsi al cluster in questo scenario, è necessario abilitare l'endpoint del server API privato del cluster, oppure avviare i nodi in una sottorete privata con accesso Internet in uscita fornito tramite un metodo alternativo, ad esempio un gateway NAT. Per ulteriori informazioni, consultare Assegnazione degli indirizzi IP a istanze Amazon EC2 nella Guida per l'utente di Amazon EC2 per le istanze Linux.

    • Configurazione dell'accesso SSH ai nodi (facoltativo). L'abilitazione di SSH consente di connettersi alle istanze e raccogliere informazioni diagnostiche in caso di problemi. Per abilitare l'accesso remoto, completare la procedura seguente. Si consiglia vivamente di abilitare l'accesso remoto quando si crea un gruppo di nodi. Non è possibile abilitare l'accesso remoto dopo la creazione del gruppo di nodi.

      Se si sceglie di utilizzare un modello di avvio, questa opzione non viene visualizzata. Per abilitare l'accesso remoto ai nodi, specificare una coppia di chiavi nel modello di avvio e assicurarsi che la porta appropriata sia aperta ai nodi nei gruppi di sicurezza specificati nel modello di avvio. Per ulteriori informazioni, consulta . Utilizzo di gruppi di sicurezza personalizzati.

    • Per Coppia di chiavi SSH (Facoltativo), scegli una chiave SSH Amazon EC2 da utilizzare. Per ulteriori informazioni, consulta la sezione relativa alle coppie di chiavi Amazon EC2 nella Guida per l'utente di Amazon EC2 per le istanze Linux. Se si sceglie di utilizzare un modello di avvio, non è possibile selezionarne una. Quando viene fornita una chiave SSH di Amazon EC2 per i gruppi di nodi che utilizzano AMI Bottlerocket, viene attivato anche il container amministratore. Per ulteriori informazioni, consultare Container amministratore su GitHub.

    • Per Autorizzazione di accesso remoto SSH da, se si desidera limitare l'accesso a istanze specifiche, selezionare i gruppi di sicurezza associati a tali istanze. Se non si selezionano gruppi di sicurezza specifici, l'accesso SSH è consentito da qualsiasi indirizzo di Internet (0.0.0.0/0).

  9. Nella pagina Review and create (Revisione e creazione) esaminare la configurazione del gruppo di nodi gestiti e scegliere Create (Crea).

    Se i nodi di lavoro non riescono a unirsi al cluster, consulta Impossibile aggiungere i nodi al cluster nella Guida alla risoluzione dei problemi.

  10. Guarda lo stato dei nodi e attendi che raggiungano lo stato Ready.

    kubectl get nodes --watch
  11. (Solo nodi di lavoro GPU) Se sono stati scelti un tipo di istanza GPU e l'AMI ottimizzata e accelerata per Amazon EKS, occorre applicare il plug-in del dispositivo NVIDIA per Kubernetes come daemonset sul cluster tramite il comando seguente.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml
  12. (Facoltativo) Dopo aver aggiunto i nodi (worker) Linux al cluster, seguire le procedure indicate in Supporto Windows per aggiungere il supporto Windows al cluster e per aggiungere i nodi (worker). Tutti i cluster Amazon EKS devono contenere almeno un nodo (worker) Linux, anche se nel cluster si desidera eseguire solo i carichi di lavoro Windows.

Ora che si dispone di un cluster Amazon EKS funzionante con nodi, è possibile avviare l'installazione dei componenti aggiuntivi di Kubernetes e l'implementazione di applicazioni al cluster. I seguenti argomenti della documentazione consentono di estendere la funzionalità del cluster.

  • L'entità IAM (utente o ruolo) che ha creato il cluster è l'unico utente IAM in grado di effettuare chiamate al server API Kubernetes tramite kubectl. Se desideri che altri utenti abbiano accesso al cluster, consulta Abilitazione dell'accesso a utenti e ruoli IAM al cluster.

  • Limitazione dell'accesso al servizio di metadati dell'istanza: se prevedi di assegnare ruoli IAM a tutti gli account del servizio Kubernetes in modo che i pod dispongano solo delle autorizzazioni minime necessarie e che nessun pod nel cluster richieda l'accesso ad Amazon EC2 Instance Metadata Service (IMDS) per altri motivi, come ad esempio il recupero della Regione AWS corrente, ti consigliamo di bloccare l'accesso dei pod a IMDS. Per ulteriori informazioni, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker).

  • Cluster Autoscaler – Configurare il Cluster Autoscaler Kubernetes per regolare automaticamente il numero di nodi nei gruppi di nodi.

  • Implementare un'applicazione di esempio sul cluster.

  • Gestione dei cluster – Informazioni su come utilizzare strumenti importanti per la gestione del cluster.