Questo argomento spiega come scalare i cluster di carichi di lavoro Tanzu Kubernetes Grid (TKG) e i cluster di gestione autonomi, utilizzando i seguenti metodi:
Scalabilità automatica: Per i cluster di carichi di lavoro distribuiti da un cluster di gestione autonomo, è possibile utilizzare Cluster Autoscaler per scalare automaticamente il numero di nodi di lavoro per soddisfare la domanda. Vedere Scalabilità dei nodi worker locali con Cluster Autoscaler.
Non è possibile utilizzare la scalabilità automatica per scalare i cluster del carico di lavoro distribuiti da un cluster supervisore.
Scala orizzontale: Per i carichi di lavoro o i cluster di gestione autonomi, è possibile scalare manualmente il numero di nodi del piano di controllo e di lavoro. Vedere Scalare orizzontalmente un cluster.
Scala verticale: Per i cluster del carico di lavoro, è possibile modificare manualmente le dimensioni del piano di controllo e dei nodi di lavoro. Vedere Scalare verticalmente un cluster.
Notaper scalare i nodi in un pool di nodi, vedere Aggiornamento dei pool di nodi in Gestione di pool di nodi di diversi tipi di macchine virtuali.
Cluster Autoscaler è un programma Kubernetes che scala automaticamente i cluster Kubernetes in base alle esigenze dei cluster del carico di lavoro. Utilizzare Cluster Autoscaler solo per i cluster del carico di lavoro distribuiti da un cluster di gestione autonomo.
Per ulteriori informazioni su Cluster Autoscaler, vedere la seguente documentazione in GitHub:
Per impostazione predefinita, Cluster Autoscaler è disattivato in Tanzu Kubernetes Grid. Per abilitare il servizio Cluster Autoscaler in un cluster del carico di lavoro, impostare ENABLE_AUTOSCALER
su true
e impostare le opzioni AUTOSCALER_
nel file di configurazione del cluster o come variabili di ambiente prima di eseguire tanzu cluster create --file
.
ImportantePer i cluster basati sulla classe, a causa di un problema di propagazione delle etichette nell'API cluster, dopo aver creato un cluster del carico di lavoro basato sulla classe, è necessario aggiungere manualmente le annotazioni
min-size
emax-size
agli oggettiMachineDeployment
per abilitare Cluster Autoscaler, come descritto in (Aggiunta manuale delle annotazioni di dimensione minima e massima)[#cc-workaround] di seguito.
Ciascuna variabile di configurazione di Cluster Autoscaler in un file di configurazione del cluster corrisponde a un parametro dello strumento Cluster Autoscaler. Per un elenco di queste variabili e dei relativi valori predefiniti, vedere Cluster Autoscaler nelle Informazioni di riferimento sulle variabili del file di configurazione.
Le impostazioni AUTOSCALER_*_SIZE
limitano il numero di nodi worker in un cluster, mentre AUTOSCALER_MAX_NODES_TOTAL
limita il numero di tutti i nodi, ovvero worker e piano di controllo.
Impostare i valori di AUTOSCALER_*_SIZE
in base al numero di nodi worker nel cluster:
dev
, impostare AUTOSCALER_MIN_SIZE_0
e AUTOSCALER_MAX_SIZE_0
.prod
, impostare:
AUTOSCALER_MIN_SIZE_0
e AUTOSCALER_MAX_SIZE_0
AUTOSCALER_MIN_SIZE_1
e AUTOSCALER_MAX_SIZE_1
AUTOSCALER_MIN_SIZE_2
e AUTOSCALER_MAX_SIZE_2
Di seguito viene fornito un esempio di impostazioni di Cluster Autoscaler in un file di configurazione del cluster. Non è possibile modificare questi valori dopo aver distribuito il cluster.
#! ---------------------------------------------------------------------
#! Autoscaler related configuration
#! ---------------------------------------------------------------------
ENABLE_AUTOSCALER: false
AUTOSCALER_MAX_NODES_TOTAL: "0"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_ADD: "10m"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_DELETE: "10s"
AUTOSCALER_SCALE_DOWN_DELAY_AFTER_FAILURE: "3m"
AUTOSCALER_SCALE_DOWN_UNNEEDED_TIME: "10m"
AUTOSCALER_MAX_NODE_PROVISION_TIME: "15m"
AUTOSCALER_MIN_SIZE_0:
AUTOSCALER_MAX_SIZE_0:
AUTOSCALER_MIN_SIZE_1:
AUTOSCALER_MAX_SIZE_1:
AUTOSCALER_MIN_SIZE_2:
AUTOSCALER_MAX_SIZE_2:
Per ciascun cluster del carico di lavoro creato con Cluster Autoscaler abilitato, Tanzu Kubernetes Grid crea una distribuzione del servizio Cluster Autoscaler nel cluster di gestione. Per disattivare Cluster Autoscaler, eliminare la distribuzione di Cluster Autoscaler associata al cluster del carico di lavoro.
Dopo aver creato un cluster del carico di lavoro basato sulla classe con Cluster Autoscaler abilitato, è necessario aggiungere manualmente le annotazioni min-size
e max-size
ai relativi oggetti MachineDeployment
come indicato di seguito, a causa di un problema di propagazione delle etichette nell'API cluster:
Impostare il contesto di kubectl
sul cluster di gestione:
kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
In cui MY-MGMT-CLUSTER
è il nome del cluster di gestione.
Elencare gli oggetti MachineDeployment
e prendere nota dei valori AGE
:
kubectl get md
I nomi degli oggetti terminano con -md
seguiti da un numero per ogni zona di disponibilità (ZD).
Per ogni MachineDeployment
nel cluster:
Aggiungere un'annotazione min-size
:
kubectl annotate machinedeployment MD-NAME cluster.k8s.io/cluster-api-autoscaler-node-group-min-size="MIN-SIZE"
In cui:
MD-NAME
è il nome dell'oggetto MachineDeployment
, ad esempio my-wc-md-0
MIN-SIZE
è il valore AUTOSCALER_MIN_SIZE_*
per la ZD, ad esempio il valore AUTOSCALER_MIN_SIZE_0
per *-md0
, che viene distribuito alla prima ZD.Aggiungere un'annotazione max-size
:
kubectl annotate machinedeployment MD-NAME cluster.k8s.io/cluster-api-autoscaler-node-group-max-size="MAX-SIZE"
MAX-SIZE
rappresenta il numero massimo di nodi MachineDeployment
per la ZD, come sopra.
È possibile scalare orizzontalmente un cluster TKG in due modi, in base al tipo di cluster:
replicas
nella definizione del cluster, come descritto nella seguente sezione Scalabilità di un cluster basato sulla classe.Per scalare orizzontalmente un carico di lavoro o un cluster di gestione autonomo utilizzando la CLI di Tanzu, eseguire il comando tanzu cluster scale
.
ImportanteNon modificare il contesto o modificare il file
.kube-tkg/config
mentre sono in esecuzione le operazioni di Tanzu Kubernetes Grid.
--controlplane-machine-count
e --worker-machine-count
impostano il nuovo numero di nodi del piano di controllo e di nodi worker rispettivamente.Esempi:
Per scalare un cluster in modo che contenga 5 nodi del piano di controllo e 10 nodi worker:
tanzu cluster scale MY-CLUSTER --controlplane-machine-count 5 --worker-machine-count 10
Se si distribuisce un cluster con --controlplane-machine-count 1
e poi lo si scala fino a 3 nodi del piano di controllo, Tanzu Kubernetes Grid abilita automaticamente HA con stack nel piano di controllo.
Se il cluster è in esecuzione in uno spazio dei nomi diverso da default
, è necessario includere l'opzione --namespace
:
tanzu cluster scale MY-CLUSTER --controlplane-machine-count 5 --worker-machine-count 10 --namespace=MY-NAMESPACE
vSphere con cluster di gestione autonomo: Dopo aver modificato il numero di nodi di un cluster su vSphere distribuito con un cluster di gestione autonomo, le prenotazioni DHCP degli indirizzi IP di tutti gli indirizzi IP dei nodi aggiunti o rimossi devono essere riservate o rilasciate. Per modificare manualmente queste prenotazioni, vedere Configurazione delle prenotazioni DHCP dei nodi e del record DNS dell'endpoint (solo vSphere). Per istruzioni su come configurare le prenotazioni DHCP, consultare la documentazione del server DHCP.
vSphere con cluster supervisore Nei cluster eseguiti in vSphere with Tanzu, è possibile eseguire solo 1 nodo del piano di controllo o 3 nodi del piano di controllo. È possibile aumentare il numero di nodi del piano di controllo da 1 a 3, ma non è possibile ridurre il numero da 3 a 1.
La procedura di scalabilità verticale di un cluster del carico di lavoro dipende dal tipo di cluster.
eseguire la procedura indicata in Updating Infrastructure Machine Templates in The Cluster API Book, che consente di modificare il modello di macchina del cluster.
La procedura scarica il modello di macchina esistente del cluster con un comando kubectl get
che è possibile creare nel modo seguente:
kubectl get MACHINE-TEMPLATE-TYPE MACHINE-TEMPLATE-NAME -o yaml
In cui:
MACHINE-TEMPLATE-TYPE
è:
VsphereMachineTemplate
in vSphereAWSMachineTemplate
in Amazon Web Services (AWS)AzureMachineTemplate
in AzureMACHINE-TEMPLATE-NAME
è il nome del modello di macchina per i nodi del cluster che si stanno scalando, che utilizza il formato:
CLUSTER-NAME-control-plane
per i nodi del piano di controlloCLUSTER-NAME-worker
per i nodi workerAd esempio:
kubectl get VsphereMachineTemplate monitoring-cluster-worker -o yaml
Per scalare verticalmente un cluster basato sulla classe, modificare le impostazioni di machine
nella sua definizione del cluster, come descritto in Scalabilità di un cluster basato sulla classe, di seguito.
Per scalare orizzontalmente o verticalmente un cluster basato sulla classe utilizzando la sua configurazione topology
:
Impostare kubectl
sul contesto del cluster di gestione, ad esempio:
kubectl config use-context management-cluster@admin
Eseguire kubectl edit cluster CLUSTER-NAME
e modificare le impostazioni nel relativo blocco topology
in controlPlane
e worker
.
Per scalare orizzontalmente, modificare le impostazioni replicas
. Per scalare verticalmente, modificare le impostazioni in machine
.
Ad esempio:
- name: controlPlane
value:
replicas: 3
machine:
diskGiB: 20
memoryMiB: 8192
numCPUs: 4
- name: worker
value:
replicas: 5
machine:
diskGiB: 20
memoryMiB: 8192
numCPUs: 4