Scalare cluster

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.

Nota

per 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.

Scalabilità dei nodi worker locali con Cluster Autoscaler (Cluster di gestione autonomo)

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.

Importante

Per 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 e max-size agli oggetti MachineDeployment 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:

  • Per i cluster con un singolo nodo worker, ad esempio i cluster dev, impostare AUTOSCALER_MIN_SIZE_0 e AUTOSCALER_MAX_SIZE_0.
  • Per i cluster con più nodi worker, ad esempio i cluster 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.

Aggiunta manuale delle annotazioni di dimensione minima e massima

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:

  1. 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.

  2. 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).

  3. Per ogni MachineDeployment nel cluster:

    1. 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.
    2. 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.

Scalare orizzontalmente un cluster

È possibile scalare orizzontalmente un cluster TKG in due modi, in base al tipo di cluster:

  • Tutti i cluster Utilizzare la CLI di Tanzu, come descritto immediatamente di seguito
  • Cluster dei carichi di lavoro basati sulla classe Modificare le impostazioni 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.

Importante

Non modificare il contesto o modificare il file .kube-tkg/config mentre sono in esecuzione le operazioni di Tanzu Kubernetes Grid.

  • Piano di controllo e nodi di lavoro: Le opzioni --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.

Scalare verticalmente un cluster

La procedura di scalabilità verticale di un cluster del carico di lavoro dipende dal tipo di cluster.

TKC e cluster basati sul piano

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 vSphere
    • AWSMachineTemplate in Amazon Web Services (AWS)
    • AzureMachineTemplate in Azure
  • MACHINE-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 controllo
    • CLUSTER-NAME-worker per i nodi worker

Ad esempio:

kubectl get VsphereMachineTemplate monitoring-cluster-worker -o yaml

Cluster basati sulla classe

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.

Scalabilità di un cluster basato sulla classe

Per scalare orizzontalmente o verticalmente un cluster basato sulla classe utilizzando la sua configurazione topology:

  1. Impostare kubectl sul contesto del cluster di gestione, ad esempio:

    kubectl config use-context management-cluster@admin
    
  2. 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
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon