Configura il bilanciamento del carico basato sull'utilizzo per i servizi GKE


Questa pagina descrive come configurare il bilanciamento del carico basato sull'utilizzo per i servizi GKE. Questa pagina è rivolta ai team di infrastruttura e applicazioni e agli amministratori GKE responsabili della configurazione e della gestione della distribuzione del traffico per i loro servizi GKE.

Puoi utilizzare i bilanciatori del carico basati sull'utilizzo per ottimizzare le prestazioni e la disponibilità delle applicazioni distribuendo in modo intelligente il traffico in base all'utilizzo delle risorse in tempo reale dei pod GKE.

Prima di leggere questa pagina, assicurati di conoscere il bilanciamento del carico basato sull'utilizzo per i servizi GKE e come funziona il bilanciamento del carico basato sull'utilizzo.

Prezzi

Il bilanciamento del carico basato sull'utilizzo è una funzionalità di GKE Gateway disponibile senza costi aggiuntivi. Si applicano comunque i prezzi di Cloud Load Balancing e GKE.

Quote

Il bilanciamento del carico basato sull'utilizzo non introduce nuove quote, anche se si applicano ancora tutte le quote di Cloud Load Balancing e di altri servizi dipendenti.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Requisiti del controller GKE Gateway

Il bilanciamento del carico basato sull'utilizzo per i servizi GKE richiede quanto segue:

Il bilanciamento del carico basato sull'utilizzo per i servizi GKE supporta quanto segue:

  • Servizi GKE a cluster singolo e multicluster che fungono da backend per un bilanciatore del carico gestito da Google Cloud.
  • Tutte le versioni di GKE (Standard, Autopilot ed Enterprise).
  • Tutti i bilanciatori del carico delle applicazioni, esclusi i bilanciatori del carico delle applicazioni classici. Google Cloud

Limitazioni

Il bilanciamento del carico basato sull'utilizzo per i servizi GKE presenta le seguenti limitazioni.

  • L'unica metrica di utilizzo delle risorse supportata è la CPU.
  • I bilanciatori del carico di rete passthrough o proxy non sono supportati.
  • È supportata solo l'API Gateway; le API Service e Ingress non sono supportate.
  • Il bilanciamento del carico basato sull'utilizzo non funziona bene se il traffico è molto irregolare. Il ribilanciamento del traffico richiede fino a 30 secondi quando i pod raggiungono il loro utilizzo massimo. Il segnale di utilizzo dovrebbe aumentare con il traffico in entrata, ma questo ritardo significa che il bilanciamento del carico basato sull'utilizzo ha bisogno di tempo per adattarsi. Per prestazioni ottimali, il bilanciamento del carico basato sull'utilizzo funziona meglio in ambienti con flussi di traffico fluidi e prevedibili.
  • I cluster a doppio stack (cluster con un indirizzo IPv4 e un indirizzo IPv6) non sono supportati.
  • Il bilanciamento del carico basato sull'utilizzo può richiedere fino a 30 secondi per l'aggiornamento e la regolazione della distribuzione del traffico dopo le modifiche alla configurazione, ad esempio la modifica o la rimozione del campo dryRun in un GCPBackendPolicy. Questo ritardo è un comportamento noto a livello di sistema. Di conseguenza, questa funzionalità è più adatta alle applicazioni con modelli di traffico relativamente stabili che possono tollerare questa latenza di aggiornamento.

Per impostazione predefinita, il bilanciamento del carico basato sull'utilizzo è disattivato per i tuoi servizi GKE. Devi attivarla esplicitamente. Se non imposti una soglia di utilizzo massimo, il sistema utilizza per impostazione predefinita l'80% di utilizzo per endpoint.

Il tuo obiettivo nella configurazione del bilanciamento del carico basato sull'utilizzo è ottimizzare la distribuzione del traffico in modo che i pod di backend possano gestire in modo efficiente il proprio workload, il che migliora le prestazioni delle applicazioni e l'utilizzo delle risorse.

Abilita il bilanciamento del carico basato sull'utilizzo e il profilo HPA per il rendimento

Prima di configurare il bilanciamento del carico basato sull'utilizzo, assicurati che il tuo cluster GKE supporti le funzionalità richieste. Il bilanciamento del carico basato sull'utilizzo utilizza metriche personalizzate, come la CPU, per prendere decisioni di routing più intelligenti. Queste decisioni dipendono da quanto segue:

  • API Gateway, che consente criteri a livello di servizio tramite GCPBackendPolicy.
  • Il profilo HPA per le prestazioni, che consente ai carichi di lavoro di scalare più rapidamente e in modo più aggressivo utilizzando i segnali della CPU.

Abilita l'API Gateway e il profilo HPA per il rendimento

Autopilot

L'API Gateway e il profilo HPA per il rendimento sono disponibili per impostazione predefinita in un cluster Autopilot.

Standard

Per creare un nuovo cluster Standard con il profilo HPA per il rendimento e l'API Gateway abilitata, esegui questo comando:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --cluster-version=CLUSTER_VERSION \
    --gateway-api=standard \
    --hpa-profile=performance \
    --release-channel=rapid

Sostituisci quanto segue:

  • CLUSTER_NAME con il nome del nuovo cluster.
  • LOCATION con la regione o la zona di Compute Engine per il tuo cluster.
  • PROJECT_ID con l'ID progetto.
  • CLUSTER_VERSION con la versione di GKE, che deve essere 1.33.1-gke.1918000 o successiva.

Per abilitare il profilo HPA per il rendimento e l'API Gateway in un cluster GKE Standard esistente, utilizza quanto segue:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --gateway-api=standard \
    --hpa-profile=performance \
    --release-channel=rapid

Sostituisci quanto segue:

Per ulteriori informazioni sul profilo HPA per il rendimento, consulta Configurare il profilo HPA per il rendimento.

Configura il bilanciamento del carico basato sull'utilizzo

Quando il cluster è pronto, definisci un criterio che indirizzi il routing del traffico in base all'utilizzo del backend. Per la configurazione devi utilizzare l'API Kubernetes Gateway tramite GCPBackendPolicy.

Prerequisiti

Prima di configurare il bilanciamento del carico basato sull'utilizzo utilizzando l'API Gateway, assicurati che il cluster GKE soddisfi i seguenti requisiti:

  1. Esegui il deployment di un'applicazione: assicurati di eseguire il deployment di un'applicazione Kubernetes utilizzando una risorsa di tipo Deployment. Per maggiori informazioni, vedi Eseguire il deployment di un'applicazione in un cluster GKE.

    Ad esempio, un tipico manifest di deployment potrebbe includere una sezione delle risorse come questa:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-v1
    spec:
      # ... other deployment configurations ...
      template:
        # ... other template configurations ...
        spec:
          containers:
            - name: your-container-name
              image: your-image
              ports:
                - containerPort: 8080
              resources:
                limits:
                  cpu: 100m
                  memory: 45Mi
                requests:
                  cpu: 100m
                  memory: 45Mi
    
  2. Esporre l'applicazione utilizzando un servizio: devi esporre l'applicazione utilizzando un servizio Kubernetes. Per saperne di più su come funzionano i servizi e su come configurarli, consulta Informazioni sui servizi Kubernetes.

  3. Utilizza un bilanciatore del carico delle applicazioni basato sull'API Gateway: esponi il servizio utilizzando un bilanciatore del carico delle applicazioni gestito da GKE configurato tramite l'API Gateway. Per saperne di più, vedi Deployment dei gateway.

Crea un GCPBackendPolicy per il bilanciamento del carico basato sulla CPU

Questa configurazione consente a GKE di distribuire il traffico in modo dinamico in base all'utilizzo della CPU in tempo reale di ogni pod di backend.

Per abilitare il bilanciamento del carico basato sull'utilizzo per i servizi GKE, utilizza la risorsa personalizzata GCPBackendPolicy dell'API Kubernetes Gateway.

La risorsa personalizzata GCPBackendPolicy ti consente di definire in modo dichiarativo il comportamento di bilanciamento del carico all'interno del cluster Kubernetes. Se specifichi le metriche di utilizzo della CPU, controlli come viene distribuito il traffico tra i backend in base all'utilizzo attuale delle risorse. Questo approccio contribuisce a mantenere le prestazioni dell'applicazione, impedisce il sovraccarico dei singoli pod e migliora l'affidabilità e l'esperienza utente dell'applicazione.

  1. Salva il seguente manifest di esempio come my-backend-policy.yaml:

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
      namespace: team-awesome
    spec:
      targetRef:
        group: ""
        kind: Service
        name: super-service
      default:
        balancingMode: CUSTOM_METRICS
        customMetrics:
        - name: gke.cpu
          dryRun: false
    

    Tieni presente quanto segue:

    • spec.targetRef.kind: Service: ha come target un servizio Kubernetes standard all'interno dello stesso cluster.
    • spec.targetRef.kind: ServiceImport: ha come target un servizio di un altro cluster in una configurazione multi-cluster.
    • balancingMode: CUSTOM_METRICS: consente il bilanciamento del carico basato su metrica personalizzata.
    • name: gke.cpu: specifica l'utilizzo della CPU come metrica per la distribuzione del traffico.

    Se il campo maxUtilizationPercent non è specificato, la soglia di utilizzo predefinita è dell'80%. Il traffico viene ribilanciato quando un backend supera l'80% di utilizzo della CPU.

  2. Applica il manifest di esempio al cluster:

    kubectl apply -f my-backend-policy.yaml
    

Basando la distribuzione del traffico sull'utilizzo della CPU in tempo reale, ottimizzi automaticamente il rendimento. Questa azione contribuisce a evitare il sovraccarico dei singoli pod.

Considerazioni importanti per dryRun e balancingMode

Quando configuri GCPBackendPolicy con metriche personalizzate, considera l'interazione tra balancingMode e il campo dryRun nella definizione di customMetrics. Questa interazione determina il modo in cui il bilanciatore del carico utilizza le metriche personalizzate. Per saperne di più sulle metriche personalizzate e sulle relative limitazioni, incluse quelle relative alle modalità di bilanciamento, consulta Metriche personalizzate di bilanciamento del carico Cloud.

  • balancingMode: CUSTOM_METRICS

    • Per distribuire il traffico in base a una metrica personalizzata, almeno una metrica personalizzata nell'elenco customMetrics deve avere dryRun impostato su false. Questa impostazione indica al bilanciatore del carico di utilizzare attivamente questa metrica per le decisioni di ribilanciamento.
    • Puoi includere altre metriche personalizzate con dryRun: true insieme alle metriche non dry run. In questo modo puoi testare o monitorare nuove metriche, ad esempio l'utilizzo della GPU, senza che influiscano sul traffico, mentre un'altra metrica, come l'utilizzo della CPU con dryRun: false, controlla il bilanciamento.
    • Se balancingMode è CUSTOM_METRICS e tutte le metriche personalizzate hanno dryRun impostato su true, viene visualizzato un errore. Ad esempio: gceSync: generic::invalid_argument: Update: Invalid value for field 'resource.backends[0]': '...'. CUSTOM_METRICS BalancingMode requires at least one non-dry-run custom metric. il bilanciatore del carico ha bisogno di una metrica attiva per prendere decisioni.
  • balancingMode è RATE o altre modalità non basate su metriche personalizzate

    • Se il bilanciamento del carico si basa su criteri diversi dalle metriche personalizzate, ad esempio RATE per le richieste al secondo, puoi impostare dryRun: true per tutte le metriche personalizzate. In questo modo, puoi monitorare le metriche personalizzate senza influire sul meccanismo di bilanciamento principale. Ciò è utile per testare nuove metriche personalizzate prima di passare da balancingMode a CUSTOM_METRICS.
  • Monitoraggio delle metriche personalizzate

    • Dopo aver configurato GCPBackendPolicy e iniziato a inviare traffico alla tua applicazione, è necessario un po' di tempo prima che le metriche personalizzate, ad esempio gke.cpu, vengano visualizzate in Metrics Explorer.
    • Affinché le metriche personalizzate siano visibili e attive in Metrics Explorer, deve esserci traffico effettivo che scorre nel backend monitorato dalle norme. Se non c'è traffico, la metrica potrebbe essere visibile solo in "Risorse inattive" inMetrics Explorere.

Impostare una soglia di utilizzo della CPU personalizzata

Per impostazione predefinita, GKE distribuisce il traffico lontano dai backend che superano l'80% di utilizzo della CPU. Tuttavia, alcuni workload potrebbero tollerare un utilizzo della CPU più alto o più basso prima di richiedere la ridistribuzione del traffico. Puoi personalizzare questa soglia utilizzando il campo maxUtilizationPercent nella risorsa GCPBackendPolicy.

  1. Per configurare un servizio GKE in modo che consenta ai backend di utilizzare fino al 70% della CPU prima che venga attivato il ribilanciamento, salva il seguente manifest di esempio come my-backend-policy.yaml:

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
      namespace: team-awesome
    spec:
      targetRef:
        group: ""
        kind: Service
        name: super-service
      default:
        balancingMode: CUSTOM_METRICS
        customMetrics:
        - name: gke.cpu
          maxUtilizationPercent: 70
    

    Tieni presente quanto segue:

    • Il campo maxUtilizationPercent accetta valori da 0 a 100. Un valore di 100 indica che un backend può utilizzare la sua piena capacità della CPU prima che il traffico venga ribilanciato.
    • Per i carichi di lavoro sensibili alla latenza che richiedono l'offload anticipato, utilizza una soglia inferiore.
    • Per i workload progettati per essere eseguiti quasi a piena capacità, utilizza una soglia più elevata.
    • Per i servizi multi-cluster, spec.targetRef.kind deve essere ServiceImport e group deve essere net.gke.io.
  2. Applica il manifest di esempio al cluster:

    kubectl apply -f my-backend-policy.yaml
    

Se attivi una soglia di utilizzo della CPU personalizzata, puoi controllare la distribuzione del traffico in base all'utilizzo della CPU del backend.

(Facoltativo) Attiva la modalità di prova

La modalità di prova monitora l'utilizzo delle risorse dei pod senza modificare la distribuzione del traffico. Quando la modalità di simulazione è abilitata, le metriche vengono esportate in Cloud Monitoring, ma Cloud Load Balancing le ignora e utilizza il comportamento predefinito di bilanciamento del carico.

  1. Per attivare la modalità di prova per il servizio GKE, salva il seguente manifest di esempio come my-backend-policy.yaml:

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
    spec:
      targetRef:
        group: ""
        kind: Service
        name: store-v1
      default:
        balancingMode: RATE
        maxRatePerEndpoint: 10
        customMetrics:
        - name: gke.cpu
          dryRun: true
    
  2. Applica il manifest di esempio al cluster:

    kubectl apply -f my-backend-policy.yaml
    

Quando attivi la modalità di prova, si verifica quanto segue:

  • Cloud Load Balancing ignora le metriche di utilizzo della CPU e utilizza invece il comportamento di bilanciamento del carico predefinito.

  • Le metriche continuano a essere esportate in Cloud Monitoring in network.googleapis.com/loadbalancer/backend/lb_custom_metrics.

Dopo aver esaminato le metriche, rimuovi il campo dryRun da GCPBackendPolicy e riapplica la configurazione. Se si verificano problemi dopo aver disattivato la prova generale, riattivala aggiungendo di nuovo dryRun: true alle norme.

Verifica le norme

Per verificare che GCPBackendPolicy sia applicato al servizio GKE e che i controller GKE riconoscano il criterio, esegui il seguente comando:

kubectl describe gcpbackendpolicy POLICY_NAME -n NAMESPACE

L'output è simile al seguente:

Name:         <your policy name>
Namespace:    <your namespace>
Labels:       <none>
Annotations:  <none>
API Version:  networking.gke.io/v1
Kind:         GCPBackendPolicy
Metadata:
  Creation Timestamp:  ...
  Generation:          1
  Resource Version:    …
  UID:                 …
Spec:
  Default:
    Balancing Mode:  CUSTOM_METRICS
    Custom Metrics:
      Dry Run:  false
      Name:     gke.cpu
  Target Ref:
    Group:
    Kind:   Service
    Name:   super-service
Status:
  Conditions:
    Last Transition Time:  …
    Message:
    Reason:                Attached
    Status:                True
    Type:                  Attached
Events:
…

Configura il bilanciamento del carico basato sull'utilizzo utilizzando le API Compute Engine

Ti consigliamo di utilizzare l'API Kubernetes Gateway per configurare il bilanciamento del carico basato sull'utilizzo per i tuoi servizi GKE.

Tuttavia, potresti preferire utilizzare le API Compute Engine o Terraform per gestire direttamente i bilanciatori del carico. Se scegli questo approccio, devi attivare il bilanciamento del carico basato sull'utilizzo a livello di BackendService.

  1. Per un BackendService esistente, attiva il bilanciamento del carico basato sull'utilizzo e collega un gruppo di endpoint di rete (NEG), my-lb-neg, eseguendo il seguente comando:

    gcloud compute backend-services add-backend MY_BACKEND_SERVICE \
      --network-endpoint-group my-lb-neg \
      --network-endpoint-group-zone=asia-southeast1-a \
      --global \
      --balancing-mode=CUSTOM_METRICS \
      --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
    

    sostituisci quanto segue:

    • MY_BACKEND_SERVICE con il nome del tuo BackendService.
    • CUSTOM_METRICS con CUSTOM_METRICS.
  2. Per aggiornare le impostazioni di bilanciamento del carico basato sull'utilizzo per una voce di backend esistente in BackendService a cui è già collegato un NEG, esegui questo comando:

    gcloud compute backend-services update-backend MY_BACKEND_SERVICE \
      --network-endpoint-group my-lb-neg \
      --network-endpoint-group-zone=asia-southeast1-a \
      --global \
      --balancing-mode=CUSTOM_METRICS \
      --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
    

    sostituisci quanto segue:

    • MY_BACKEND_SERVICE con il nome del tuo BackendService.
    • CUSTOM_METRICS con CUSTOM_METRICS.

Disabilita il bilanciamento del carico basato sull'utilizzo per un servizio GKE

Per disabilitare il bilanciamento del carico basato sull'utilizzo nei tuoi servizi GKE, svolgi i seguenti passaggi:

  1. Se vuoi mantenere il criterio per altre impostazioni, rimuovi i campi balancingMode e customMetrics dal file GCPBackendPolicy.
  2. Se non hai più bisogno di GCPBackendPolicy, puoi eliminarlo.
  3. Se utilizzi le API Compute Engine, ripristina i flag --balancing-mode e --custom-metrics dal servizio di backend.

Passaggi successivi