Per scalare i tuoi carichi di lavoro su GKE su AWS, puoi configurare i tuoi AWSNodePool in modo che vengano scalati automaticamente o creare ed eliminare manualmente gli AWSNodePool per aumentare o ridurre la scalabilità.
Programma di scalabilità automatica del cluster
GKE su AWS implementa lo scalatore automatico del cluster di Kubernetes. Quando la domanda sui nodi è elevata, il gestore della scalabilità automatica dei cluster aggiunge nodi al pool di nodi. Quando la domanda è bassa, il gestore della scalabilità automatica dei cluster esegue lo scale down fino a una dimensione minima che hai designato. In questo modo puoi aumentare la disponibilità dei carichi di lavoro quando ne hai bisogno, tenendo sotto controllo 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 richieste dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire un provisioning eccessivo dei node pool. Invece, specifichi una dimensione minima e massima per il pool di nodi e il cluster viene 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 tuo workload è costituito da una singola replica, il pod di questa replica potrebbe essere riprogrammato su un nodo diverso se il nodo attuale viene eliminato. Prima di abilitare Cluster Autoscaler in AWSNodePool, progetta i tuoi workload in modo che tollerino potenziali interruzioni o assicurati che i pod critici non vengano interrotti.
Come funziona il gestore della scalabilità automatica dei cluster
Il gestore della scalabilità automatica dei cluster funziona per pool di nodi. Quando crei un pool di nodi, specifica una dimensione minima e massima per il pool di nodi nella risorsa Kubernetes AWSNodePool.
Puoi disattivare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount
su spec.maxNodeCount
in AWSNodePools.
Il gestore della scalabilità automatica dei 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é non ci sono nodi sufficienti nel pool di nodi, il gestore della scalabilità automatica del cluster aggiunge nodi fino alle dimensioni massime del pool di nodi. Se i nodi sono sottoutilizzati e tutti i pod potrebbero essere pianificati anche con un numero inferiore di nodi nel pool di nodi, il gestore della scalabilità automatica dei cluster rimuove i nodi fino alla dimensione minima del pool di nodi. Se non è possibile eseguire il svuotamento controllato del nodo dopo un periodo di timeout (10 minuti), il nodo viene terminato forzatamente. Il periodo di tolleranza non è configurabile.
Se i pod hanno richiesto risorse insufficienti (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 dei cluster funzioni nel modo più accurato possibile creando richieste di risorse adeguate per tutti i tuoi carichi di lavoro.
Criteri operativi
Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi quando ridimensiona un pool di nodi:
Tutti i pod replicati possono essere riavviati su un altro nodo, causando una breve interruzione. Se i tuoi servizi non tollerano interruzioni, ti sconsigliamo di utilizzare Cluster Autoscaler.
Tutti i nodi di un singolo pool di nodi hanno lo stesso insieme di etichette.
Se hai AWSNodePool con tipi di istanza diversi, Cluster Autoscaler prende in considerazione 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 da Cluster Autoscaler vengono assegnate le etichette specificate con --node-labels al momento della creazione del pool di nodi.
Ridimensiona un node pool
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 seguendo le istruzioni riportate in
Creazione di un cluster utente. 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 passare al servizio di gestione.cd anthos-aws anthos-gke aws management get-credentials
Per abilitare il gestore della scalabilità automatica dei cluster, modifica il manifest per il tuo AWSNodePool. Modifica il file
cluster-0.yaml
e trova la sezione AWSNodePool. Modifica i valori dispec.minNodeCount
espec.maxNodeCount
.L'esempio riportato di seguito mantiene la dimensione minima di questo pool di nodi a
3
nodi, ma consente al gestore della scalabilità automatica del cluster di aumentare 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 ...
Dopodiché, applica il file 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
. Al termine dello scaling, AWSNodePool 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 diversi 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 anche scalare il cluster creando nuovi AWSNodePool. Quando crei un nuovo AWSNodePool, puoi anche aumentare o diminuire le 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 non 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 visualizzare altre opzioni, leggi la documentazione di riferimento su AWSNodePool.