Creazione di nodi Amazon Linux su AWS Outposts - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Creazione di nodi Amazon Linux su AWS Outposts

In questo argomento viene descritto come avviare gruppi con scalabilità automatica di nodi Amazon Linux su un Outpost che si registrano con il cluster Amazon EKS. Il cluster può essere sul cloud AWS o su un Outpost.

  • Un Outpost esistente. Per ulteriori informazioni, consulta What is AWS Outposts.

  • Un cluster Amazon EKS esistente. Per implementare un cluster sul cloud AWS, consulta Crea un cluster Amazon EKS.. Per implementare un cluster su un Outpost, consulta la sezione Creazione di cluster Amazon EKS locali su AWS Outposts per un’elevata disponibilità.

  • Supponiamo di creare i nodi in un cluster sul cloud AWS e di avere sottoreti nella Regione AWS in cui hai abilitato AWS Outposts, AWS Wavelength o AWS Local Zones. Quindi, le sottoreti non devono essere state passate al momento della creazione del cluster. Se stai creando i nodi in un cluster su un Outpost, durante la creazione del cluster devi avere passato una sottorete Outpost.

  • (Consigliato per i cluster sul cloud AWS): il componente aggiuntivo del plug-in della Container Network Interface (CNI) di Amazon VPC per Kubernetes configurato con il proprio ruolo IAM a cui è collegata la policy IAM necessaria. Per ulteriori informazioni, consulta Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA. I cluster locali non supportano i ruoli IAM per gli account di servizio.

Puoi creare un gruppo di nodi Amazon Linux autogestito con eksctl o la Console di gestione AWS (con un modello AWS CloudFormation). Puoi anche utilizzare Terraform.

Puoi creare un gruppo di nodi autogestito per il cluster locale con i seguenti strumenti descritti in questa pagina:

Importante
  • Il gruppo di nodi autogestito include le istanze di Amazon EC2 nel tuo account. Queste istanze non vengono aggiornate in automatico quando l’utente o Amazon EKS aggiorna la versione del piano di controllo (control-plane) per tuo conto. Nella console, un gruppo di nodi autogestito non riceve alcuna indicazione di aggiornamento. È possibile visualizzare la versione di kubelet installata su un nodo selezionando il nodo nella finestra di dialogo Nodi nella scheda Panoramica del cluster per determinare quali nodi devono essere aggiornati. È necessario aggiornare manualmente i nodi. Per ulteriori informazioni, consulta Aggiornamento dei nodi autogestiti per il tuo cluster.

  • I certificati utilizzati da kubelet sui nodi autogestiti vengono emessi con una scadenza di un anno. Per impostazione predefinita, la rotazione dei certificati non è abilitata (consulta: https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration), ciò significa che se hai un nodo autogestito attivo per più di un anno, questo non sarà più in grado di autenticarsi nell’API Kubernetes.

  • Come best practice, consigliamo ai clienti di aggiornare regolarmente i propri gruppi di nodi autogestiti per ricevere vulnerabilità ed esposizioni comuni (CVE) e patch di sicurezza dalle più recenti AMI ottimizzate per Amazon EKS. L’aggiornamento delle AMI utilizzate nei gruppi di nodi autogestiti attiva anche la ricreazione dei nodi e assicura che non si verifichino problemi dovuti a certificati kubelet scaduti.

  • In alternativa, puoi anche abilitare la rotazione dei certificati client (consulta: https://kubernetes.io/docs/tasks/tls/certificate-rotation/) durante la creazione dei gruppi di nodi autogestiti per assicurarti che i certificati kubelet vengano rinnovati mentre il certificato corrente si avvicina alla scadenza.

eksctl

Per avviare nodi Linux autogestiti utilizzando eksctl

  1. La versione 0.214.0 o quelle successive dello strumento a riga di comando eksctl deve essere installata sul dispositivo o in AWS CloudShell. Per l'installazione o l'aggiornamento di eksctl, consulta la sezione Installation nella documentazione di eksctl.

  2. Se il cluster è sul cloud AWS e la policy IAM gestita AmazonEKS_CNI_Policy è collegata al ruolo IAM del nodo Amazon EKS, consigliamo, invece, di assegnarlo a un ruolo IAM associato all’account di servizio aws-node di Kubernetes. Per ulteriori informazioni, consulta Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA. Se il cluster è sull'Outpost, la policy deve essere collegata al ruolo del tuo nodo.

  3. Il comando seguente crea un gruppo di nodi in un cluster esistente. Il cluster deve essere stato creato utilizzando eksctl. Sostituisci al-nodes con un nome per il gruppo di nodi. Il nome del gruppo di nodi non può contenere più di 63 caratteri. Deve iniziare con una lettera o un numero, ma può anche includere trattini e caratteri di sottolineatura. Sostituisci my-cluster con il nome del tuo cluster. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfanumerico e non può avere una lunghezza superiore a 100 caratteri. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui stai creando il cluster. Se il cluster è su un Outpost, sostituisci id con l'ID di una sottorete dell'Outpost. Se il cluster è sul cloud AWS, sostituisci id con l’ID di una sottorete non specificata al momento della creazione del cluster. Sostituisci instance-type con un tipo di istanza supportato sul tuo Outpost. Sostituisci i valori di esempio con i tuoi valori. Per impostazione predefinita, i nodi vengono creati con la stessa versione Kubernetes del piano di controllo.

    Sostituisci instance-type con un tipo di istanza disponibile sul tuo Outpost.

    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 disponi di una coppia di chiavi Amazon EC2, puoi crearne una nella Console di gestione AWS. Per ulteriori informazioni, consulta la sezione relativa alle coppie di chiavi Amazon EC2 nella Guida per l'utente di Amazon EC2.

    Crea il tuo gruppo di nodi con il comando seguente.

    eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id

    Se il cluster è implementato nel cloud AWS:

    Per un elenco completo di tutte le impostazioni predefinite e le opzioni disponibili, consulta AWS Outposts Support nella documentazione di eksctl.

  4. (Facoltativo) implementare un’applicazione di esempio per testare il cluster e i nodi Linux.

Console di gestione AWS

Fase 1: avvia i nodi Linux autogestiti utilizzando la Console di gestione AWS

  1. Scarica la versione più recente del modello di AWS CloudFormation.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. Apri la console AWS CloudFormation.

  3. Scegli Crea stack e quindi seleziona Con nuove risorse (standard).

  4. In Specifica modello, seleziona Carica un file di modello e Scegli file. Seleziona il file amazon-eks-nodegroup.yaml scaricato in un passaggio precedente, quindi seleziona Next (Successivo).

  5. Nella pagina Specifica i dettagli dello stack, immetti i parametri seguenti e scegli Successivo:

    • Nome stack: scegli il nome per lo stack di AWS CloudFormation. Ad esempio, puoi chiamarlo al-nodes. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfanumerico e non può avere una lunghezza superiore a 100 caratteri. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui stai creando il cluster.

    • ClusterName: inserisci un nome per il cluster. Se questo nome non corrisponde al nome del cluster, i nodi non possono unirsi al cluster.

    • ClusterControlPlaneSecurityGroup: scegli il valore SecurityGroups dall’output di 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.

      2. Scegli il nome del cluster.

      3. Scegli la scheda Reti.

      4. Utilizza il valore Additional security groups (Gruppi di sicurezza aggiuntivi) come riferimento quando selezioni nell'elenco a discesa ClusterControlPlaneSecurityGroup.

    • NodeGroupName: inserisci un nome per il gruppo di nodi. Questo nome può essere utilizzato in seguito per identificare il gruppo di nodi con dimensionamento automatico creato per i tuoi nodi.

    • NodeAutoScalingGroupMinSize: inserisci il numero minimo di nodi a cui il gruppo con dimensionamento automatico di nodi è in grado di ridimensionarsi.

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

    • NodeAutoScalingGroupMaxSize: inserisci il numero massimo di nodi a cui il gruppo con dimensionamento automatico di nodi è in grado di impiegare la scalabilità orizzontale.

    • NodeInstanceType: scegli un tipo di istanza per i nodi. Se il cluster è in esecuzione sul cloud AWS, consulta Scelta di una tipologia di istanza di nodo Amazon EC2 ottimale per ulteriori informazioni. Se il cluster è in esecuzione su un Outpost, puoi selezionare solo un tipo di istanza disponibile sul tuo Outpost.

    • NodeImageIdSSMParam: precompilato con il parametro Amazon EC2 Systems Manager di un’AMI ottimizzata per Amazon EKS recente per una versione di Kubernetes variabile. Per utilizzare una versione secondaria diversa di Kubernetes supportata da Amazon EKS, sostituisci 1.XX 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. Tieni traccia degli eventi di sicurezza o di privacy per Amazon Linux in Amazon Linux security center scegliendo la scheda per la versione desiderata. Puoi anche abbonarti al feed RSS applicabile. Gli 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 specifichi un valore in questo campo, il valore specificato sostituisce qualsiasi valore nel campo NodeImageIdSSMParam.

    • NodeVolumeSize: specifica una dimensione del volume root per i nodi (in GiB).

    • NodeVolumeType: specifica un tipo di volume root per i tuoi nodi.

    • KeyName: inserisci il nome di una coppia di chiavi SSH Amazon EC2 che puoi utilizzare per connetterti ai nodi con SSH dopo il loro avvio. Se non disponi di una coppia di chiavi Amazon EC2, puoi crearne una nella Console di gestione AWS. Per ulteriori informazioni, consulta la sezione relativa alle coppie di chiavi Amazon EC2 nella Guida per l'utente di Amazon EC2.

      Nota

      Se non fornisci una coppia di chiavi in questa fase, la creazione dello stack di AWS CloudFormation non viene eseguita correttamente.

    • BootstrapArguments: esistono diversi argomenti facoltativi che puoi passare ai tuoi nodi. Per ulteriori informazioni, leggi le informazioni sull'utilizzo dello script di bootstrap su GitHub. Se stai aggiungendo nodi a un cluster locale di Amazon EKS su AWS Outposts (in cui le istanze del piano di controllo (control-plane) di Kubernetes vengono eseguite su AWS Outposts) e il cluster non dispone di una connessione internet in ingresso e in uscita (noto come cluster privato), devi fornire i seguenti argomenti di bootstrap (su una singola riga).

      --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}

      Per recuperare i valori per CLUSTER_CA, APISERVER_ENDPOINT e CLUSTER_ID del tuo cluster locale Amazon EKS, esegui i seguenti comandi dell’AWS CLI. Sostituisci cluster-name con il nome del cluster e della regione (ad esempio, us-east-1) con la Regione AWS del cluster.

      echo "CLUSTER_CA=$(aws eks describe-cluster --name cluster-name --region region --query cluster.certificateAuthority.data --output text)" echo "APISERVER_ENDPOINT=$(aws eks describe-cluster --name cluster-name --region region --query cluster.endpoint --output text)" echo "CLUSTER_ID=$(aws eks describe-cluster --name cluster-name --region region --query cluster.id --output text)"
    • DisableIMDSv1: ogni nodo supporta Instance Metadat Service versione 1 (IMDSv1) e IMDSv2 per impostazione predefinita. Puoi disabilitare IMDSv1. Per evitare che in futuro i nodi e i pod nel gruppo di nodi utilizzino IMDSv1, imposta DisableIMDSv1 su vero. Per ulteriori informazioni su IMDS, consulta Configurazione del servizio di metadati dell'istanza. Per ulteriori informazioni sulle relative limitazioni dell'accesso ai nodi, consulta Limita l'accesso al profilo dell'istanza assegnato al nodo (worker).

    • VpcId: inserisci l'ID del VPC creato. Prima di scegliere un VPC, consulta VPC requirements and considerations.

    • Subnets: (Sottoreti) se il cluster è su un Outpost, scegli almeno una sottorete privata nel VPC. Prima di scegliere le sottoreti, consulta Considerazioni e requisiti relativi alla sottorete. È possibile visualizzare le sottoreti private aprendo ogni collegamento relativo alla sottorete dalla scheda Reti del cluster.

  6. Seleziona le opzioni desiderate nella pagina Configura opzioni dello stack, quindi scegli Next (Avanti).

  7. Seleziona la casella di controllo a sinistra di Riconosco che AWS CloudFormation potrebbe creare risorse IAM., quindi scegli Crea stack.

  8. Al termine della creazione dello stack, selezionalo nella console e scegli Output.

  9. Registra il valore NodeInstanceRole per il gruppo di nodi che è stato creato. Ciò sarà utile quando configurerai i nodi di Amazon EKS.

Fase 2: abilitazione dell’aggiunta di nodi al cluster

  1. Verifica se disponi già di una ConfigMap per aws-auth.

    kubectl describe configmap -n kube-system aws-auth
  2. Se ti viene mostrata una ConfigMap per aws-auth, aggiornala se necessario.

    1. Apri ConfigMap per la modifica.

      kubectl edit -n kube-system configmap/aws-auth
    2. Aggiungi una nuova voce mapRoles, se necessario. Imposta il valore di rolearn sul valore di NodeInstanceRole registrato nella procedura precedente.

      [...] data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
    3. Salva il file ed esci dall'editor di testo.

  3. Se hai ricevuto un messaggio di errore che indica "Error from server (NotFound): configmaps "aws-auth" not found", applica lo ConfigMap di stock.

    1. Scarica la mappa di configurazione.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Nel file aws-auth-cm.yaml, imposta il valore di rolearn sul valore di NodeInstanceRole registrato nella procedura precedente. Per eseguire questa operazione, utilizza un editor di testo o sostituisci my-node-instance-role eseguendo il comando seguente:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. Applica la configurazione. L'esecuzione di questo comando potrebbe richiedere alcuni minuti.

      kubectl apply -f aws-auth-cm.yaml
  4. Guarda lo stato dei nodi e attendi che raggiungano lo stato Ready.

    kubectl get nodes --watch

    Inserisci Ctrl+C per tornare a un prompt dello shell (interprete di comandi).

    Nota

    Se ricevi qualsiasi altro errore di tipo di risorsa o autorizzazione, consulta la sezione Accesso negato o non autorizzato (kubectl) nell'argomento relativo alla risoluzione dei problemi.

    Se i nodi non riescono a unirsi al cluster, consulta Impossibile aggiungere i nodi al cluster in Troubleshoot problems with Amazon EKS clusters and nodes e Impossibile unire i nodi a un cluster in Troubleshoot local Amazon EKS clusters on AWS Outposts.

  5. Installa il driver CSI per Amazon EBS. Per ulteriori informazioni, consulta la sezione Installation (Installazione) su GitHub. Nella sezione Set up driver permission (Configura autorizzazione del driver), assicurati di seguire le istruzioni per l'opzione Using IAM instance profile (Utilizzo del profilo dell'istanza IAM). È necessario utilizzare la classe di archiviazione gp2. La classe di archiviazione gp3 non è supportata.

    Per creare una classe di archiviazione gp2 nel cluster, completa i seguenti passaggi.

    1. Per creare il file gp2-storage-class.yaml, emetti il seguente comando:

      cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
    2. Applica il manifesto al cluster.

      kubectl apply -f gp2-storage-class.yaml
  6. (Solo nodi GPU) Se sono stati scelti un tipo di istanza GPU e un’AMI ottimizzata e accelerata per Amazon EKS, occorre applicare il plug-in del dispositivo NVIDIA per Kubernetes come DaemonSet sul cluster. Sostituisci vX.X.X con la versione NVIDIA/k8s-device-plugin desiderata prima di eseguire il comando seguente.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml

Fase 3: operazioni aggiuntive

  1. (Facoltativo) implementare un’applicazione di esempio per testare il cluster e i nodi Linux.

  2. Se il cluster è implementato su un Outpost, salta questo passaggio. Se il cluster è implementato sul cloud AWS, le seguenti informazioni sono facoltative. 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 Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA.