En esta página se describe cómo configurar el balanceo de carga basado en la utilización para los servicios de GKE. Esta página está dirigida a equipos de infraestructura y aplicaciones, así como a administradores de GKE que se encargan de configurar y gestionar la distribución del tráfico de sus servicios de GKE.
Puedes usar balanceadores de carga basados en la utilización para optimizar el rendimiento y la disponibilidad de las aplicaciones distribuyendo el tráfico de forma inteligente en función del uso de recursos en tiempo real de tus pods de GKE.
Antes de leer esta página, asegúrate de que conoces el balanceo de carga basado en la utilización de los servicios de GKE y cómo funciona.
Precios
El balanceo de carga basado en la utilización es una función de GKE Gateway que está disponible sin coste adicional. Se siguen aplicando los precios de Cloud Load Balancing y GKE.
Cuotas
El balanceo de carga basado en la utilización no introduce ninguna cuota nueva, aunque se siguen aplicando todas las cuotas de Cloud Load Balancing y otros servicios dependientes.
Antes de empezar
Antes de empezar, asegúrate de que has realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
- Consulta los requisitos del controlador de la pasarela.
- Consulta las limitaciones.
Requisitos de GKE Gateway Controller
El balanceo de carga basado en la utilización de los servicios de GKE requiere lo siguiente:
- Tener instalada la versión 516.0.0 de la CLI de Google Cloud o una posterior.
- GKE 1.33.1-gke.1918000 o una versión posterior en el canal RÁPIDO.
- La API Gateway debe estar habilitada en tu clúster.
- El perfil de HPA de rendimiento debe estar habilitado en tu clúster.
- La API Autoscaling debe estar habilitada en tu Google Cloud proyecto.
- Las cuentas de servicio de los nodos deben poder escribir en la API Autoscaling.
El balanceo de carga basado en la utilización de los servicios de GKE admite lo siguiente:
- Servicios de GKE de un solo clúster y de varios clústeres que actúan como backends de un balanceador de carga gestionado por Google Cloud.
- Todas las ediciones de GKE (Standard, Autopilot y Enterprise).
- Todos los balanceadores de carga de aplicaciones, excepto los balanceadores de carga de aplicaciones clásicos. Google Cloud
Limitaciones
El balanceo de carga basado en la utilización de los servicios de GKE tiene las siguientes limitaciones.
- La única métrica de utilización de recursos admitida es la CPU.
- No se admiten los balanceadores de carga de red de proxy ni con paso a través.
- Solo se admite la API Gateway. No se admiten las APIs Service ni Ingress.
- El balanceo de carga basado en la utilización no funciona bien si el tráfico es muy irregular. El reequilibrio del tráfico tarda hasta 30 segundos cuando los pods alcanzan su utilización máxima. Se espera que la señal de utilización aumente con el tráfico entrante, pero este retraso significa que el balanceo de carga basado en la utilización necesita tiempo para ajustarse. Para obtener un rendimiento óptimo, el balanceo de carga basado en la utilización funciona mejor en entornos con flujos de tráfico fluidos y predecibles.
- No se admiten clústeres de doble pila (clústeres con una dirección IPv4 y una dirección IPv6).
- El balanceo de carga basado en la utilización puede tardar hasta 30 segundos en actualizarse y ajustar la distribución del tráfico después de que se produzcan cambios en la configuración, como modificar o quitar el campo dryRun en un
GCPBackendPolicy
. Este retraso es un comportamiento conocido en todo el sistema. Por lo tanto, esta función es más adecuada para aplicaciones con patrones de tráfico relativamente estables que pueden tolerar esta latencia de actualización.
De forma predeterminada, el balanceo de carga basado en la utilización está inhabilitado en los servicios de GKE. Debes habilitarla explícitamente. Si no define un umbral de uso máximo, el sistema utilizará el 80% de uso por punto de conexión de forma predeterminada.
El objetivo de configurar el balanceo de carga basado en la utilización es optimizar la distribución del tráfico para que los pods de backend puedan gestionar su carga de trabajo de forma eficiente, lo que mejora el rendimiento de las aplicaciones y el uso de los recursos.
Habilitar el balanceo de carga basado en la utilización y el perfil de HPA de rendimiento
Antes de configurar el balanceo de carga basado en la utilización, asegúrate de que tu clúster de GKE admita las funciones necesarias. El balanceo de carga basado en la utilización usa métricas personalizadas, como la CPU, para tomar decisiones de enrutamiento más inteligentes. Estas decisiones dependen de lo siguiente:
- API Gateway, que permite aplicar políticas a nivel de servicio mediante
GCPBackendPolicy
. - El perfil de HPA de rendimiento, que permite que las cargas de trabajo se escalen de forma más rápida y agresiva mediante señales de CPU.
Habilitar la API Gateway y el perfil de HPA de rendimiento
Autopilot
Gateway API y el perfil de HPA de rendimiento están disponibles de forma predeterminada en un clúster de Autopilot.
Estándar
Para crear un clúster estándar con el perfil de HPA de rendimiento y la API Gateway habilitada, ejecuta el siguiente comando:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--cluster-version=CLUSTER_VERSION \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
Haz los cambios siguientes:
CLUSTER_NAME
por el nombre de tu nuevo clúster.LOCATION
con la región o zona de Compute Engine de tu clúster.PROJECT_ID
por el ID del proyecto.CLUSTER_VERSION
con la versión de GKE, que debe ser la 1.33.1-gke.1918000 o una posterior.
Para habilitar el perfil de HPA de rendimiento y la API Gateway en un clúster Estándar de GKE, usa lo siguiente:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
Haz los cambios siguientes:
CLUSTER_NAME
por el nombre de tu nuevo clúster.LOCATION
con la región o zona de Compute Engine de tu clúster.PROJECT_ID
por el ID del proyecto.
Para obtener más información sobre el perfil de HPA de rendimiento, consulta Configurar el perfil de HPA de rendimiento.
Configurar el balanceo de carga basado en la utilización
Cuando el clúster esté listo, define una política que dirija el tráfico en función de la utilización del backend. Para la configuración, debes usar la API Gateway de Kubernetes
a través de GCPBackendPolicy
.
Requisitos previos
Antes de configurar el balanceo de carga basado en la utilización con la API Gateway, asegúrate de que tu clúster de GKE cumpla los siguientes requisitos:
Despliega una aplicación: asegúrate de desplegar una aplicación de Kubernetes mediante un recurso Deployment. Para obtener más información, consulta Implementar una aplicación en un clúster de GKE.
Por ejemplo, un manifiesto de implementación típico podría incluir una sección de recursos como esta:
apiVersion: apps/v1 kind: Deployment metadata: name: store-v1 spec: # ... other deployment configurations ... template: # ... other template configurations ... spec: containers: - name: your-container-name image: your-image ports: - containerPort: 8080 resources: limits: cpu: 100m memory: 45Mi requests: cpu: 100m memory: 45Mi
Expón la aplicación mediante un servicio: debes exponer la aplicación mediante un servicio de Kubernetes. Para obtener más información sobre cómo funcionan los servicios y cómo configurarlos, consulta Información sobre los servicios de Kubernetes.
Usar un balanceador de carga de aplicaciones basado en la API Gateway: expón el servicio mediante un balanceador de carga de aplicaciones gestionado por GKE que esté configurado a través de la API Gateway. Para obtener más información, consulta Implementar pasarelas.
Crea un GCPBackendPolicy
para el balanceo de carga basado en la CPU
Esta configuración permite que GKE distribuya el tráfico de forma dinámica en función del uso de la CPU en tiempo real de cada pod de backend.
Para habilitar el balanceo de carga basado en la utilización de los servicios de GKE, usa el recurso personalizado GCPBackendPolicy
de la API Gateway de Kubernetes.
El recurso personalizado GCPBackendPolicy
te permite definir de forma declarativa el comportamiento del balanceo de carga en tu clúster de Kubernetes. Si especificas métricas de utilización de la CPU, puedes controlar cómo se distribuye el tráfico entre los back-ends en función del uso de recursos actual. Esta estrategia ayuda a mantener el rendimiento de las aplicaciones, evita que los pods individuales se sobrecarguen y mejora la fiabilidad y la experiencia de usuario de las aplicaciones.
Guarda el siguiente archivo de manifiesto de ejemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu dryRun: false
Ten en cuenta lo siguiente:
spec.targetRef.kind: Service
: se dirige a un servicio de Kubernetes estándar dentro del mismo clúster.spec.targetRef.kind: ServiceImport
: se dirige a un servicio de otro clúster en una configuración de varios clústeres.balancingMode: CUSTOM_METRICS
: habilita el balanceo de carga basado en métricas personalizadas.name: gke.cpu
: especifica el uso de CPU como métrica para la distribución del tráfico.
Si no se especifica el campo
maxUtilizationPercent
, el umbral de utilización predeterminado es del 80%. El tráfico se vuelve a equilibrar cuando un backend supera el 80% de uso de la CPU.Aplica el manifiesto de ejemplo a tu clúster:
kubectl apply -f my-backend-policy.yaml
Al basar la distribución del tráfico en la utilización de la CPU en tiempo real, optimizas el rendimiento automáticamente. Esta acción ayuda a evitar la sobrecarga en los pods individuales.
Consideraciones importantes sobre dryRun
y balancingMode
Cuando configure GCPBackendPolicy
con métricas personalizadas, tenga en cuenta la interacción entre balancingMode
y el campo dryRun
en la definición de customMetrics
. Esta interacción determina cómo usa el balanceador de carga tus métricas personalizadas. Para obtener más información sobre las métricas personalizadas y sus restricciones, incluidas las relacionadas con los modos de balanceo, consulta Métricas personalizadas de Cloud Load Balancing.
balancingMode: CUSTOM_METRICS
- Para distribuir el tráfico en función de una métrica personalizada, al menos una métrica personalizada de la lista
customMetrics
debe tener el valordryRun
definido comofalse
. Este ajuste indica al balanceador de carga que use de forma activa esa métrica para tomar decisiones de reequilibrado. - Puede incluir otras métricas personalizadas con
dryRun: true
junto con métricas que no sean de prueba. De esta forma, puedes probar o monitorizar nuevas métricas, como el uso de la GPU, sin que afecten al tráfico, mientras que otra métrica, como el uso de la CPU condryRun: false
, controla el balanceo. - Si
balancingMode
esCUSTOM_METRICS
y todas las métricas personalizadas tienendryRun
con el valortrue
, se produce un error. Por ejemplo:gceSync: generic::invalid_argument: Update: Invalid value for field 'resource.backends[0]': '...'. CUSTOM_METRICS BalancingMode requires at least one non-dry-run custom metric.
el balanceador de carga necesita una métrica activa para tomar decisiones.
- Para distribuir el tráfico en función de una métrica personalizada, al menos una métrica personalizada de la lista
balancingMode
esRATE
u otros modos que no sean de métricas personalizadas- Si el balanceo de carga se basa en criterios distintos de las métricas personalizadas, como
RATE
para las solicitudes por segundo, puedes definirdryRun: true
para todas las métricas personalizadas. De esta forma, puedes monitorizar métricas personalizadas sin que afecte al mecanismo de equilibrio principal. Esto resulta útil para probar nuevas métricas personalizadas antes de cambiar debalancingMode
aCUSTOM_METRICS
.
- Si el balanceo de carga se basa en criterios distintos de las métricas personalizadas, como
Monitorizar métricas personalizadas
- Después de configurar
GCPBackendPolicy
y empezar a enviar tráfico a tu aplicación, las métricas personalizadas, comogke.cpu
, tardarán un tiempo en aparecer en el explorador de métricas. - Para que las métricas personalizadas estén visibles y activas en Explorador de métricas, debe haber tráfico real en el backend que monitoriza la política. Si no hay tráfico, es posible que la métrica solo se vea en "Recursos inactivos" en Explorador de métricas.
- Después de configurar
Definir un umbral de uso de CPU personalizado
De forma predeterminada, GKE distribuye el tráfico lejos de los back-ends que superan el 80% de uso de la CPU. Sin embargo, es posible que algunas cargas de trabajo toleren un uso de la CPU mayor o menor antes de requerir una redistribución del tráfico. Puede personalizar este umbral mediante el campo maxUtilizationPercent
del recurso GCPBackendPolicy
.
Para configurar un servicio de GKE de forma que permita que los back-ends utilicen hasta el 70% de la CPU antes de que se active el reequilibrado, guarda el siguiente manifiesto de ejemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu maxUtilizationPercent: 70
Ten en cuenta lo siguiente:
- El campo
maxUtilizationPercent
acepta valores del 0 al 100. Un valor de 100 significa que un backend puede usar toda su capacidad de CPU antes de que se vuelva a equilibrar el tráfico. - Para cargas de trabajo sensibles a la latencia que requieran una derivación temprana, usa un umbral inferior.
- En el caso de las cargas de trabajo diseñadas para ejecutarse cerca de la capacidad máxima, usa un umbral más alto.
- En el caso de los servicios de varios clústeres,
spec.targetRef.kind
debe serServiceImport
ygroup
debe sernet.gke.io
.
- El campo
Aplica el manifiesto de ejemplo a tu clúster:
kubectl apply -f my-backend-policy.yaml
Si habilitas un umbral de uso de CPU personalizado, puedes controlar la distribución del tráfico en función del uso de CPU del backend.
(Opcional) Habilitar el modo de prueba
El modo de prueba de funcionamiento monitoriza el uso de recursos de tus pods sin cambiar la distribución del tráfico. Cuando el modo de prueba se habilita, las métricas se exportan a Cloud Monitoring, pero Cloud Load Balancing las ignora y usa el comportamiento predeterminado del balanceo de carga.
Para habilitar el modo de prueba en tu servicio de GKE, guarda el siguiente archivo de manifiesto de ejemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: RATE maxRatePerEndpoint: 10 customMetrics: - name: gke.cpu dryRun: true
Aplica el manifiesto de ejemplo a tu clúster:
kubectl apply -f my-backend-policy.yaml
Cuando habilitas el modo de prueba, ocurre lo siguiente:
Cloud Load Balancing ignora las métricas de uso de CPU y, en su lugar, utiliza el comportamiento de balanceo de carga predeterminado.
Las métricas seguirán exportándose a Cloud Monitoring en
network.googleapis.com/loadbalancer/backend/lb_custom_metrics
.
Después de revisar las métricas, quita el campo dryRun
de tu GCPBackendPolicy
y vuelve a aplicar la configuración. Si se producen problemas después de inhabilitar la prueba, vuelve a habilitarla añadiendo dryRun: true
a la política.
Verificar la política
Para confirmar que se ha aplicado el GCPBackendPolicy
a tu servicio de GKE y verificar que los controladores de GKE reconocen la política, ejecuta el siguiente comando:
kubectl describe gcpbackendpolicy POLICY_NAME -n NAMESPACE
El resultado debería ser similar al siguiente:
Name: <your policy name>
Namespace: <your namespace>
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GCPBackendPolicy
Metadata:
Creation Timestamp: ...
Generation: 1
Resource Version: …
UID: …
Spec:
Default:
Balancing Mode: CUSTOM_METRICS
Custom Metrics:
Dry Run: false
Name: gke.cpu
Target Ref:
Group:
Kind: Service
Name: super-service
Status:
Conditions:
Last Transition Time: …
Message:
Reason: Attached
Status: True
Type: Attached
Events:
…
Configurar el balanceo de carga basado en la utilización mediante las APIs de Compute Engine
Te recomendamos que uses la API Gateway de Kubernetes para configurar el balanceo de carga basado en la utilización de tus servicios de GKE.
Sin embargo, puede que prefieras usar las APIs de Compute Engine o Terraform para gestionar tus balanceadores de carga directamente. Si elige este enfoque, debe habilitar el balanceo de carga basado en la utilización a nivel de BackendService.
En un BackendService, habilita el balanceo de carga basado en la utilización y adjunta un grupo de puntos finales de red (NEG), my-lb-neg, ejecutando el siguiente comando:
gcloud compute backend-services add-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
Sustituye lo siguiente:
MY_BACKEND_SERVICE
con el nombre de tu BackendService.CUSTOM_METRICS
conCUSTOM_METRICS
.
Para actualizar la configuración del balanceo de carga basado en la utilización de una entrada de backend de BackendService en la que ya se ha adjuntado un NEG, ejecuta el siguiente comando:
gcloud compute backend-services update-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
Sustituye lo siguiente:
MY_BACKEND_SERVICE
con el nombre de tu BackendService.CUSTOM_METRICS
conCUSTOM_METRICS
.
Inhabilitar el balanceo de carga basado en la utilización de un servicio de GKE
Para inhabilitar el balanceo de carga basado en la utilización en tus servicios de GKE, sigue estos pasos:
- Si quieres mantener la política para otros ajustes, quita los campos
balancingMode
ycustomMetrics
de tuGCPBackendPolicy
. - Si ya no necesitas
GCPBackendPolicy
, puedes eliminarlo. - Si usas las APIs de Compute Engine, vuelve a cambiar las marcas
--balancing-mode
y--custom-metrics
de tu servicio de backend.