Exponer métricas personalizadas de balanceadores de carga

En esta sección se describe cómo enviar una o varias métricas de un pod o una carga de trabajo a su balanceador de carga.

Estas métricas proceden del servicio o la aplicación que estés ejecutando. Por ejemplo, consulta las métricas expuestas por vLLM Engine.

El balanceador de carga puede usar estos datos con el balanceo de carga basado en la utilización para equilibrar las cargas de trabajo de forma más eficiente. Por ejemplo, puedes usar esta función para monitorizar las regiones con mayor carga de trabajo y, a continuación, permitir que el balanceador de carga redirija el tráfico a la región con más recursos disponibles. En el ejemplo de vLLM, una métrica que podría ser útil para monitorizar el uso es gpu_cache_usage_perc.

Requisitos

Estos son los requisitos de los pods:

Estos son los requisitos de las métricas.

  • Se debe poder acceder a las métricas a través de un endpoint HTTP.
  • Las métricas deben tener el formato estándar de Prometheus.
  • Los balanceadores de carga tienen restricciones en los nombres de las métricas. Por ejemplo, el nombre no puede tener más de 64 caracteres. Para ver la lista completa de restricciones, consulta los detalles del campo backends[].customMetrics[].name en la referencia de la API de BackendService.

    Si la métrica de tu servicio no cumple estas restricciones, puedes cambiarle el nombre con el campo exportName.

  • Solo se admiten métricas de tipo Gauge entre 0 y 1, donde 1 representa una utilización del 100%.

  • Las etiquetas de métricas se ignoran, por lo que no se pueden usar para distinguir entre métricas. Asegúrate de que tu carga de trabajo no exponga la misma métrica con varias etiquetas.

  • Se pueden exponer un máximo de 10 métricas por clúster. Otros servicios tienen sus propios límites. Por ejemplo, consulta los límites y requisitos de los balanceadores de carga. Ten en cuenta que un clúster puede usar más de un balanceador de carga.

Balanceo basado en la utilización (UBB) de GKE basado en métricas personalizadas

Puedes usar el balanceo basado en la utilización (UBB) de GKE para que el balanceador de carga distribuya el tráfico en función de la utilización de tus pods de backend. En lugar de usar una métrica genérica como la CPU, puedes configurar UBB para que utilice métricas personalizadas que sean más relevantes para el rendimiento de tu aplicación.

Cuando usas UBB con métricas personalizadas en GKE, se aplican las siguientes limitaciones:

  • Solo API Gateway: solo puedes usar UBB con métricas personalizadas con servicios que expongas mediante la API Gateway. GKE usa el controlador de GKE Gateway para interactuar con la API Gateway. Las APIs Service e Ingress no admiten UBB con métricas personalizadas.
  • Sin Cloud Service Mesh: no puedes usar UBB con métricas personalizadas con Cloud Service Mesh.
  • Balanceadores de carga no admitidos: no puedes usar UBB con métricas personalizadas con balanceadores de carga de red de paso a través externos ni con balanceadores de carga de red de proxy externos.

Exponer métricas para el balanceo de carga

  1. Elige una métrica que quieras exponer. Puede elegir cualquier métrica que exponga su servidor y que cumpla los requisitos indicados en la sección anterior. En este ejemplo se usa una métrica personalizada llamada queue_depth_util.

  2. Añade el siguiente recurso personalizado y sustituye los detalles específicos de tu métrica y tu pod.

    apiVersion: autoscaling.gke.io/v1beta1
    kind: AutoscalingMetric
    metadata:
      name: NAME
      namespace:NAMESPACE
    spec:
      selector:
        matchLabels:
          name: APP_LABEL_NAME
      endpoints:
      - port: METRIC_PORT
        path: METRIC_PATH
        metrics:
        - name: METRIC
          exportName: METRIC_NEW_NAME
    

    Sustituye los siguientes valores para que coincidan con tu carga de trabajo:

    • NAME: nombre del objeto AutoscalingMetric.
    • NAMESPACE: el espacio de nombres en el que se encuentran los pods.
    • APP_LABEL_NAME: la etiqueta usada para el pod.
    • METRIC_PORT: número de puerto.
    • METRIC_PATH: la ruta a la métrica. Verifica la ruta que usa tu servicio o aplicación. Esta ruta suele ser /metrics.
    • METRIC: el nombre de la métrica que estás exponiendo.
    • Opcional: METRIC_NEW_NAME: puede usar este campo para cambiar el nombre de la métrica. Si el nombre de la métrica no cumple las restricciones de nombre definidas por el balanceador de carga, utilice este campo para cambiarle el nombre por uno válido.

      Para ver la lista completa de restricciones, consulta los detalles del campo backends[].customMetrics[].name en la referencia de la API de BackendService.

  3. Aplica el recurso con el siguiente comando:

    kubectl apply -f FILE_NAME.yaml
    

    Sustituye FILE_NAME por el nombre del archivo YAML.

    Cuando hayas añadido el recurso personalizado, la métrica se enviará a la API de escalado automático. La métrica se lee cada pocos segundos y se envía al balanceador de carga.

  4. Para usar esta señal con fines de balanceo de carga, proporcione un GCPBackendPolicy. Por ejemplo:

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
    spec:
      targetRef:
        group: ""
        kind: Service
        name: store-v1
      default:
        balancingMode: CUSTOM_METRICS
        customMetrics:
        -   name: gke.named_metrics.queue_depth_util
            dryRun: false
    

Ten en cuenta que las métricas que genera Prometheus siguen un estándar de nomenclatura diferente. Cuando se registran las métricas del balanceo de carga, GKE Metrics Agent añade internamente el prefijo gke.named_metrics. para cumplir el requisito de la API BackendService.

Para exponer una segunda métrica, sigue los mismos pasos para crear otro recurso personalizado.

Ahora que ha expuesto las métricas al balanceador de carga, puede configurarlo para que las use. Para obtener más información, consulta Configurar el balanceador de carga para que use métricas personalizadas.

Para obtener más información sobre cómo trabajar con el balanceador de carga, consulta Configurar el balanceo de carga basado en la utilización para servicios de GKE.

Solucionar problemas de las métricas expuestas al balanceador de carga

Para verificar que las métricas se exponen correctamente al balanceador de carga, puedes hacer lo siguiente:

Siguientes pasos