Avvio di nodi Amazon Linux autogestiti - Amazon EKS

Avvio di nodi Amazon Linux autogestiti

In questo argomento vengono fornite le nozioni di base per avviare un gruppo Auto Scaling di nodi Linux che si registrano con il cluster Amazon EKS. Dopo che i nodi vengono aggiunti al cluster, puoi implementare applicazioni Kubernetes per gli stessi. Inoltre, è possibile avviare i nodi Amazon Linux 2 autogestiti con eksctl o la AWS Management Console.

Prerequisiti

eksctl

Prerequisito

La versione 0.84.0 o successive dello strumento a riga di comando eksctl deve essere installata sul computer o nella AWS CloudShell. Per installare o aggiornare eksctl, consulta Installazione di eksctl.

Per avviare nodi Linux autogestiti usando eksctl

  1. (Facoltativo) Se la policy gestita IAM 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. Il comando seguente crea un gruppo di nodi in un cluster esistente. Sostituisci ogni example-value con i valori in tuo possesso. Per impostazione predefinita, i nodi vengono creati con la stessa versione Kubernetes del piano di controllo.

    Per un elenco completo dei valori supportati per --node-type, vedere amazon-eks-nodegroup.yaml su GitHub. Prima di scegliere un valore per --node-type, verifica 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.

    Crea il tuo gruppo di nodi con il comando seguente.

    Importante

    Se si desidera implementare un gruppo di nodi su AWS Outposts, AWS Wavelength oppure nelle sottoreti Local Zones AWS, ci sono ulteriori considerazioni:

    eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed false \ --ssh-public-key my-key

    Per implementare un gruppo di nodi che consenta all'istanza di 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. Quindi, per abilitare il tempo di esecuzione containerd è necessario implementare il gruppo di nodi utilizzando un file di configurazione. Per ulteriori informazioni, consultare Aumentare la quantità di indirizzi IP disponibili per i nodi Amazon EC2, Rete personalizzata CNI e Abilitazione del tempo di esecuzione del flag di bootstrap containerd. Per istruzioni su come implementare un gruppo di nodi privato senza accesso a Internet in uscita, consultare Cluster privati. Per un elenco completo di tutte le opzioni e i valori di default disponibili, immetti il comando seguente.

    eksctl create nodegroup --help

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

    L'output è il seguente. Durante la creazione dei nodi vengono emesse diverse righe. Una delle ultime righe di output è simile alla seguente riga di esempio.

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (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).

AWS Management Console

Passaggio 1: Per avviare i nodi Linux autogestiti utilizzando la AWS Management Console

  1. Attendere che lo stato del cluster risulti ACTIVE. Se i nodi vengono avviati prima che il cluster sia attivo, la registrazione al cluster non riuscirà e sarà necessario riavviarli.

  2. Eseguire il download della versione più recente del modello di AWS CloudFormation.

    curl -o amazon-eks-nodegroup.yaml https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/amazon-eks-nodegroup.yaml
  3. Aprire la console di AWS CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation.

  4. Scegliere Crea pila quindi selezionare Con nuove risorse (standard).

  5. In Specifica modello, seleziona Carica un file di modello e Scegli file. Selezionare il file amazon-eks-nodegroup.yaml scaricato nel passaggio 2 e quindi selezionare Successivo.

  6. Nella pagina Specify stack details (Specifica dettagli pila), compilare i seguenti parametri di conseguenza:

    • Stack name (Nome pila): scegliere il nome per la pila AWS CloudFormation. Ad esempio, è possibile chiamarlo nodi-nome-cluster. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfabetico e non può avere una lunghezza superiore a 128 caratteri.

    • NomeCluster: inserire il nome utilizzato al momento della creazione del cluster Amazon EKS. Questo nome deve corrispondere al nome del cluster o i nodi non verranno aggiunti al cluster.

    • GruppoSicurezzaClusterPianoControllo: scegliere il valore GruppiSicurezza dall'output AWS CloudFormation generato al momento della creazione del VPC.

      Nella procedura seguente viene illustrata un'operazione per recuperare il gruppo applicabile.

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

      2. Scegliere il nome del cluster.

      3. Scegliere la scheda Configuration (Configurazione).

      4. Scegliere la scheda Networking (Reti).

      5. Utilizza il valore Additional Security Group (Gruppo di sicurezza aggiuntivo) come riferimento quando selezioni dall'elenco a discesa ClusterControlPlaneSecurityGroup.

    • NomeGruppoNodo: immettere un nome per il gruppo di nodi. Questo nome può essere utilizzato in seguito per identificare il gruppo di nodi Auto Scaling creato per i nodi.

    • GruppoNodoAutoScalingDimensioneMin: inserire il numero minimo di nodi a cui il gruppo Auto Scaling di nodi è in grado di dimensionarsi.

    • CapacitàDesiderataGruppoAutoScalingNodo: inserire il numero desiderato di nodi come riferimento del dimensionamento quando viene creata la pila.

    • GruppoNodoAutoScalingDimensioneMax: inserire il numero massimo di nodi a cui il gruppo Auto Scaling di nodi è in grado di dimensionarsi.

    • TipoIstanzaNodo: scegliere un tipo di istanza per i nodi.

    • ParamSSMIdImmagineNodo: precompilato con il parametro Amazon EC2 Systems Manager di un recente ID di un'AMI Amazon Linux ottimizzata per Amazon EKS per una versione Kubernetes. Se si desidera utilizzare una diversa versione secondaria di Kubernetes supportata da Amazon EKS, è possibile sostituire 1.x con una versione supportata differente. Si consiglia di specificare la stessa versione Kubernetes del cluster.

      Per utilizzare l'AMI accelerata ottimizzata per Amazon EKS, sostituisci amazon-linux-2 con amazon-linux-2-gpu. Per utilizzare l'AMI Arm ottimizzata per Amazon EKS, sostituisci amazon-linux-2 con amazon-linux-2-arm64.

      Nota

      L'AMI del nodo Amazon EKS è basata su Amazon Linux 2. Tieni traccia degli eventi di sicurezza o di privacy per Amazon Linux 2 nel Centro di sicurezza di Amazon Linux o iscriviti al feed RSS associato. Eventi di sicurezza e privacy includono una panoramica del problema, quali sono i pacchetti interessati e come aggiornare le istanze per risolvere il problema.

    • NodeImageId: (facoltativo) se utilizzi un'AMI personalizzata invece dell'AMI ottimizzata per Amazon EKS, inserisci un ID AMI del nodo per la Regione AWS in uso. Se si specifica un valore qui, il valore specificato sostituisce qualsiasi valore nel campo ParamSSMIdImmagineNodo.

    • NodeVolumeSize: Specificare una dimensione del volume root per i nodi in GiB.

    • NomeChiave: Inserire il nome di una coppia di chiavi SSH Amazon EC2; che puoi utilizzare per connetterti utilizzando SSH nei nodi dopo l'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.

      Nota

      Se non fornisci una coppia di chiavi in questa fase, la creazione della pila AWS CloudFormation non va a buon fine.

    • ArgomentiBootstrap: specificare eventuali argomenti facoltativi per passare allo script di bootstrap del nodo, ad esempio argomenti kubelet aggiuntivi. Per ulteriori informazioni, leggi le informazioni sull'utilizzo dello script di bootstrap su GitHub. Per implementare un gruppo di nodi che consente all'istanza di 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, attivare il tempo di esecuzione containerd o implementare un cluster privato senza accesso a Internet in uscita, 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 gli argomenti da aggiungere in questa fase.

    • DisabilitaIMDSv1: ogni nodo supporta Instance Metadat Service versione 1 (IMDSv1) e IMDSv2 per impostazione predefinita. Tuttavia, è possibile disabilitare IMDSv1. Seleziona vero se non si desidera che nessun nodo nel gruppo di nodi o qualsiasi pod pianificato sui nodi nel gruppo di nodi utilizzi IMDSv1. Per ulteriori informazioni su IMDS consulta Configurazione del servizio di metadati dell'istanza. Per ulteriori informazioni sulle relative limitazioni dell'accesso ai nodi, consultare Limita l'accesso al profilo dell'istanza assegnato al nodo (worker).

    • VpcId: inserire l'ID del VPC creato.

    • Sottoreti: Scegliere le sottoreti create per il VPC. Se il VPC è stato creato utilizzando i passaggi descritti in Creazione di un VPC per il cluster Amazon EKS, specificare solo le sottoreti private all'interno del VPC per avviare i nodi.

      Importante
      • Se una qualsiasi delle sottoreti è pubblica, è necessario abilitare l'impostazione di assegnazione automatica degli indirizzi IP pubblici. Se l'impostazione non è abilitata per la sottorete pubblica, a tutti i nodi implementati nella sottorete pubblica non verrà assegnato un indirizzo IP pubblico e non potranno comunicare con il cluster o altri servizi AWS. Se la sottorete è stata implementata prima del 26 Marzo 2020 utilizzando uno dei modelli VPC AWS CloudFormation Amazon EKS, oppure un eksctl, l'assegnazione automatica di indirizzi IP pubblici viene disattivata per le sottoreti pubbliche. Per informazioni su come abilitare l'assegnazione di indirizzi IP pubblici per una sottorete, consulta Modifica dell'attributo di assegnazione degli indirizzi IPv4 pubblici della sottorete. Se il nodo viene implementato in una sottorete privata, è in grado di comunicare con il cluster e con gli altri servizi AWS tramite un gateway NAT.

      • Se le sottoreti non hanno accesso a Internet, leggi con attenzione le considerazioni e le aggiuntive descritte in Cluster privati.

      • Se si implementano i nodi in un cluster 1.18 o precedente, assicurarsi che le sottoreti selezionate siano taggate con il nome del cluster. Sostituire my-cluster con il nome del cluster. Quindi, esegui il comando seguente per vedere un elenco delle sottoreti attualmente taggate con il nome del cluster.

        aws ec2 describe-subnets --filters Name=tag:kubernetes.io/cluster/my-cluster,Values=shared | grep SubnetId

        Se la sottorete che si desidera selezionare non viene restituita nell'output del comando precedente, aggiungere manualmente il tag alla sottorete. Per ulteriori informazioni, consulta . Assegnazione di tag alle sottoreti.

      • Se si seleziona AWS Outposts, AWS Wavelength, oppure AWS sottoreti Local Zones, le sottoreti sono state passate quando è stato creato il cluster.

  7. Confermare che la pila sia in grado di creare risorse IAM, quindi scegliere Crea pila.

  8. Al termine della creazione della pila, selezionala nella console e scegli Outputs (Uscite).

  9. Registra il RuoloIstanzaNodo per il gruppo di nodi che è stato creato. Ciò sarà utile quando si configurano i nodi Amazon EKS;.

Passaggio 2: Per abilitare l'aggiunta di nodi al cluster

Nota

Se si è avviato i nodi all'interno di un VPC privato senza accesso a Internet in uscita, devi abilitare i nodi da aggiungere al cluster dal VPC.

  1. Scarica, modifica e applica la mappa di configurazione dell'Autenticatore IAM AWS.

    1. Scarica la mappa di configurazione:

      curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Apri il file con un editor di testo. Sostituisci lo snippet ARN of instance role (not instance profile) con il valore RuoloIstanzaNodo registrato nella procedura precedente e salva il file.

      Importante

      Non modificare altre righe in questo file.

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: ARN of instance role (not instance profile) username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes
    3. Applica la configurazione. L'esecuzione di questo comando potrebbe richiedere alcuni minuti.

      kubectl apply -f aws-auth-cm.yaml
      Nota

      Se ricevi qualsiasi altro errore di tipo risorsa o autorizzazione, consulta Accesso negato o non autorizzato (kubectl) nella sezione relativa alla risoluzione dei problemi.

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

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

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

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml
  4. (Facoltativo) implementare un’applicazione di esempio per testare il cluster e i nodi Linux.

  5. (Facoltativo) Se la policy IAM gestita AmazonEKS_CNI_Policy (se disponi di un cluster IPv4) o la policy AmazonEKS_CNI_IPv6_Policy (creata da te se disponi di un cluster IPv6) è collegata al Ruolo IAM del nodo Amazon EKS, ti consigliamo invece di assegnarla a un ruolo IAM associato all'account del servizio aws-node Kubernetes. Per ulteriori informazioni, consulta . Configurazione del plug-in CNI di Amazon VPC per l'utilizzo dei ruoli IAM per gli account di servizio.

  6. (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).