Per scalare i tuoi workload su GKE su AWS, puoi configurare i pool di nodi AWS per eseguire il ridimensionamento automatico oppure creare ed eliminare manualmente i pool di nodi AWS per eseguire il ridimensionamento verso l'alto o verso il basso.
Programma di scalabilità automatica del cluster
GKE su AWS implementa Cluster Autoscaler 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 riduce le dimensioni a un valore minimo da te 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 pool di nodi. Specifica invece una dimensione minima e massima per il pool di nodi e il cluster si ridimensiona automaticamente.
Se le risorse vengono eliminate o spostate durante la scalabilità automatica del cluster, i carichi di lavoro potrebbero subire interruzioni transitorie. Ad esempio, se il tuo carico di lavoro è costituito da una singola replica, il pod di quella replica potrebbe essere riprogrammato su un altro nodo se il nodo corrente viene eliminato. Prima di abilitare la scalabilità automatica dei cluster nel tuo AWSNodePool, progetta i tuoi workload in modo da tollerare potenziali interruzioni o assicurati che i pod critici non vengano interrotti.
sui tuoi nodi, ad esempio la possibilità di applicare patch e aggiornarsi autonomamente. Componenti aggiuntivi, comecoredns
e konnectivity-agent
, dispongono di gestori della scalabilità automatica specifici con autorizzazioni per aumentare o diminuire la scalabilità del componente in base alle esigenze.
Come funziona il gestore della scalabilità automatica dei cluster
Il gestore della scalabilità automatica dei cluster funziona in base al 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 dei pod e dei 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 alla dimensione massima del pool di nodi. 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 alla dimensione minima del pool di nodi. Se non è possibile svuotare il nodo in modo corretto dopo un periodo di timeout (10 minuti), il nodo viene terminato forzatamente. Il periodo di tolleranza non è configurabile.
Se i pod hanno richiesto risorse troppo poche (ad esempio se quelle predefinite 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ù preciso 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 supposizioni quando ridimensiona un pool di nodi:
Tutti i pod replicati possono essere riavviati su un altro nodo, causando eventualmente una breve interruzione. Se i tuoi servizi non tollerano interruzioni, non consigliamo di utilizzare Cluster Autoscaler.
Tutti i nodi in un singolo pool di nodi hanno lo stesso insieme di etichette.
Se hai AWSNodePools con tipi di istanze diversi, Cluster Autoscaler prende in considerazione il costo relativo del lancio 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.
Ridimensionare 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.
Attivazione della scalabilità automatica del pool di nodi
Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare contesto e passare al servizio di gestione.cd anthos-aws anthos-gke aws management get-credentials
Per attivare il gestore della scalabilità automatica dei cluster, modifica il manifest per il tuo AWSNodePool. Modifica il file
cluster-0.yaml
e individua 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 aumentarla 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 file YAML per ridimensionare il pool di nodi.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
La risorsa AWSNodePool passerà a uno stato
Resizing
. Al termine dell'aumento di scalabilità, AWSNodePool passa allo statoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
L'output mostra che AWSNodePool è
Resizing
. Le operazioni di ridimensionamento richiedono 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 AWSNodePools. 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 nel seguente esempio. 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 basato su Ingress.
Per visualizzare altre opzioni, leggi la documentazione di riferimento su AWSNodePool.