En este documento, se te ayuda a navegar por la documentación de Google Kubernetes Engine (GKE) para encontrar lineamientos y recomendaciones para la optimización de costos. GKE ofrece amplias capacidades de ajuste de escala automático y programación que puedes usar para minimizar el costo del clúster y, al mismo tiempo, mantener la estabilidad de la aplicación.
Para obtener una descripción general consolidada de todas las prácticas recomendadas de GKE, consulta Prácticas recomendadas para GKE.Ya deberías estar familiarizado con lo siguiente:
Descripción general
Cuando implementas GKE, debes tener en cuenta diferentes aspectos técnicos para alinearte con los requisitos de la aplicación y la empresa. Además de definir las redes, la seguridad, el almacenamiento y otros aspectos técnicos, debes evaluar el costo y el rendimiento para satisfacer las necesidades de la empresa. En lugar de tratar el costo y el rendimiento como entidades distintas, debes integrarlos desde las etapas iniciales de la planificación de la infraestructura para definir una relación unificada que determine la confiabilidad y la inversión en la nube. Se espera un costo bajo y una alta confiabilidad, pero, a medida que escalas, aumenta la complejidad de administrar esta compensación.
Para lograr un costo bajo y la estabilidad de las aplicaciones, puedes establecer o ajustar las siguientes funciones de GKE:
- Configuración de GKE
- Configuración de las cargas de trabajo
- Visibilidad y línea de base de costos
Usa GKE Autopilot
Para entornos de desarrollo o sandbox pequeños, selecciona clústeres de Autopilot. En Autopilot, GKE administra los nodos de forma dinámica y solo se te factura la capacidad de Pod solicitada, lo que te ayuda a evitar los cargos por VM, sistema operativo de nodo y sobrecarga del sistema.
Para obtener más información, consulta Descripción general de GKE Autopilot.
Comprende cómo funciona el ajuste de escala automático
Los controladores de ajuste de escala automático de GKE ajustan los recursos de forma dinámica a medida que cambian las solicitudes de tráfico.
Agrega y quita Pods según las métricas de uso
Un HorizontalPodAutoscaler (HPA) agrega y quita Pods según la CPU o las métricas personalizadas.
Para comprender y configurar el ajuste de escala automático horizontal de Pods, consulta la siguiente documentación de GKE:
- Conceptos del ajuste de escala automático horizontal de Pods
- Configura el ajuste de escala automático horizontal de Pods
- Consulta eventos del Horizontal Pod Autoscaler
- Expón métricas de aplicaciones personalizadas para el ajuste de escala automático
Configura un umbral de uso objetivo (por ejemplo, 70% o 80%) para mantener un búfer que controle los aumentos repentinos de tráfico mientras se inician los Pods de réplica adicionales.
Escala tus Pods según las métricas de uso
Usa VerticalPodAutoscaler (VPA) para cambiar el tamaño de forma dinámica de las solicitudes de CPU y memoria de los contenedores para las cargas de trabajo que no emplean el ajuste de escala automático horizontal de Pods o cuando se desconocen las cargas de trabajo máximas.
Para comprender y configurar el ajuste de escala automático vertical de Pods, consulta la siguiente documentación de GKE:
- Conceptos del ajuste de escala automático vertical de Pods
- Escala solicitudes y límites de recursos de contenedor
Mantén el VPA en modo Off (solo recomendación) durante al menos 24 horas (idealmente una semana) en entornos similares a la producción para capturar patrones de tráfico representativos. Para evitar ajustes de tamaño erráticos, especifica límites mínimos y máximos explícitos en tu objeto VerticalPodAutoscaler antes de habilitar los modos Initial o Auto.
Automatiza el escalamiento de la infraestructura con el escalador automático de clústeres
Para escalar los nodos de procesamiento subyacentes en función de la simulación de programación activa en lugar de las cargas de métricas, habilita el escalador automático de clústeres en los grupos de nodos de GKE Standard. Especifica los parámetros mínimos del nodo para admitir la capacidad de referencia nocturna.
Siempre configura un objeto PodDisruptionBudget (PDB) para los Pods del sistema y de la aplicación. Esta configuración ayuda a garantizar que el escalador automático de clústeres no cause interrupciones del servicio de forma involuntaria cuando consolida o reduce los grupos de nodos subutilizados.
Para comprender y configurar el escalador automático de clústeres, consulta la siguiente documentación de GKE:
- Acerca del clúster de GKE GKE
- Ajuste de escala automático de un clúster
- Consulta eventos del escalador automático de clústeres
Implementa grupos de nodos dinámicos con la creación automática de grupos de nodos
Habilita la creación automática de grupos de nodos para generar automáticamente grupos de nodos de GKE personalizados cuyas formas, recuentos de CPU o límites de memoria se ajusten con precisión a los parámetros de programación de los Pods pendientes. Esta función minimiza los recursos que quedan en los nodos de gran tamaño.
Para comprender y configurar la creación automática de grupos de nodos, consulta la siguiente documentación de GKE:
Lista de tareas de ajuste de escala automático
Características de la infraestructura
Alinea el hardware, la ubicación y las reglas de red de nodos del clúster con las prioridades de optimización de costos.
Selecciona los tipos de máquina adecuados
Selecciona los tipos de máquina adecuados para tu clúster según la ubicación de tus usuarios y la ubicación de los datos a los que necesita acceder tu clúster.
Para obtener más información, consulta la guía de comparación y recursos de familias de máquinas.
Implementa cargas de trabajo tolerantes a errores en VMs Spot
Usa VMs Spot para ejecutar cargas de trabajo sin estado, tolerantes a errores o por lotes con un descuento de hasta el 91% en comparación con las instancias de VM a pedido.
Para obtener más información, consulta la siguiente documentación de GKE:
- Conceptos de VMs Spot
- Ejecuta cargas de trabajo tolerantes a errores a costos más bajos con VMs Spot
- Ejecuta cargas de trabajo tolerantes a errores a costos más bajos en Spot Pods
Asigna familias de máquinas eficientes y parámetros de configuración del sistema operativo
Personaliza la configuración de la máquina del grupo de nodos con perfiles de instancias rentables (por ejemplo, arquitecturas de VM E2).
Para obtener más información sobre el tamaño de los nodos, la configuración de los tiempos de interrupción de la VM Spot y la configuración del kernel, consulta Acerca de los grupos de nodos.
Selecciona la región adecuada
Cuando la latencia no afecta a tus usuarios, ejecuta cargas de trabajo de clúster en regiones de Compute Engine con costos operativos más bajos.
Si quieres obtener más información, consulta Prácticas recomendadas para seleccionar la región de Compute Engine.
Regístrate para obtener CUD
Compra descuentos por compromiso de uso (CUDs) para obtener precios con grandes descuentos (hasta un 70%) para los recursos de procesamiento de referencia durante un período de uno o tres años.
Para obtener más información, consulta Descuentos por compromiso de uso basados en recursos.
Ten en cuenta los costos de Herramientas de redes
Los clústeres de GKE regionales y multizonales mejoran la confiabilidad de las aplicaciones, pero pueden generar costos internos de salida de red entre zonas.
Para minimizar y controlar los costos de Herramientas de redes, ten en cuenta lo siguiente:
- Transferencias de datos entre zonas: Aunque los clústeres regionales aumentan la disponibilidad mediante la distribución de cargas de trabajo entre zonas, existen costos asociados por los datos transferidos entre estas zonas.
Para obtener más información, consulta Todos los precios de herramientas de redes.
Implementa clústeres de una sola zona para entornos que no son de producción
En entornos que no son de producción, para evitar cargos de red entre zonas y reducir la sobrecarga de la VM, implementa clústeres de una sola zona en lugar de clústeres regionales o multizonales.
Para obtener más información, consulta Acerca de las opciones de configuración del clúster.
Optimiza las rutas de resolución de DNS del clúster y el tráfico de entrada
Para optimizar la resolución de DNS del clúster y el tráfico de entrada, puedes implementar NodeLocal DNSCache y grupos de extremos de red (NEGs).
Cuando ejecutas cargas de trabajo con mucho DNS, NodeLocal DNSCache ejecuta un daemon de DNS local en cada nodo. Esta configuración evita que las cargas de consultas altas agoten CoreDNS, lo que evita la necesidad de escalar CoreDNS y reduce los costos generales de GKE.
Para el tráfico de entrada, el balanceo de cargas nativo del contenedor a través de NEGs enruta el tráfico directamente a las direcciones IP de Pod en lugar de a los grupos de instancias. Este enrutamiento directo facilita el redireccionamiento ordenado del tráfico durante las acciones de escalamiento de Pods.
Para obtener más información, consulta lo siguiente:
- Configura NodeLocal DNSCache
- Descripción general del balanceo de cargas nativo del contenedor
- Configura Ingress para balanceadores de cargas de aplicaciones externos
Aplica cuotas de recursos por espacio de nombres
Implementa objetos ResourceQuota estándar de Kubernetes por espacio de nombres en clústeres de múltiples usuarios para bloquear los umbrales de forma de CPU y memoria, y evitar que los equipos individuales programen cargas de trabajo no conformes que activen cargos de procesamiento inesperados.
Para obtener más información, consulta Espacios de nombres en la documentación de Kubernetes.
Implementa auditorías de Policy Controller
Implementa Policy Controller para auditar y aplicar de forma dinámica el cumplimiento del clúster con los estándares corporativos. Policy Controller usa el control de admisión para rechazar los recursos mal configurados.
Para obtener más información, consulta lo siguiente:
Bloquea manifiestos no conformes en canalizaciones de CI/CD
Valida el cumplimiento de la política de costos antes en el ciclo de vida del desarrollo.
Integra secuencias de comandos de validación (como el análisis kpt) en las verificaciones previas a la confirmación o de solicitud de extracción para auditar y bloquear los manifiestos no conformes antes de que lleguen al clúster.
Para obtener más información, consulta Valida aplicaciones según las políticas de la empresa en una canalización de CI.
Lista de tareas de infraestructura
Optimización de aplicaciones y cargas de trabajo
Configura tus cargas de trabajo para usar los recursos de manera eficiente y reducir la sobrecarga operativa.
Especifica solicitudes y límites de memoria coincidentes
Especifica solicitudes precisas de CPU y memoria del contenedor antes de la implementación. Para la CPU, configura las solicitudes para cumplir con tus objetivos de nivel de servicio (SLOs), pero deja los límites sin restricciones. Para la memoria, asegúrate de que la asignación solicitada coincida con el límite de memoria.
Para obtener más información, consulta Cambia el tamaño de los recursos de CPU y memoria asignados a los contenedores en la documentación de Kubernetes.
Acelera los tiempos de inicio del contenedor
Haz que las imágenes de contenedor sean lo más pequeñas posible para minimizar los tiempos de descarga de imágenes.
Configura PDBs
Especifica un objeto PodDisruptionBudget (PDB) para las réplicas de la aplicación para limitar las interrupciones voluntarias y garantizar la estabilidad cuando GKE reduce la escala o cuando se producen actualizaciones de nodos.
Para obtener más información, consulta Especifica un presupuesto de interrupción para tu aplicación.
Establece sondeos de preparación y funcionamiento significativos
Configura sondeos de preparación y funcionamiento para todos los contenedores para garantizar que GKE enrute el tráfico solo a los Pods listos y reinicie las instancias con errores, lo que evita la pérdida de tráfico durante el ajuste de escala automático.
Para obtener más información, consulta Configura sondeos de funcionamiento, inicio y preparación.
Configura el cierre ordenado de la aplicación
Prepara los contenedores para la finalización correcta. Para ello, escucha la señal SIGTERM, finaliza las solicitudes en curso antes de salir o configura los hooks preStop.
Para obtener más información, consulta Finalización y cierre ordenado de VMs interrumpibles.
Implementa reintentos con retirada exponencial
Implementa reintentos de retirada exponencial en el nivel de la aplicación o de la malla de servicios para controlar las fallas transitorias o las posibles interrupciones de la VM Spot.
Para obtener más información, consulta Reintentos en la documentación de Istio.
Lista de tareas de optimización de aplicaciones y cargas de trabajo
Visibilidad y línea de base de costos
Para optimizar los costos, primero necesitas visibilidad de tu inversión en GKE y de cómo se asigna. Esta visibilidad te ayuda a atribuir los costos a los equipos y las unidades de negocios que los generan.
En la siguiente documentación de GKE, se describe cómo establecer una visibilidad detallada de la facturación, el consumo de recursos y las métricas de referencia de GKE.
Habilita la asignación de costos de GKE
Habilita la asignación de costos de GKE para obtener visibilidad de las solicitudes de recursos de las cargas de trabajo y los costos asociados. La asignación de costos atribuye los costos del clúster a los espacios de nombres y las etiquetas de Kubernetes de tus cargas de trabajo.
Exporta estos detalles a BigQuery para analizar los datos en Facturación de Cloud. Usa este análisis para identificar qué cargas de trabajo causan picos de facturación, realizar contracargos y optimizar las solicitudes de recursos.
Para obtener más información, consulta Obtén estadísticas de gastos clave para la asignación de recursos y los costos de los clústeres de GKE.
Revisa los volúmenes de transferencia de registros y métricas
Habilitar Cloud Logging y Cloud Monitoring para tus clústeres genera costos. Los volúmenes altos de transferencia de registros y métricas personalizadas pueden generar cargos inesperados. Audita de forma centralizada qué niveles de registro y métricas personalizadas se transfieren.
Para obtener más información sobre la solución de problemas de uso alto de la API de Logging o de los tiempos de espera del límite de escritura de registros, consulta lo siguiente:
Supervisa el estado del servidor de métricas
Supervisa el estado de la implementación del servidor de métricas, ya que los controladores de ajuste de escala automático integrados de GKE dependen de él para recuperar las métricas de CPU y memoria.
Para obtener más información, consulta Soluciona problemas del ajuste de escala automático horizontal de Pods.
Fomenta una cultura de ahorro de costos
Proporciona a los desarrolladores acceso a los paneles de inversión en la nube y establece capacitación en FinOps para alinear las decisiones de arquitectura con los presupuestos de costos de la empresa.
Para obtener más información sobre la cultura de rentabilidad organizacional, consulta Difunde la cultura del ahorro de costos.
Lista de tareas de visibilidad y línea de base de costos
¿Qué sigue?
Para obtener más información sobre los principios de arquitectura y la cultura organizacional necesarios para la rentabilidad, consulta Prácticas recomendadas para ejecutar aplicaciones de Kubernetes con optimización de costos en GKE.