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
.
- Esamina i requisiti del controller gateway.
- Esamina le limitazioni.
Requisiti del controller GKE Gateway
Il bilanciamento del carico basato sull'utilizzo per i servizi GKE richiede quanto segue:
- Google Cloud CLI versione 516.0.0 o successive.
- GKE 1.33.1-gke.1918000 o versioni successive nel canale RAPIDO.
- L'API Gateway deve essere abilitata nel cluster.
- Il profilo HPA per il rendimento deve essere abilitato nel cluster.
- L'API Autoscaling deve essere abilitata nel tuo progetto Google Cloud .
- Gli account di servizio dei nodi devono essere in grado di scrivere nell'API Autoscaling.
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:
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.
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:
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
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.
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.
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.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 averedryRun
impostato sufalse
. 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 condryRun: false
, controlla il bilanciamento. - Se
balancingMode
èCUSTOM_METRICS
e tutte le metriche personalizzate hannodryRun
impostato sutrue
, 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.
- Per distribuire il traffico in base a una metrica personalizzata, almeno una metrica personalizzata nell'elenco
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 impostaredryRun: 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 dabalancingMode
aCUSTOM_METRICS
.
- Se il bilanciamento del carico si basa su criteri diversi dalle metriche personalizzate, ad esempio
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 esempiogke.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.
- Dopo aver configurato
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
.
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 essereServiceImport
egroup
deve esserenet.gke.io
.
- Il campo
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.
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
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.
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
conCUSTOM_METRICS
.
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
conCUSTOM_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:
- Se vuoi mantenere il criterio per altre impostazioni, rimuovi i campi
balancingMode
ecustomMetrics
dal fileGCPBackendPolicy
. - Se non hai più bisogno di
GCPBackendPolicy
, puoi eliminarlo. - Se utilizzi le API Compute Engine, ripristina i flag
--balancing-mode
e--custom-metrics
dal servizio di backend.