Per scalare i workload su GKE su AWS, puoi configurare i tuoi AWSNodePools in modo che vengano scalati automaticamente o creare ed eliminare manualmente gli AWSNodePools per fare lo scale up o fare lo scale down.
Gestore della scalabilità automatica del cluster
GKE su AWS implementa il gestore della scalabilità automatica dei cluster 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 workload 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 workload. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire un provisioning eccessivo dei pool di nodi. Invece, devi specificare una dimensione minima e una 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 workload potrebbero subire interruzioni temporanee. Ad esempio, se il workload è costituito da una singola 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 in AWSNodePool, progetta i 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, devi specificare una dimensione minima e una massima per il pool di nodi nella AWSNodePool risorsa Kubernetes.
Puoi disabilitare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount uguale a spec.maxNodeCount su 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 dei cluster aggiunge nodi, fino alla dimensione massima del pool di nodi. Se i nodi sono sottoutilizzati e tutti i pod potrebbero essere pianificati anche con meno nodi nel pool di nodi, il gestore della scalabilità automatica dei cluster rimuove i nodi, fino alla dimensione minima del pool di nodi. Se il nodo non può essere svuotato normalmente dopo un periodo di timeout (10 minuti), viene terminato forzatamente. Il periodo di tolleranza non è configurabile.
Se i pod hanno richiesto troppe poche risorse (ad esempio, se i valori predefiniti non sono sufficienti), il gestore della scalabilità automatica dei 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 workload.
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 possibilmente una breve interruzione. Se i tuoi servizi non tollerano le interruzioni, ti sconsigliamo di utilizzare il gestore della scalabilità automatica dei cluster.
Tutti i nodi in un singolo pool di nodi hanno lo stesso insieme di etichette.
Se hai AWSNodePools con tipi di istanza diversi, il gestore della scalabilità automatica dei 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 dei cluster vengono assegnate le etichette specificate con --node-labels al momento della creazione del pool di nodi.
Ridimensiona un pool di nodi
Un AWSNodePool include
minNodeCount e maxNodeCount campi. 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
Creare un cluster utente. Tieni a portata di mano il file YAML (ad esempio, cluster-0.yaml) che crea il cluster.
Abilitare la scalabilità automatica del pool di nodi
Dalla directory
anthos-aws, utilizzaanthos-gkeper passare al contesto del 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 AWSNodePool. Modifica il file
cluster-0.yamle individua la sezione AWSNodePool. Modifica i valori dispec.minNodeCountespec.maxNodeCount.L'esempio seguente mantiene la dimensione minima di questo pool di nodi a
3nodi, ma consente al gestore della scalabilità automatica dei cluster di aumentare la sua dimensione a10nodi.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 ...Applica il file YAML per ridimensionare il pool di nodi.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yamlLa risorsa AWSNodePool passerà allo stato
Resizing. Al termine della scalabilità di AWSNodePool, la risorsa passa allo statoProvisioned.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePoolsL'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
Creare manualmente un nuovo AWSNodePool
Puoi anche scalare il cluster creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche eseguire 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.yamlModifica
new_nodepool.yamle 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 # OptionalPer 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, consulta la documentazione di riferimento su AWSNodePool.