Per scalare i carichi di lavoro su GKE su AWS, puoi configurare i pool AWSNode per lo scale out automatico oppure creare ed eliminare manualmente i pool AWSNode per lo scale up o lo scale down.
Programma di scalabilità automatica del cluster
GKE su AWS implementa il gestore della scalabilità automatica dei cluster di Kubernetes. Quando la domanda sui tuoi nodi è elevata, il gestore della scalabilità automatica dei cluster aggiunge nodi al pool di nodi. Quando la domanda è ridotta, il gestore della scalabilità automatica dei cluster esegue lo scale down alle dimensioni minime indicate. Ciò può aumentare la disponibilità dei carichi di lavoro quando ne hai bisogno, controllando al contempo i costi.
Panoramica
Il gestore della scalabilità automatica dei cluster ridimensiona automaticamente il numero di nodi in un determinato pool di nodi, in base alle esigenze dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire l'overprovisioning dei pool di nodi. ma specifichi una dimensione minima e una massima per il pool di nodi, in modo che il cluster venga scalato automaticamente.
Se le risorse vengono eliminate o spostate durante la scalabilità automatica del cluster, i carichi di lavoro potrebbero subire interruzioni temporanee. Ad esempio, se il carico di lavoro è costituito da un'unica replica, il pod della replica potrebbe essere ripianificato su un nodo diverso se il nodo attuale viene eliminato. Prima di abilitare il gestore della scalabilità automatica dei cluster nel tuo pool AWSNodePool, progetta i tuoi carichi di lavoro in modo da tollerare potenziali interruzioni o assicurati che i pod critici non vengano interrotti.
Come funziona il gestore della scalabilità automatica del cluster
Il gestore della scalabilità automatica del cluster funziona in base al pool di nodi. Quando crei un pool di nodi, specifichi una dimensione minima e una massima per il pool di nodi nella risorsa Kubernetes AWSNodePool.
Puoi disabilitare il gestore della scalabilità automatica del cluster impostando spec.minNodeCount
su spec.maxNodeCount
nei pool AWSNode.
Il gestore della scalabilità automatica del cluster aumenta o diminuisce automaticamente le dimensioni del pool di nodi, in base alle richieste di risorse (anziché all'utilizzo effettivo delle risorse) dei pod in esecuzione sui nodi del pool di nodi. Controlla periodicamente lo stato di pod e nodi e interviene:
Se i pod non sono pianificabili perché nel pool di nodi non sono presenti un numero sufficiente di nodi, il gestore della scalabilità automatica del cluster aggiunge nodi fino alla dimensione massima del pool. Se i nodi sono sottoutilizzati e tutti i pod possono essere pianificati anche con meno nodi nel pool di nodi, il gestore della scalabilità automatica dei cluster rimuove i nodi, fino al limite delle dimensioni minime del pool di nodi. Se non è possibile eseguire lo svuotamento controllato dopo un periodo di timeout (10 minuti), il nodo viene arrestato forzatamente. Il periodo di tolleranza non è configurabile.
Se i tuoi pod hanno richiesto un numero insufficiente di risorse (ad esempio se i valori predefiniti sono insufficienti), il gestore della scalabilità automatica del cluster non corregge la situazione. Puoi contribuire a garantire che il gestore della scalabilità automatica del cluster funzioni nel modo più preciso possibile creando richieste di risorse adeguate per tutti i tuoi carichi di lavoro.
Criteri operativi
Il gestore della scalabilità automatica del cluster formula le ipotesi seguenti durante il ridimensionamento di un pool di nodi:
Tutti i pod replicati possono essere riavviati su altri nodi, causando probabilmente una breve interruzione. Se i tuoi servizi non tollerano le interruzioni, non ti consigliamo di utilizzare il gestore della scalabilità automatica dei cluster.
Tutti i nodi in un singolo pool di nodi hanno lo stesso set di etichette.
Se hai AWSNodePool con tipi di istanza diversi, il gestore della scalabilità automatica del cluster considera il costo relativo dell'avvio di nuovi nodi e tenta di espandere il pool di nodi meno costoso.
Le etichette aggiunte manualmente dopo la creazione iniziale del cluster o del pool di nodi non vengono monitorate. Ai nodi creati dal gestore della scalabilità automatica del cluster vengono assegnate etichette specificate con --node-labels al momento della creazione del pool di nodi.
Ridimensiona un pool di nodi
Un AWSNodePool include i campi minNodeCount
e maxNodeCount
. Questi campi dichiarano un numero minimo e massimo di nodi worker nel pool. Puoi modificare questi valori prima o dopo la creazione
di AWSNodePool.
Prima di iniziare
Esegui il provisioning di un cluster utilizzando le istruzioni in Creazione di un cluster utente. Assicurati di avere a disposizione il file YAML (ad esempio cluster-0.yaml
) che crea il cluster.
Abilitazione della scalabilità automatica del pool di nodi
Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare contesto al servizio di gestione.cd anthos-aws anthos-gke aws management get-credentials
Per abilitare il gestore della scalabilità automatica del cluster, modifica il manifest del tuo AWSNodePool. Modifica il file
cluster-0.yaml
e trova la sezione AWSNodePool. Modifica i valori dispec.minNodeCount
espec.maxNodeCount
.L'esempio seguente mantiene le dimensioni minime di questo pool di nodi su
3
nodi, ma consente al gestore della scalabilità automatica del cluster di aumentarne le dimensioni fino a10
nodi.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: cluster-0-pool-0 spec: clusterName: cluster-0 version: 1.25.5-gke.2100 minNodeCount: 3 maxNodeCount: 10 ...
Quindi, applica il codice YAML per ridimensionare il pool di nodi.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
La risorsa AWSNodePool passerà allo stato
Resizing
. Quando AWSNodePool completa la scalabilità, passa allo statoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
L'output mostra che AWSNodePool è
Resizing
. Il completamento delle operazioni di ridimensionamento richiede alcuni minuti.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Creazione manuale di un nuovo AWSNodePool
Puoi scalare il cluster anche creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche fare lo scale up o lo scale down delle dimensioni delle istanze.
Puoi recuperare il manifest di configurazione di un AWSNodePool esistente con
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
Modifica
new_nodepool.yaml
e rimuovi le sezioni che non sono presenti nell'esempio seguente. Salva il file.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional
Per creare un nuovo AWSNodePool, applica il manifest al cluster di gestione.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
Passaggi successivi
Esegui il deployment di un servizio supportato da Ingress.
Per ulteriori opzioni, leggi la documentazione di riferimento su AWSNodePool.