Crea un pool di nodi

Per creare un pool di nodi in GKE su AWS, devi fornire le seguenti risorse:

  • Il nome di un cluster AWS esistente in cui creare il pool di nodi
  • Un profilo di istanza IAM per le VM del pool di nodi
  • Una subnet in cui verranno eseguite le VM del pool di nodi

Se vuoi l'accesso SSH ai nodi, puoi creare una coppia di chiavi EC2.

Crea un pool di nodi standard

Quando queste risorse sono disponibili, puoi creare un pool di nodi con questo comando:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome che scegli per il pool di nodi
  • CLUSTER_NAME: il nome del cluster a cui collegare il pool di nodi
  • INSTANCE_TYPE: il tipo di istanza della macchina AWS desiderato per il pool di nodi, ad esempio m5.large
  • ROOT_VOLUME_SIZE: la dimensione desiderata per il volume principale di ciascun nodo, in GB
  • NODEPOOL_PROFILE: il profilo dell'istanza IAM per le VM del pool di nodi. Per maggiori dettagli su come aggiornare un profilo di istanza IAM, consulta Aggiornare il profilo dell'istanza AWS IAM.
  • NODE_VERSION: la versione di Kubernetes da installare su ciascun nodo nel pool di nodi (ad es. "1.29.3-gke.600")
  • MIN_NODES: il numero minimo di nodi che il pool di nodi può contenere
  • MAX_NODES: il numero massimo di nodi che il pool di nodi può contenere
  • MAX_PODS_PER_NODE: il numero massimo di pod che possono essere creati su qualsiasi singolo nodo nel pool
  • GOOGLE_CLOUD_LOCATION: il nome della località Google Cloud da cui verrà gestito questo pool di nodi
  • NODEPOOL_SUBNET: l'ID della subnet su cui verrà eseguito il pool di nodi.
    • Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizio del cluster e la rete di subnet del pool di nodi. Per ulteriori informazioni sulla selezione di intervalli IP di pod e servizio per il tuo cluster, consulta Selezionare intervalli CIDR per il cluster
    • Se questa subnet si trova all'esterno del blocco CIDR principale del VPC, sono necessari alcuni passaggi aggiuntivi. Per maggiori informazioni, vedi gruppi di sicurezza.
  • SSH_KEY_PAIR_NAME: il nome della coppia di chiavi SSH di AWS creata per l'accesso SSH (facoltativo)
  • CONFIG_KMS_KEY_ARN: l'Amazon Resource Name (ARN) della chiave KMS AWS che cripta i dati utente

Se presente, il parametro --tags applica il tag specificato a tutti i nodi nel pool di nodi. Questo esempio contrassegna tutti i nodi nel pool con i nomi del cluster e del pool di nodi a cui appartiene il nodo.

Pool di nodi dell'istanza spot

GKE su AWS supporta i pool di nodi istanze spot AWS come funzionalità in anteprima. I pool di nodi delle istanze spot sono pool di istanze spot Amazon EC2 disponibili su AWS a un costo inferiore.

Le istanze spot consentono di risparmiare sui costi per le applicazioni stateless, a tolleranza di errore e flessibili. Tuttavia, non sono particolarmente adatte per carichi di lavoro rigidi, stateful, intolleranti agli errori o caratterizzati dall'alto accoppiamento tra i nodi delle istanze. Le istanze spot possono essere interrotte da Amazon EC2 quando EC2 ha bisogno di recuperare la capacità e quindi sono soggette a fluttuazioni nel mercato Spot. Se i tuoi carichi di lavoro richiedono capacità garantita e non possono tollerare periodi occasionali di indisponibilità, scegli un pool di nodi standard anziché un pool di nodi di istanze spot.

La strategia di allocazione utilizzata in GKE su AWS è incentrata sulla selezione dei pool di istanze spot con la massima disponibilità di capacità, riducendo al minimo il rischio di interruzioni. Questo approccio è particolarmente utile per i carichi di lavoro con un costo di interruzione più elevato, come il rendering di immagini e contenuti multimediali o il deep learning. Nello specifico, è stata implementata la strategia di allocazione capacityOptimized, come descritto in Strategie di allocazione per le istanze spot.

Crea un pool di nodi Spot

Per creare un pool di nodi di istanza spot, esegui il comando seguente:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome da assegnare a questo pool di nodi.
  • CLUSTER_NAME: il nome del cluster a cui vuoi collegare questo pool di nodi.
  • INSTANCE_TYPE_LIST: un elenco separato da virgole di tipi di istanze AWS EC2. Il pool di nodi esegue il provisioning delle istanze Spot con questi tipi di istanza. I tipi di istanza devono avere la stessa architettura di CPU, lo stesso numero di CPU e la stessa quantità di memoria. Ad esempio: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Puoi utilizzare lo strumento Selettore di istanze Amazon EC2 per trovare tipi di istanze che hanno configurazioni di CPU e memoria identiche.
  • ROOT_VOLUME_SIZE: la dimensione desiderata per il volume principale di ciascun nodo, in GB
  • NODEPOOL_PROFILE: il profilo dell'istanza IAM per le VM del pool di nodi
  • NODE_VERSION: la versione di Kubernetes da installare su ciascun nodo nel pool di nodi (ad es. "1.29.3-gke.600")
  • MIN_NODES: il numero minimo di nodi che il pool di nodi può contenere
  • MAX_NODES: il numero massimo di nodi che il pool di nodi può contenere
  • MAX_PODS_PER_NODE: il numero massimo di pod che possono essere creati su qualsiasi singolo nodo nel pool
  • GOOGLE_CLOUD_LOCATION: il nome della località Google Cloud da cui verrà gestito questo pool di nodi
  • NODEPOOL_SUBNET: l'ID della subnet su cui verrà eseguito il pool di nodi.
    • Non deve esserci alcuna sovrapposizione tra gli intervalli IP di pod/servizio del cluster e la rete di subnet del pool di nodi. Per ulteriori informazioni sulla selezione di intervalli IP di pod e servizio per il tuo cluster, consulta Selezionare intervalli CIDR per il cluster
    • Se questa subnet si trova all'esterno del blocco CIDR principale del VPC, sono necessari alcuni passaggi aggiuntivi. Per maggiori informazioni, vedi gruppi di sicurezza.
  • SSH_KEY_PAIR_NAME: il nome della coppia di chiavi SSH di AWS creata per l'accesso SSH (facoltativo)
  • CONFIG_KMS_KEY_ARN: l'Amazon Resource Name (ARN) della chiave KMS AWS che cripta i dati utente

La best practice è elencare una serie di tipi di istanza nel campo INSTANCE_TYPE_LIST. Questa best practice è importante perché se un pool di nodi è configurato con un solo tipo di istanza e tale tipo di istanza non è disponibile in nessuna zona di disponibilità desiderata, il pool di nodi non può eseguire il provisioning di nuovi nodi. Ciò può influire sulla disponibilità delle tue applicazioni e causare interruzioni del servizio.

Tieni presente che il campo spot-instance-types si escludono a vicenda e il campo instance-type. Ciò significa che puoi fornire solo uno di questi campi e non entrambi.