Questo documento descrive come recuperare e utilizzare metriche personalizzate ed esterne per scalare orizzontalmente i pod.
Per recuperare le metriche, utilizzi un adattatore di metriche gestito. Questa soluzione gestita è disponibile per le metriche in Cloud Monitoring su cui è possibile eseguire query con PromQL e per tutte le metriche personalizzate. Le metriche personalizzate sono metriche esposte dai pod in un endpoint HTTP, nel formato Prometheus.
In alternativa, per la scalabilità automatica utilizzando qualsiasi metrica, puoi recuperare la metrica configurando manualmente un adattatore di metriche per inviare le metriche a un gestore della scalabilità automatica. Questo flusso di lavoro prevede l'installazione di un adattatore di terze parti, come l' adattatore delle metriche personalizzate, e la configurazione delle autorizzazioni. Ad esempio, consulta il tutorial Ottimizzare la scalabilità automatica dei pod in base alle metriche.
Recuperare le metriche
Puoi recuperare le metriche nei seguenti modi:
- Le metriche personalizzate emesse dai pod possono essere recuperate all'interno del cluster. Queste metriche possono essere utilizzate per la scalabilità automatica senza dover transitare attraverso un sistema di monitoraggio come Cloud Monitoring.
- Le metriche dei pod archiviate in Cloud Monitoring possono essere recuperate utilizzando una query PromQL. Queste metriche vengono emesse dai pod ed esportate in Cloud Monitoring, in genere utilizzando Google Cloud Managed Service per Prometheus. Rispetto al metodo precedente, questo approccio ti consente di utilizzare le funzionalità di PromQL, ad esempio il calcolo dei percentili o la lettura dei valori storici.
- Le metriche esterne possono essere recuperate da Cloud Monitoring utilizzando una query PromQL.
- Le metriche possono essere recuperate configurando manualmente un adattatore di metriche per inviare le metriche a un gestore della scalabilità automatica. Questo flusso di lavoro prevede l'installazione di strumenti di terze parti e la configurazione delle autorizzazioni. Ad esempio, consulta il tutorial Ottimizzare la scalabilità automatica dei pod in base alle metriche.
Dopo aver recuperato la metrica, fai riferimento alla metrica in un oggetto HorizontalPodAutoscaler. Per ulteriori informazioni, consulta la sezione Utilizzare le metriche nel gestore della scalabilità automatica orizzontale dei pod.
Per una panoramica sulla scalabilità automatica in base alle metriche, consulta Informazioni sulla scalabilità automatica dei carichi di lavoro in base alle metriche.
Recuperare le metriche personalizzate all'interno del cluster
Le metriche personalizzate provengono dal servizio o dall'applicazione che stai eseguendo. Per un esempio di metriche esposte, consulta le metriche esposte da vLLM Engine.
Requisiti
I requisiti per i pod sono i seguenti:
- GKE 1.35.1-gke.1396000 o versioni successive con cluster nel canale Rapido.
- Utilizza la 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.
Definire la metrica
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 tuo carico di lavoro espone più metriche con lo stesso nome ma etichette diverse, aggiungi un filtro di etichette per assicurarti che ne venga selezionata solo una.
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_NAME prometheusMetricName: METRIC_PROMETHEUS_NAMESostituisci quanto segue 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_NAME: 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. Questa espressione indica che il primo carattere deve essere una lettera minuscola e tutti i caratteri successivi devono essere trattini, lettere minuscole o numeri. Tuttavia, l'ultimo carattere 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 ulteriori informazioni sulle limitazioni dei nomi, consulta le 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.Verifica la definizione della metrica e recupera il nome della metrica da utilizzare per l'oggetto HorizontalPodAutoscaler:
Esegui il comando
kubectl describeper la risorsa personalizzata AutoscalingMetric:kubectl describe autoscalingmetric NAME -n NAMESPACESostituisci quanto segue:
NAME: il nome dell'oggetto AutoscalingMetric.NAMESPACE: lo spazio dei nomi dell'oggetto AutoscalingMetric.
Esamina il campo
Status. Se non sono elencati errori, l'oggetto è valido.Copia il nome nel campo
HPA Name. Questo è il nome che aggiungi all'oggetto HorizontalPodAutoscaler. Questo nome ha il seguente formato:autoscaling.gke.io|NAME|METRIC_NAME.
La metrica è ora definita nell'oggetto AutoscalingMetric. Per la scalabilità automatica con questa metrica, devi farvi riferimento in un oggetto HorizontalPodAutoscaler. Per ulteriori informazioni, consulta la sezione Utilizzare le metriche nell'oggetto HorizontalPodAutoscaler.
Quando aggiungi 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.
Recuperare metriche personalizzate o esterne da Cloud Monitoring
Puoi recuperare le metriche da Cloud Monitoring per scalare i tuoi carichi di lavoro. GKE supporta il recupero di due tipi di metriche da Cloud Monitoring:
- Metriche personalizzate: utilizza questo tipo per applicare le funzionalità di PromQL, come il calcolo dei percentili o la lettura dei valori storici, alle metriche emesse dai carichi di lavoro del cluster.
- Metriche esterne: utilizza questo tipo per scalare in base a un'entità esterna al cluster, ad esempio il numero di messaggi in attesa in una sottoscrizione Pub/Sub.
In alternativa, recupera le metriche personalizzate dal cluster.
Requisiti
- GKE versione 1.36.2-gke.2771000 o successive.
- Le metriche devono essere archiviate in Cloud Monitoring. Ad esempio, puoi utilizzare Google Cloud Managed Service per Prometheus.
- È supportato un massimo di 100 metriche per cluster. Questo limite è il totale combinato per le metriche personalizzate ed esterne.
- Le metriche in Cloud Monitoring devono trovarsi nello stesso Google Cloud progetto del cluster di cui viene eseguita la scalabilità automatica.
Definire la metrica
Utilizza un file YAML per definire le metriche, inclusa la query PromQL specifica.
Scegli una delle seguenti configurazioni, a seconda che tu stia recuperando una metrica personalizzata o una metrica esterna:
Crea un oggetto AutoscalingMetric e definisci la metrica da recuperare.
Metrica personalizzata (pod)
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - promql: name: METRIC_NAME query: PROMQL_QUERY type: Pods # Specifies that the metric is associated with Pods. # metricLabels are optional, default to the labels used by Google # Cloud Managed Service for Prometheus. The defaults are used # below. metricLabels: podName: "pod" namespace: "namespace" clusterName: "cluster" location: "location" projectId: "project_id"Sostituisci quanto segue:
NAME: il nome dell'oggetto AutoscalingMetric.NAMESPACE: lo spazio dei nomi dell'oggetto AutoscalingMetric, che deve corrispondere allo spazio dei nomi del carico di lavoro di cui vuoi eseguire la scalabilità.METRIC_NAME: il nome della metrica utilizzata dall'oggetto HorizontalPodAutoscaler.PROMQL_QUERY: la query PromQL che esegue query sulla metrica. La query PromQL deve restituire un vettore con una voce per ogni pod nella risorsa di cui è stata eseguita la scalabilità automatica, ad esempio una voce per ogni pod in un deployment.
Puoi definire più di una metrica in un singolo manifest AutoscalingMetric aggiungendo altre voci
promqlall'arraymetrics.In questo manifest, si applica quanto segue:
- Il campo
type: Podsindica che le metriche vengono emesse dai pod. (Facoltativo) I campi
metricLabelssono i nomi delle etichette nel risultato della query PromQL che elencano i dettagli della risorsa (ad esempio il nome del pod, lo spazio dei nomi o le informazioni del cluster). La metrica personalizzata emessa da un pod deve includere un'etichetta corrispondente al campopodName, che specifica a quale pod è associata la metrica. Questa etichetta viene configurata automaticamente quando invii le metriche a Cloud Monitoring utilizzando Google Cloud Managed Service per Prometheus.Se questi campi non sono specificati nell'oggetto AutoscalingMetric, vengono utilizzati i seguenti valori predefiniti per trovare le informazioni nell'etichetta. Questi valori predefiniti sono gli stessi nomi delle etichette configurati da Google Cloud Managed Service per Prometheus:
podName: "pod"namespace: "namespace"clusterName: "cluster"location: "location"projectId: "project_id"
Metrica esterna
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - promql: name: METRIC_NAME query: PROMQL_QUERY type: External # Optional, default is 'External'Sostituisci quanto segue:
NAME: il nome dell'oggetto AutoscalingMetric.NAMESPACE: lo spazio dei nomi dell'oggetto AutoscalingMetric, che deve corrispondere allo spazio dei nomi del carico di lavoro di cui vuoi eseguire la scalabilità.METRIC_NAME: il nome della metrica utilizzata da HPA.PROMQL_QUERY: la query PromQL che esegue query sulla metrica. La query PromQL deve restituire un valore scalare o un vettore con una voce univoca.
Verifica le query PromQL in Cloud Monitoring per assicurarti che restituiscano le metriche previste. È più facile verificare le query durante la configurazione che risolvere i problemi relativi a comportamenti imprevisti in un secondo momento.
Per verificare le query, consulta la sezione seguente: Verificare le query PromQL.
Applica il manifest AutoscalingMetric al cluster:
kubectl apply -f MANIFEST_FILE.yamlSostituisci
MANIFEST_FILEcon il nome del file YAML.Verifica la definizione della metrica e recupera il nome della metrica da utilizzare per l'oggetto HorizontalPodAutoscaler:
Esegui il comando
kubectl describeper la risorsa personalizzata AutoscalingMetric:kubectl describe autoscalingmetric NAME -n NAMESPACESostituisci quanto segue:
NAME: il nome dell'oggetto AutoscalingMetric.NAMESPACE: lo spazio dei nomi dell'oggetto AutoscalingMetric.
Esamina il campo
Status. Se non sono elencati errori, l'oggetto è valido.Copia il nome nel campo
HPA Name. Questo è il nome che aggiungi all'oggetto HorizontalPodAutoscaler. Questo nome ha il seguente formato:autoscaling.gke.io|NAME|METRIC_NAME.
La metrica è ora definita nell'oggetto AutoscalingMetric. Per la scalabilità automatica con questa metrica, devi farvi riferimento in un oggetto HorizontalPodAutoscaler. Per ulteriori informazioni, consulta la sezione Utilizzare le metriche nell'oggetto HorizontalPodAutoscaler.
Utilizzare le metriche nell'oggetto HorizontalPodAutoscaler
Crea un oggetto HorizontalPodAutoscaler. Il tipo di metrica HorizontalPodAutoscaler deve corrispondere al valore del campo
typedefinito nella risorsa personalizzata AutoscalingMetric. Scegli una delle seguenti configurazioni a seconda del tipo di metrica:Opzione 1: metrica esterna
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: HPA_NAME namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT_NAME minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: External external: metric: name: autoscaling.gke.io|NAME|METRIC_NAME target: type: AverageValue averageValue: AVERAGE_VALUEOpzione 2: metrica dei pod
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: HPA_NAME namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT_NAME minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC_NAME target: type: AverageValue # This is the only supported target type averageValue: AVERAGE_VALUESostituisci quanto segue:
HPA_NAME: il nome dell'oggetto HorizontalPodAutoscaler.NAMESPACE: lo spazio dei nomi dell'oggetto HorizontalPodAutoscaler, che deve corrispondere allo spazio dei nomi del carico di lavoro e della risorsa AutoscalingMetric.DEPLOYMENT_NAME: il nome del deployment del carico di lavoro di cui vuoi eseguire la scalabilità.MIN_REPLICAS: il numero minimo di pod in esecuzione.MAX_REPLICAS: il numero massimo di pod in esecuzione.NAME: il nome della risorsa personalizzata AutoscalingMetric che hai creato.METRIC_NAME: il nome della metrica definita nella risorsa AutoscalingMetric.AVERAGE_VALUE: il valore target della metrica in corrispondenza del quale il gestore della scalabilità automatica scala il carico di lavoro.
Quando crei il tuo oggetto HorizontalPodAutoscaler, tieni presente quanto segue:
- Gli oggetti AutoscalingMetric, Deployment e HorizontalPodAutoscaler devono trovarsi nello stesso spazio dei nomi.
- L'esempio precedente utilizza la coppia campo-valore
type: AverageValue. Tieni presente chetype: Valueè supportato anche per le metriche esterne. - L'esempio precedente utilizza un oggetto Deployment solo a titolo di esempio. Puoi anche eseguire la scalabilità automatica di qualsiasi oggetto supportato dagli oggetti HorizontalPodAutoscaler, ad esempio un oggetto ReplicaSet.
Applica il manifest HorizontalPodAutoscaler:
kubectl apply -f HPA_MANIFEST_FILE.yamlSostituisci
HPA_MANIFEST_FILEcon il nome del file YAML.
Risolvere i problemi relativi alle metriche recuperate per la scalabilità automatica
Per risolvere i problemi relativi al recupero delle metriche, puoi esaminare i log o lo stato della risorsa personalizzata AutoscalingMetric.
L'adattatore delle metriche di scalabilità automatica ha zero repliche
Quando esamini il deployment autoscaling-metrics-adapter in kube-system, potresti notare che ha zero repliche.
Per impostazione predefinita, l'adattatore viene eseguito con zero repliche per conservare le risorse del cluster. Questo è un comportamento previsto. Il deployment viene scalato a una sola replica solo quando nel cluster esiste una risorsa personalizzata AutoscalingMetric che richiede l'elaborazione PromQL.
Se hai configurato un oggetto AutoscalingMetric con una query PromQL, ma l'adattatore non è stato scalato, verifica che l'oggetto sia stato creato correttamente nel cluster.
Esaminare i log
Per trovare i problemi relativi al controller responsabile del recupero delle metriche da Cloud Monitoring, puoi esaminarne i log.
Puoi visualizzare i log nella Google Cloud console:
Vai alla pagina Esplora log:
Nel riquadro della query, inserisci la seguente query:
resource.type="k8s_container" resource.labels.namespace_name="kube-system" resource.labels.container_name="autoscaling-metrics-adapter"
In alternativa, per visualizzare i log utilizzando kubectl, esegui il seguente comando:
kubectl logs deployment.apps/autoscaling-metrics-adapter -n kube-system
Esaminare lo stato di AutoscalingMetric
Puoi esaminare lo stato della risorsa personalizzata AutoscalingMetric per cercare errori di configurazione.
Esamina la risorsa personalizzata AutoscalingMetric:
kubectl describe autoscalingmetric NAME -n NAMESPACESostituisci quanto segue:
NAME: il nome della risorsa personalizzata AutoscalingMetric che hai creato.NAMESPACE: lo spazio dei nomi della risorsa personalizzata.
Per i dettagli sulle metriche configurate, esamina il campo
Status. Questi dettagli includono eventuali avvisi relativi a errori di configurazione e il nome esatto della metrica così come dovrebbe apparire nell'oggetto HorizontalPodAutoscaler.Di seguito è riportato un esempio di stato valido:
Name: sample-metric Namespace: default Labels: <none> Annotations: <none> API Version: autoscaling.gke.io/v1beta1 Kind: AutoscalingMetric Metadata: Creation Timestamp: 2026-08-10T14:41:58Z Generation: 1 Resource Version: 1786372918604351020 UID: c3f012a9-8f25-4399-ac91-12ae8f4426d7 Spec: Metrics: Promql: Name: pubsub_unacked Query: sum(pubsub_subscription_num_undelivered_messages) Type: External Status: Metric Statuses: Hpa Name: autoscaling.gke.io|sample-metric|pubsub_unacked Name: pubsub_unacked Events: <none>Di seguito è riportato un esempio di stato con un errore di configurazione:
Name: bad-metric Namespace: default Labels: <none> Annotations: <none> API Version: autoscaling.gke.io/v1beta1 Kind: AutoscalingMetric Metadata: Creation Timestamp: 2026-08-10T14:42:40Z Generation: 1 Resource Version: 1786372960414079010 UID: a47d3ed4-f6f2-4c2c-9341-0de4e9752c3c Spec: Metrics: Promql: Name: duplicate_metric Query: sum(up) Type: External Promql: Name: duplicate_metric Query: avg(up) Type: External Status: Metric Statuses: Errors: Multiple metrics defined with the same name. Name: duplicate_metric Events: <none>
Verificare le query PromQL
Se recuperi le metriche da Cloud Monitoring utilizzando una query PromQL, un problema con la query può causare errori nel recupero della metrica o la restituzione di un valore imprevisto. Ad esempio, se prevedi che venga restituita una percentuale come valore da 1 a 100, ma ricevi un valore da 0 a 1, la scalabilità automatica risultante si comporta in modo imprevisto.
Puoi testare le query PromQL in Cloud Monitoring per verificare che restituiscano le metriche previste.
Per verificare le query:
Nella Google Cloud console, vai alla pagina Esplora metriche.
Nella parte superiore del riquadro Generatore di query, seleziona la scheda PromQL.
Nell'editor di query, inserisci la query PromQL che vuoi testare.
Fai clic su Esegui query per visualizzare le metriche sul grafico.
Passaggi successivi
- Per una panoramica sulla scalabilità automatica in base alle metriche, consulta Informazioni sulla scalabilità automatica dei carichi di lavoro in base alle metriche.
- Per la scalabilità automatica utilizzando metriche che non possono essere definite con una query PromQL, consulta Ottimizzare la scalabilità automatica dei pod in base alle metriche.