Questo documento descrive come inviare una o più metriche da un pod o un carico di lavoro al gestore della scalabilità automatica.
Queste metriche provengono dal servizio o dall'applicazione che stai eseguendo. Per un esempio di metriche esposte, consulta le metriche esposte da vLLM Engine.
Il gestore della scalabilità automatica del carico di lavoro può quindi utilizzare questi dati per scalare i carichi di lavoro in modo più efficiente. Ad esempio, puoi utilizzare questa funzionalità per monitorare la profondità della coda o le richieste attive e poi consentire al gestore della scalabilità automatica di aumentare o diminuire il numero di pod.
Dall'esempio di vLLM, una metrica che potrebbe essere utile per monitorare l'utilizzo è
vllm:gpu_cache_usage_perc.
Requisiti
I requisiti per i pod sono i seguenti:
- GKE 1.35.1-gke.1396000 o versioni successive con cluster nel canale rapido.
- Utilizzo della scalabilità automatica orizzontale dei pod con il profilo di rendimento.
I requisiti per le metriche sono i seguenti.
- Le metriche devono essere accessibili su un endpoint HTTP. Il percorso dell'endpoint è
/metricsper impostazione predefinita. - Le metriche devono essere formattate in base allo standard Prometheus.
- Sono supportate solo le metriche di tipo misuratore.
- I nomi delle etichette nei selettori di etichette dei pod non devono contenere caratteri speciali. Sono supportate solo le lettere a-z (minuscole o maiuscole), i numeri, i trattini e i trattini bassi.
- Quando utilizzi il filtro basato sulle etichette delle metriche, la chiave di etichetta deve corrispondere all'espressione regolare
^[a-zA-Z_][a-zA-Z0-9_]*(inizia con una lettera o un trattino basso e contiene solo lettere, numeri o trattini bassi). - È possibile esporre un massimo di 20 metriche univoche per cluster.
Esporre le metriche per la scalabilità automatica
Scegli una metrica da esporre. Puoi scegliere qualsiasi metrica esposta dal tuo carico di lavoro e che soddisfi anche i requisiti elencati nella sezione precedente.
Se il carico di lavoro espone più metriche con lo stesso nome ma etichette diverse, aggiungi un filtro di etichette per assicurarti che ne venga selezionata una sola.
Aggiungi la seguente risorsa personalizzata, sostituendo i dettagli specifici della metrica e del pod:
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - pod: selector: matchLabels: APP_LABEL_NAME: APP_LABEL_VALUE containers: - endpoint: port: METRIC_PORT path: METRIC_PATH metrics: - gauge: name: METRIC prometheusMetricName: METRIC_PROMETHEUS_NAMESostituisci i seguenti valori in base al tuo carico di lavoro:
NAME: il nome dell'oggetto AutoscalingMetric.NAMESPACE: lo spazio dei nomi in cui si trovano i pod.APP_LABEL_NAMEeAPP_LABEL_VALUE: il nome e il valore dell'etichetta corrispondenti ai pod che emettono la metrica.METRIC_PORT: il numero di porta.METRIC_PATH: il percorso della metrica. Verifica il percorso utilizzato dal tuo servizio o dalla tua applicazione; questo percorso è spesso/metrics.METRIC: il nome della metrica che stai esponendo. Il nome deve corrispondere all'espressione regolare^[a-z]([-a-z0-9]*[a-z0-9])?e avere una lunghezza massima di 63 caratteri. Ciò significa che il primo carattere deve essere una lettera minuscola e tutti i caratteri successivi devono essere trattini, lettere minuscole o cifre, ad eccezione dell'ultimo carattere, che non può essere un trattino.(Facoltativo)
METRIC_PROMETHEUS_NAME: il nome della metrica Prometheus esposta dal pod. Puoi utilizzare questo campo per rinominare la metrica, ad esempio perché il nome della metrica esposta dal pod non è conforme alle limitazioni dei nomi impostate dal gestore della scalabilità automatica.Per informazioni dettagliate sulle limitazioni dei nomi, consulta limitazioni per la scalabilità automatica orizzontale dei pod.
Applica il manifest utilizzando il seguente comando:
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yamlSostituisci
FILE_NAME_AUTOSCALING_METRICcon il nome del file YAML.Dopo aver aggiunto la risorsa personalizzata, la metrica viene inviata all'API di scalabilità automatica. La metrica viene letta ogni pochi secondi e inviata al gestore della scalabilità automatica del carico di lavoro.
Ora che hai esposto le metriche al gestore della scalabilità automatica, puoi configurare il gestore della scalabilità automatica del carico di lavoro in modo che utilizzi queste metriche. Per farlo, aggiungi la seguente risorsa personalizzata:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: NAME_HPA namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC target: type: AverageValue averageValue: AVERAGE_VALUESostituisci i seguenti valori in base al tuo carico di lavoro:
NAME_HPA: il nome dell'oggettoHorizontalPodAutoscaler.NAMESPACE: lo spazio dei nomi in cui si trovano i pod.DEPLOYMENT: il nome del deployment di destinazione.MIN_REPLICAS: il numero minimo di repliche a cui il deployment può essere scalato.MAX_REPLICAS: il numero massimo di repliche a cui il deployment può essere scalato.NAME: il nome dell'oggetto AutoscalingMetric.METRIC: il nome della metrica che stai esponendo.AVERAGE_VALUE: il valore medio target per la metrica. Il gestore della scalabilità automatica regola il numero di repliche per mantenere un valore medio della metrica in tutti i pod.
Applica il manifest utilizzando il seguente comando:
kubectl apply -f FILE_NAME_HPA.yamlSostituisci
FILE_NAME_HPAcon il nome del file YAML.
Filtrare le metriche utilizzando le etichette delle metriche
Il filtro delle metriche utilizzando le etichette delle metriche è disponibile in GKE 1.36.0-gke.1759000 o versioni successive.
Le metriche spesso includono etichette. Le etichette sono coppie chiave-valore che consentono di aggiungere dimensioni a un valore. Ad esempio, una metrica che conta il numero di richieste a un endpoint HTTP suddivise per metodo e ambiente potrebbe utilizzare le etichette per specificare questo contesto. Questo esempio potrebbe essere simile al seguente:
http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222
Puoi utilizzare i filtri di etichette per assicurarti che la specifica della metrica corrisponda esattamente a una metrica. Ad esempio, per selezionare solo la prima metrica nell'esempio precedente, utilizza la seguente specifica per la metrica gauge di AutoscalingMetric:
apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
name: filter-sample
spec:
# Several lines are omitted here.
metrics:
- gauge:
name: http_requests_total
filter:
matchLabels:
method: GET
env: prod
Le chiavi delle coppie chiave-valore matchLabels devono corrispondere all'espressione regolare ^[a-zA-Z_][a-zA-Z0-9_]*: ovvero, iniziare con una lettera o un trattino basso e contenere solo lettere, numeri o trattini bassi.
Risolvere i problemi relativi alle metriche esposte per la scalabilità automatica
Puoi esaminare lo stato della risorsa personalizzata AutoscalingMetric per cercare errori di configurazione. Ecco come fare:
Esamina la risorsa personalizzata AutoscalingMetric eseguendo il seguente comando:
kubectl describe autoscalingmetric NAME -n NAMESPACEConsulta il campo
Statusper informazioni sulle metriche configurate, ad esempio avvisi relativi a errori di configurazione e il nome esatto della metrica così come dovrebbe apparire nell'oggettoHorizontalPodAutoscaler.
Passaggi successivi
- Per maggiori dettagli sulla scalabilità automatica dei carichi di lavoro in base alle metriche, consulta Informazioni sulla scalabilità automatica dei carichi di lavoro in base alle metriche.
- Scopri come configurare la scalabilità automatica orizzontale dei pod.
- Per maggiori dettagli sulla risoluzione dei problemi relativi alla scalabilità automatica orizzontale, consulta Risolvere i problemi relativi alla scalabilità automatica orizzontale dei pod.