En este documento, se describe cómo enviar una o más métricas de un Pod o una carga de trabajo a tu escalador automático.
Estas métricas provienen del servicio o la aplicación que ejecutas. Para ver un ejemplo de las métricas expuestas, consulta las métricas expuestas por el motor de vLLM.
Luego, el escalador automático de cargas de trabajo puede usar estos datos para escalar las cargas de trabajo de manera más eficiente. Por ejemplo, puedes usar esta función para supervisar la profundidad de la cola o las solicitudes activas y, luego, permitir que el escalador automático aumente o disminuya la cantidad de Pods.
En el ejemplo de vLLM, una métrica que podría ser útil para hacer un seguimiento del uso es vllm:gpu_cache_usage_perc.
Requisitos
Los requisitos para los Pods son los siguientes:
- GKE 1.35.1-gke.1396000 o posterior con clústeres en el canal rápido.
- Usar el ajuste de escala automático horizontal de Pods con el perfil de rendimiento
Los requisitos para las métricas son los siguientes.
- Se debe poder acceder a las métricas en un extremo HTTP. La ruta de acceso del extremo es
/metricsde forma predeterminada. - Las métricas deben tener el formato según el estándar de Prometheus.
- Solo se admiten las métricas de calibre.
- Los nombres de las etiquetas en los selectores de etiquetas de Pod no deben contener caracteres especiales. Solo se admiten letras de la A a la Z (mayúsculas o minúsculas), números, guiones y guiones bajos.
- Cuando se usa el filtrado basado en etiquetas de métricas, la clave de etiqueta debe coincidir con la expresión regular
^[a-zA-Z_][a-zA-Z0-9_]*(comenzar con una letra o un guion bajo, y solo contener letras, números o guiones bajos). - Se puede exponer un máximo de 20 métricas únicas por clúster.
Expón métricas para el ajuste de escala automático
Elige una métrica para exponer. Puedes elegir cualquier métrica que exponga tu carga de trabajo y que también cumpla con los requisitos que se indican en la sección anterior.
Si tu carga de trabajo expone varias métricas con el mismo nombre, pero con diferentes etiquetas, agrega un filtro de etiquetas para asegurarte de que solo se seleccione una.
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: 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_NAMEReemplaza 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_NAMEyAPP_LABEL_VALUE: Son el nombre y el valor de la etiqueta que coinciden con los Pods que emiten la métrica.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. El nombre debe coincidir con la expresión regular^[a-z]([-a-z0-9]*[a-z0-9])?y tener una longitud de no más de 63 caracteres. Esto significa que el primer carácter debe ser una letra minúscula y todos los caracteres siguientes deben ser guiones, letras minúsculas o dígitos, excepto el último carácter, que no puede ser un guion.Opcional:
METRIC_PROMETHEUS_NAME: Es el nombre de la métrica de Prometheus tal como la expone el Pod. Puedes usar este campo para cambiar el nombre de la métrica, por ejemplo, porque el nombre de la métrica que expone el Pod no cumple con las restricciones de nombre establecidas por el escalador automático.Para obtener detalles sobre las restricciones de nombres, consulta las limitaciones del ajuste de escala automático horizontal de Pods.
Aplica el manifiesto con el siguiente comando:
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yamlReemplaza
FILE_NAME_AUTOSCALING_METRICpor 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 escalador automático de cargas de trabajo.
Ahora que expusiste las métricas al escalador automático, puedes configurar el escalador automático de la carga de trabajo para que use estas métricas. Para ello, agrega el siguiente recurso personalizado:
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_VALUEReemplaza lo siguiente para que coincida con tu carga de trabajo:
NAME_HPA: El nombre del objetoHorizontalPodAutoscaler.NAMESPACE: Es el espacio de nombres en el que se encuentran los Pods.DEPLOYMENT: Es el nombre de la implementación a la que segmentas tu anuncio.MIN_REPLICAS: Es la cantidad mínima de réplicas a las que se puede escalar la Deployment.MAX_REPLICAS: Es la cantidad máxima de réplicas a las que se puede escalar la Deployment.NAME: Es el nombre del objeto AutoscalingMetric.METRIC: Es el nombre de la métrica que expones.AVERAGE_VALUE: Es el valor promedio objetivo de la métrica. El escalador automático ajusta la cantidad de réplicas para mantener un valor promedio de la métrica en todos los Pods.
Aplica el manifiesto con el siguiente comando:
kubectl apply -f FILE_NAME_HPA.yamlReemplaza
FILE_NAME_HPApor el nombre del archivo YAML.
Cómo filtrar métricas con etiquetas de métricas
El filtrado de métricas con etiquetas de métricas está disponible en GKE 1.36.0-gke.1759000 o versiones posteriores.
Las métricas suelen incluir etiquetas. Las etiquetas son pares clave-valor que te permiten agregar dimensiones a un valor. Por ejemplo, una métrica que cuenta la cantidad de solicitudes a un extremo HTTP segmentado por método y entorno podría usar etiquetas para especificar este contexto. Este ejemplo podría verse de la siguiente manera:
http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222
Puedes usar filtros de etiquetas para asegurarte de que tu especificación de métrica coincida exactamente con una métrica. Por ejemplo, para seleccionar solo la primera métrica del ejemplo anterior, usa la siguiente especificación para la métrica AutoscalingMetric gauge:
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
Las claves de los pares clave-valor de matchLabels deben coincidir con la expresión regular ^[a-zA-Z_][a-zA-Z0-9_]*, es decir, comenzar con una letra o un guion bajo, y solo contener letras, números o guiones bajos.
Soluciona problemas de las métricas expuestas para el ajuste de escala automático
Puedes revisar el estado del recurso personalizado AutoscalingMetric para buscar errores de configuración. Para ello, deberás hacer lo siguiente:
Para inspeccionar el recurso personalizado AutoscalingMetric, ejecuta el siguiente comando:
kubectl describe autoscalingmetric NAME -n NAMESPACEConsulta el campo
Statuspara obtener información sobre las métricas configuradas, como advertencias sobre errores de configuración y el nombre exacto de la métrica tal como debería aparecer en el objetoHorizontalPodAutoscaler.
¿Qué sigue?
- Para obtener más detalles sobre el ajuste de escala automático de las cargas de trabajo según las métricas, consulta Acerca del ajuste de escala automático de las cargas de trabajo según las métricas.
- Obtén información para configurar el ajuste de escala automático horizontal de Pods.
- Para obtener más detalles sobre la solución de problemas del ajuste de escala automático horizontal, consulta Soluciona problemas del ajuste de escala automático horizontal de Pods.