Per scalare i carichi di lavoro su Cluster Anthos on AWS, puoi configurare i tuoi AWSNodePool per lo scale out automatico o creare ed eliminare manualmente i AWSNodePools per fare lo scale up o lo scale down.
Programma di scalabilità automatica del cluster
Cluster Anthos on 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 fa lo scale down alla dimensione minima designata. Questo può aumentare la disponibilità dei carichi di lavoro quando ti serve, 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 il provisioning eccessivo dei pool di nodi. Devi invece specificare una dimensione minima e massima per il pool di nodi e il cluster scala 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 una singola replica, il pod di quella replica potrebbe essere ripianificato su un nodo diverso se il suo nodo attuale viene eliminato. Prima di abilitare il gestore della scalabilità automatica dei cluster nel tuo AWSNodePool, progetta i tuoi carichi di lavoro per tollerare le potenziali interruzioni o assicurarti che i pod critici non vengano interrotti.
Come funziona il gestore della scalabilità automatica dei cluster
Il gestore della scalabilità automatica dei cluster lavora su base di pool di nodi. Quando crei un pool di nodi, specifichi una dimensione minima e massima per il pool di nodi nella risorsa Kubernetes AWSNodePool.
Puoi disabilitare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount
su spec.maxNodeCount
nei tuoi AWSNodePools.
Il gestore della scalabilità automatica dei cluster aumenta o diminuisce automaticamente la dimensione del pool di nodi in base alle richieste di risorse (anziché all'utilizzo effettivo delle risorse) dei pod in esecuzione sui nodi del pool. Controlla periodicamente lo stato di pod e nodi e interviene:
Se i pod non sono pianificabili perché non ci sono abbastanza nodi 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 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 controllato dopo un periodo di timeout (10 minuti), il nodo viene forzato. Il periodo di tolleranza non è configurabile.
Se i tuoi pod hanno richiesto un numero di risorse insufficiente (ad esempio, se i valori predefiniti non sono sufficienti), il gestore della scalabilità automatica dei cluster non corregge la situazione. Puoi assicurarti che il gestore della scalabilità automatica dei cluster funzioni nel modo più preciso possibile creando richieste di risorse adeguate per tutti i carichi di lavoro.
Criteri operativi
Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi durante il ridimensionamento di un pool di nodi:
Tutti i pod replicati possono essere riavviati su un altro nodo, causando probabilmente un'interruzione rapida. Se i tuoi servizi non tollerano interruzioni, 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 diversi tipi di istanza, Cluster Autoscaler 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 sono monitorate. Ai nodi creati dal gestore della scalabilità automatica dei cluster vengono assegnate etichette specificate con etichette --node 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 dell'AWSNodePool.
Prima di iniziare
Esegui il provisioning di un cluster utilizzando le istruzioni riportate in Creazione di un cluster utente. Avere il file YAML (ad esempio, cluster-0.yaml
) che crea il cluster disponibile.
Abilitazione della scalabilità automatica del pool di nodi
Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare il contesto del servizio di gestione.cd anthos-aws anthos-gke aws management get-credentials
Per abilitare il gestore della scalabilità automatica dei cluster, devi modificare il manifest per il tuo pool di annunci AWSNode. Modifica il file
cluster-0.yaml
e trova la sezione AWSNodePool. Modifica i valori perspec.minNodeCount
espec.maxNodeCount
.L'esempio seguente mantiene le dimensioni minime di questo pool di nodi a
3
nodi, ma consente al gestore della scalabilità automatica dei 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 diventerà in stato
Resizing
. Quando AWSNodePool completa la scalabilità, si sposta nello statoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
L'output mostra che l'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 pool AWSNode
Puoi anche scalare il tuo cluster creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche fare lo scale up o lo scale down delle dimensioni dell'istanza.
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 tuo cluster di gestione.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
Passaggi successivi
Eseguire il deployment di un servizio supportato da Ingress.
Per visualizzare altre opzioni, leggi la documentazione di riferimento su AWSNodePool.