Gruppi di nodi gestiti - Amazon EKS

Gruppi di nodi gestiti

I gruppi di nodi gestiti Amazon EKS automatizzano il provisioning la gestione del ciclo di vita dei nodi (istanze Amazon EC2) per i cluster Kubernetes Amazon EKS.

Con i gruppi di nodi gestiti Amazon EKS, non devi eseguire separatamente il provisioning o la registrazione delle istanze Amazon EC2 che forniscono capacità di calcolo per l'esecuzione delle tue applicazioni Kubernetes. È possibile creare, aggiornare o terminare automaticamente i nodi per il cluster con una singola operazione. Gli aggiornamenti e le interruzioni dei nodi svuotano automaticamente i nodi per garantire che le applicazioni rimangano disponibili.

Ogni nodo gestito viene assegnato come parte di un gruppo Amazon EC2 Auto Scaling gestito per l'utente da Amazon EKS. Ogni risorsa, incluse le istanze e i gruppi Auto Scaling, viene eseguita all'interno dell'account AWS. Ogni gruppo di nodi viene eseguito su più zone di disponibilità definite.

É possibile aggiungere un gruppo di nodi gestiti a cluster nuovi o esistenti utilizzando la console Amazon EKS, eksctl,la AWS CLI; l'API AWS o gli strumenti infrastructure as code incluso AWS CloudFormation. I nodi avviati come parte di un gruppo di nodi gestiti vengono automaticamente taggati per l'individuazione automatica tramite il cluster Autoscaler di Kubernetes. È possibile utilizzare il gruppo di nodi per applicare le etichette Kubernetes ai nodi e aggiornarle in qualsiasi momento.

Non ci sono costi aggiuntivi per l'utilizzo dei gruppi di nodi gestiti Amazon EKS, ci sono costi solo per le risorse AWS di cui si effettua il provisioning. Queste includono istanze Amazon EC2, volumi Amazon EBS, ore del cluster Amazon EKS e qualsiasi altra infrastruttura AWS. Non sono previste tariffe minime né impegni anticipati.

Per iniziare a utilizzare un nuovo cluster Amazon EKS e un gruppo di nodi gestiti, vedi Guida introduttiva ad Amazon EKS: AWS Management Console e AWS CLI.

Per aggiungere un gruppo di nodi gestiti a un cluster esistente, vedi Creazione di un gruppo di nodi gestiti.

Concetti sui gruppi di nodi gestiti

  • I gruppi di nodi gestiti Amazon EKS creano e gestiscono le istanze Amazon EC2 per conto dell'utente.

  • Ogni nodo gestito viene assegnato come parte di un gruppo Amazon EC2 Auto Scaling gestito per l'utente da Amazon EKS. Inoltre, ogni risorsa, incluse le istanze Amazon EC2 e i gruppi Auto Scaling, viene eseguita all'interno dell'account AWS.

  • Il gruppo Auto Scaling di un gruppo di nodi gestiti si estende su ogni sottorete specificata al momento della creazione del gruppo.

  • Amazon EKS applica i tag alle risorse del gruppo di nodi gestiti in modo che siano configurate per utilizzare Kubernetes Cluster Autoscaler.

    Importante

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

  • È possibile utilizzare un modello di avvio personalizzato per un maggiore livello di flessibilità e personalizzazione durante l'implementazione dei nodi gestiti. Ad esempio, è possibile specificare argomenti kubelet aggiuntivi e utilizzare un'AMI personalizzata. Per ulteriori informazioni, consulta Personalizzazione di nodi gestiti con un modello di avvio. Se non si utilizza un modello di avvio personalizzato quando si crea per la prima volta un gruppo di nodi gestiti, è disponibile un modello di avvio generato automaticamente. Non modificare manualmente questo modello generato automaticamente o si verificano errori.

  • Amazon EKS segue il modello di responsabilità condivisa per i CVE e le patch di sicurezza sui gruppi di nodi gestiti. Quando i nodi gestiti eseguono un'AMI ottimizzata per Amazon EKS, Amazon EKS è responsabile della creazione di versioni con patch dell'AMI quando vengono segnalati bug o problemi. A questo scopo vengono pubblicate delle correzioni. L'utente è invece responsabile della distribuzione di queste versioni AMI con patch ai gruppi di nodi gestiti. Quando i nodi gestiti eseguono un'AMI personalizzata, l'utente è responsabile della creazione di versioni con patch dell'AMI quando vengono segnalati bug o problemi, oltre che della distribuzione dell'AMI. Per ulteriori informazioni, consulta Aggiornamento di un gruppo di nodi gestiti.

  • I gruppi di nodi gestiti Amazon EKS possono essere avviati in sottoreti pubbliche e private. Se si avvia un gruppo di nodi gestiti in una sottorete pubblica in data 22 aprile 2020 o successiva, sarà necessario che la sottorete abbia MapPublicIpOnLaunch impostato su VERO affinché le istanze possano partecipare correttamente a un cluster. Se la sottorete pubblica è stata creata utilizzando eksctl o i modelli AWS CloudFormation forniti da Amazon EKS in data 26 marzo 2020 o successiva, questa impostazione è già impostata su VERO. Se le sottoreti pubbliche sono state create prima del 26 marzo 2020 devi modificare manualmente l'impostazione. Per ulteriori informazioni, consulta Modifica dell'attributo di assegnazione degli indirizzi IPv4 pubblici per la sottorete.

  • Quando si utilizzano endpoint VPC nelle sottoreti private, è necessario creare gli endpoint per com.amazonaws.region.ecr.api, com.amazonaws.region.ecr.dkr, e un endpoint gateway per Amazon S3. Per ulteriori informazioni consultare endpoint VPC di interfaccia Amazon ECR (AWS PrivateLink).

  • I gruppi di nodi gestiti non possono essere distribuiti su AWS Outposts o nelle zone locali AWS Wavelength o AWS.

  • È possibile creare più gruppi di nodi gestiti all'interno di un singolo cluster. Ad esempio, è possibile creare un gruppo di nodi con l'AMI Linux 2 standard ottimizzata per Amazon EKS per alcuni carichi di lavoro e un altro gruppo con la variante GPU per i carichi di lavoro che richiedono il supporto della GPU.

  • Se il gruppo di nodi gestiti rileva un errore di controllo dello stato dell'istanza Amazon EC2, Amazon EKS restituirà un messaggio di errore che consente di diagnosticare il problema. Per ulteriori informazioni, consulta Codici di errore dei gruppi di nodi gestiti.

  • Amazon EKS aggiunge le etichette Kubernetes alle istanze del gruppo di nodi gestiti. Queste etichette fornite da Amazon EKS hanno il prefisso eks.amazonaws.com.

  • Amazon EKS svuota automaticamente i nodi utilizzando l'API Kubernetes durante le interruzioni o gli aggiornamenti.

  • I budget di interruzione del pod non vengono rispettati quando si termina un nodo con AZRebalance o si riduce il numero di nodi desiderato. Queste azioni cercano di rimuovere i pod dal nodo, ma se ci vogliono vengono impiegati più di 15 minuti, il nodo viene terminato indipendentemente dal fatto che tutti i pod del nodo siano terminati. Per prolungare il periodo fino alla terminazione del nodo, aggiungi un hook del ciclo di vita al gruppo con scalabilità automatica. Per ulteriori informazioni, consulta Aggiungere un hook del ciclo di vita nella Guida per l'utente di Dimensionamento automatico Amazon EC2.

  • L'aggiornamento di gruppi di nodi gestiti rispettano i budget di interruzione pod impostati per i pods. Per ulteriori informazioni, consulta Comportamento dell'aggiornamento del nodo gestito.

  • I gruppi di nodi gestiti Amazon EKS non prevedono costi aggiuntivi. Sono previsti costi solo per le risorse AWS per cui si effettua il provisioning.

  • Se si desidera crittografare i volumi Amazon EBS per i nodi, è possibile implementare i nodi utilizzando un modello di avvio. Per implementare nodi gestiti con volumi Amazon EBS crittografati senza utilizzare un modello di avvio, crittografare tutti i nuovi volumi Amazon EBS creati nell'account. Per ulteriori informazioni, consultare la sezione Crittografia per impostazione predefinita nella Guida per l'utente di Amazon EC2 per le istanze Linux.

Tipi di capacità del gruppo di nodi gestiti

Quando si crea un gruppo di nodi gestito, è possibile scegliere il tipo di capacità su on demand o Spot. Amazon EKS implementa un gruppo di nodi gestito con un gruppo di Dimensionamento automatico Amazon EC2 che contiene solo istanze on demand o solo istanze spot Amazon EC2. All'interno di un singolo cluster Kubernetes, puoi pianificare i pods per le applicazioni a tolleranza d'errore su gruppi di nodi gestiti Spot e per le applicazioni non a tolleranza d'errore su gruppi di nodi on demand. Per impostazione predefinita, un gruppo di nodi gestito distribuisce istanze Amazon EC2 on demand.

On demand

Con Istanze on demand, sono previsti costi per la capacità di calcolo entro la seconda ora senza impegni a lungo termine.

Come funziona

Per impostazione predefinita, se non specifichi un Capacity Type (Tipo di capacità), il provisioning del gruppo di nodi gestiti viene eseguito con istanze on demand. Un gruppo di nodi gestiti configura un gruppo Amazon EC2 Auto Scaling per conto dell'utente con le seguenti impostazioni applicate:

  • La strategia di allocazione per il provisioning della capacità On-Demand è impostata su prioritized. Il gruppo di nodi gestiti utilizza l'ordine dei tipi di istanze approvata dall'API per determinare quale tipo di istanza utilizzare prima per soddisfare la capacità on demand. Ad esempio, è possibile specificare tre tipi di istanza nell'ordine seguente: c5.large, c4.large, e c3.large. Quando le istanze on demand vengono avviate, il gruppo di nodi gestiti soddisfa la capacità on demand a partire da c5.large, quindi c4.large, e infine c3.large. Per maggiori informazioni, consultare Gruppo Amazon EC2 Auto Scaling nella Guida per l'utente di Amazon EC2 Auto Scaling.

  • Amazon EKS aggiunge l'etichetta Kubernetes seguente a tutti i nodi del gruppo di nodi gestiti che specifica il tipo di capacità: eks.amazonaws.com/capacityType: ON_DEMAND. È possibile utilizzare questa etichetta sui nodi on demand per pianificare applicazioni con stato o fault intolerant.

Spot

Le istanze Spot di Amazon EC2 sono capacità Amazon EC2 di riserva che offrono sconti elevati rispetto ai prezzi on demand. Quando EC2 necessita nuovamente della capacità in uso nelle istanze Spot Amazon EC2, questa essere interrotta con una notifica di interruzione di due minuti. Per ulteriori informazioni, consultare Istanze Spot nella Guida per l'utente di Amazon EC2 per le istanze Linux. É possibile configurare un gruppo di nodi gestito con Istanze spot Amazon EC2 per ottimizzare i costi per i nodi di calcolo in esecuzione nel tuo cluster Amazon EKS.

Come funziona

Per utilizzare istanze Spot all'interno di un gruppo di nodi gestiti, creare un gruppo di nodi gestiti impostando il tipo di capacità come spot. Applicando le seguenti best practices Spot, un gruppo di nodi gestiti configura un gruppo Amazon EC2 Auto Scaling per conto dell'utente:

  • La strategia di allocazione per il provisioning della capacità Spot è impostata su capacity-optimized per garantire che i nodi Spot vengano eseguiti nei pool di capacità Spot ottimali. Per aumentare il numero di pool di capacità Spot disponibili da cui allocare le capacità, configurare un gruppo di nodi gestiti per l'utilizzo di più tipi di istanza.

  • Amazon EC2 Spot Capacity Rebalancing è abilitato in modo che Amazon EKS possa svuotare e bilanciare correttamente i nodi Spot per ridurre al minimo le interruzioni delle applicazioni quando un nodo Spot è a rischio elevato di interruzione. Per maggiori informazioni, consultare Rebalancing Capacity di Amazon EC2 Auto Scaling nella Guida per l'utente di Amazon EC2 Auto Scaling.

    • Quando un nodo Spot riceve un suggerimento di ribilanciamento, Amazon EKS tenta automaticamente di avviare un nuovo nodo Spot sostitutivo e attende fin quando questo non si unisce correttamente al cluster.

    • Quando un nodo Spot sostitutivo viene avviato ed è allo stato Ready su Kubernetes, Amazon EKS isola e svuota il nodo Spot che ha ricevuto il suggerimento di ribilanciamento. L'isolamento del nodo Spot assicura che il controller di servizio non invii nuove richieste a questo nodo Spot. Il nodo viene rimosso anche dall'elenco elenco di nodi Spot sani e attivi. Lo svuotamento del nodo Spot assicura che i pods in esecuzione vengano espulsi in modo aggraziato.

    • Se un avviso di interruzione Spot di due minuti arriva prima che il nodo Spot sostitutivo si trovi in uno stato Ready, Amazon EKS inizia a svuotare il nodo Spot che ha ricevuto il suggerimento di ribilanciamento.

  • Amazon EKS aggiunge l'etichetta Kubernetes seguente a tutti i nodi del gruppo di nodi gestiti che specifica il tipo di capacità: eks.amazonaws.com/capacityType: SPOT. È possibile utilizzare questa etichetta per pianificare applicazioni fault tolerant sui nodi Spot.

Considerazioni per la selezione di un tipo di capacità

Quando si decide se implementare un gruppo di nodi con capacità On-Demand o Spot, è necessario considerare le seguenti condizioni:

  • Le istanze Spot sono consigliate per applicazioni senza stato, fault tolerant e flessibili. Queste includono carichi di lavoro di formazione batch e machine learning, ETL di big data come Apache Spark, applicazioni di elaborazione delle code ed endpoint API senza stato. Poiché Spot è una capacità Amazon EC2 di riserva che può cambiare nel tempo, consigliamo di utilizzare la capacità Spot per carichi di lavoro con tolleranza di interruzione. Più specificamente, la capacità Spot è adatta per carichi di lavoro in grado di tollerare periodi in cui la capacità richiesta non è disponibile.

  • Consigliamo di utilizzare On-demand per le applicazioni che sono fault intolerant. Ciò include strumenti di gestione dei cluster come strumenti di monitoraggio e operativi, implementazioni che richiedono StatefulSets e applicazioni con stato, come database.

  • Per ottimizzare la disponibilità delle applicazioni durante l'utilizzo di istanze Spot, è consigliabile configurare un gruppo di nodi gestiti Spot per l'utilizzo di più tipi di istanza. Quando si utilizzano più tipi di istanza, si consiglia di applicare le seguenti regole:

    • All'interno di un gruppo di nodi gestiti, se si utilizza Cluster Autoscaler, si consiglia di utilizzare un set flessibile di tipi di istanza con la stessa quantità di vCPU e risorse di memoria. Questo per garantire che i nodi del cluster vengano dimensionati come previsto. Ad esempio, se sono necessarie quattro vCPU e otto memorie GiB, utilizzare c3.xlarge, c4.xlarge, c5.xlarge, c5d.xlarge, c5a.xlarge, c5n.xlarge o altri tipi di istanza simili.

    • Per migliorare la disponibilità delle applicazioni, si consiglia di implementare più gruppi di nodi gestiti Spot. Per questo, ogni gruppo dovrebbe utilizzare un set flessibile di tipi di istanza con le stesse risorse vCPU e memoria. Ad esempio, se sono necessarie 4 vCPU e 8 memorie GiB, si consiglia di creare un gruppo di nodi gestiti con c3.xlarge, c4.xlarge, c5.xlarge, c5d.xlarge, c5a.xlarge, c5n.xlarge o altri tipi di istanza simili; e un secondo gruppo di nodi gestiti con m3.xlarge, m4.xlarge, m5.xlarge, m5d.xlarge, m5a.xlarge, m5n.xlarge o altri tipi di istanza simili.

    • Quando si implementa il gruppo di nodi con il tipo di capacità Spot che utilizza un modello di avvio personalizzato, utilizzare l'API per passare più tipi di istanza. Non passare un singolo tipo di istanza tramite il modello di avvio. Per ulteriori informazioni sull'implementazione di un gruppo di nodi tramite un modello di avvio, vedere Personalizzazione di nodi gestiti con un modello di avvio.