Expón métricas personalizadas para los balanceadores de cargas

En esta sección, se describe cómo enviar una o más métricas de un Pod o una carga de trabajo a tu balanceador de cargas.

Estas métricas provienen del servicio o la aplicación que ejecutas. Por ejemplo, consulta las métricas expuestas por el motor de vLLM.

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

Requisitos

Los requisitos para los Pods son los siguientes:

Los requisitos para las métricas son los siguientes.

  • Se debe poder acceder a las métricas en un extremo HTTP.
  • El formato de las métricas debe ser el estándar de Prometheus.
  • Los balanceadores de cargas tienen restricciones en los nombres de las métricas. Por ejemplo, el nombre no puede superar los 64 caracteres. Para obtener la lista completa de restricciones, consulta los detalles sobre el campo backends[].customMetrics[].name en la referencia de la API para BackendService.

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

  • Solo se admiten las métricas de calibre entre 0 y 1, donde 1 representa el 100% de utilización.

  • Se ignoran las etiquetas de métricas, 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 puede 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 cargas. Ten en cuenta que un clúster puede usar más de un balanceador de cargas.

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 permitir que el balanceador de cargas distribuya el tráfico según la utilización de tus Pods de backend. En lugar de depender de una métrica genérica como la CPU, puedes configurar UBB para que use 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 para la API de Gateway: Solo puedes usar UBB con métricas personalizadas con los servicios que expones a través de la API de Gateway. GKE usa el controlador de Gateway de GKE para interactuar con la API de Gateway. Las APIs de 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 cargas no admitidos: No puedes usar UBB con métricas personalizadas con balanceadores de cargas de red de transferencia externos ni balanceadores de cargas de red de proxy externos.

Expón métricas para el balanceo de cargas

  1. Elige una métrica para exponer. Puedes elegir cualquier métrica que exponga tu servidor y que también cumpla con los requisitos que se indican en la sección anterior. En este ejemplo, se usa una métrica personalizada llamada queue_depth_util.

  2. Agrega el siguiente recurso personalizado y reemplaza los detalles específicos de tu métrica y 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
    

    Reemplaza lo siguiente para que coincida con tu carga de trabajo:

    • NAME: Es el nombre del objeto AutoscalingMetric.
    • NAMESPACE: Es el espacio de nombres en el que se encuentran los Pods.
    • APP_LABEL_NAME: Es la etiqueta que se usa para el Pod.
    • METRIC_PORT: Es el número de puerto.
    • METRIC_PATH: Es la ruta de acceso a la métrica. Verifica la ruta de acceso que usa tu servicio o aplicación. Esta ruta suele ser /metrics.
    • METRIC: Es el nombre de la métrica que expones.
    • Opcional: METRIC_NEW_NAME: Puedes usar este campo para cambiar el nombre de la métrica. Si el nombre de la métrica no cumple con las restricciones de nombres establecidas por el balanceador de cargas, usa este campo para cambiarle el nombre a uno válido.

      Para obtener la lista completa de restricciones, consulta los detalles sobre el 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
    

    Reemplaza FILE_NAME por el nombre del archivo YAML.

    Cuando agregues el recurso personalizado, la métrica se enviará a la API de ajuste de escala automático. La métrica se lee cada pocos segundos y se envía al balanceador de cargas.

  4. Para usar este indicador con fines de balanceo de cargas, proporciona 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 informa Prometheus siguen un estándar de nomenclatura diferente. Cuando se informan las métricas para el balanceo de cargas, el agente de métricas de GKE les antepone internamente el prefijo gke.named_metrics. para cumplir con el requisito de la API de BackendService.

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

Ahora que expusiste las métricas al balanceador de cargas, puedes configurarlo para que las use. Para obtener más información, consulta Configura el balanceador de cargas para que use métricas personalizadas.

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

Soluciona problemas relacionados con las métricas expuestas al balanceador de cargas

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

¿Qué sigue?