Right-sizing con Goldilocks en Kubernetes

Kubernetes es genial… hasta que descubrís que sin configurar bien los requests y limits de CPU/memoria, o pagás de más o terminás con pods muriendo por falta de recursos. En la práctica, dimensionar manualmente cada servicio es una tarea titánica: requiere monitoreo constante, pruebas de carga y, a menudo, ajustes a ciegas.

Para atacar este problema existe Goldilocks, una herramienta open source de Fairwinds que aprovecha el Vertical Pod Autoscaler (VPA) para ofrecer recomendaciones precisas sobre recursos. En este artículo exploramos cómo funciona, qué beneficios aporta y cómo usarlo de forma segura como parte de una estrategia de FinOps.

La importancia del Right-sizing

En Kubernetes, cada aplicación define sus requests (lo que garantiza) y limits (el techo máximo) de CPU y memoria. Estos valores impactan directamente en:

  • Desempeño: Si los Pods compiten por recursos sin límites adecuados, degradan el rendimiento mutuo. Un cálculo erróneo puede causar saturación de CPU o errores de tipo OOM (Out Of Memory).
  • Costos: Si una aplicación solicita más de lo que usa, Kubernetes reserva espacio ocioso. Ese desperdicio es dinero directo que se va en capacidad pagada pero no utilizada.
  • Autoscaling: Herramientas como Cluster Autoscaler y Horizontal Pod Autoscaler (HPA) dependen de que los requests sean precisos para tomar decisiones de escalado eficientes.

Lograr el balance “justo” (suficiente para evitar cuellos de botella, pero sin excesos) es lo que llamamos Right-sizing.

Vertical Pod Autoscaler (VPA) en Kubernetes

El VPA es el motor detrás de la magia. Recolecta métricas (vía Metrics Server o Prometheus) y evalúa el desempeño histórico de los pods para calcular valores sugeridos.

Modos de funcionamiento de VPA

  1. Off: Solo genera recomendaciones. Es el modo más seguro y el que usa Goldilocks por defecto.
  2. Initial: Asigna recursos solo al crear el Pod.
  3. Auto: Modifica recursos en ejecución (puede reiniciar pods, lo cual es disruptivo).
  4. Recreate: Elimina y recrea Pods con los nuevos valores.

    Nota de seguridad: En entornos de producción, rara vez se recomienda el modo Auto o Recreate, ya que puede interferir con el HPA y generar reinicios inesperados.

Goldilocks: Obteniendo recursos “justos”

Goldilocks facilita la visualización de estas métricas. Crea VPAs en modo “recomendar” automáticamente y presenta los resultados en un dashboard intuitivo. Solo analiza los namespaces que tengan la siguiente etiqueta:

label: goldilocks.fairwinds.com/enabled=true

Despliegue de Goldilocks

La forma más eficiente de instalarlo es mediante Helm. El chart oficial ya incluye el VPA, simplificando el proceso:

Bash

helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm install goldilocks \
  --namespace goldilocks \
  fairwinds-stable/goldilocks \
  --create-namespace \
  --values values.yaml

Ejemplo de configuración recomendada en tu values.yaml:

YAML

vpa:
  enabled: true
  updater:
    enabled: false # Mantenemos el modo recomendación
  recommender:
    extraArgs:
      prometheus-address: <prometheus-url>:<port>
      storage: prometheus

dashboard:
  ingress:
    enabled: true
    ingressClassName: alb
    annotations:
      alb.ingress.kubernetes.io/scheme: internal
    hosts:
      - host: goldilocks.dev.miempresa.com
        paths:
          - path: /
            type: Prefix

Interpretando las recomendaciones

El dashboard de Goldilocks ofrece dos perfiles principales de QoS (Quality of Service):

PerfilConfiguraciónBeneficio
GuaranteedRequest = LimitMáxima estabilidad; ideal para aplicaciones críticas.
BurstableRequest < LimitFlexibilidad para picos de tráfico; optimiza el uso del nodo.

Lo mejor es que el dashboard te entrega el YAML listo para copiar y pegar en tus manifiestos de despliegue.

Beneficios para la estrategia FinOps

Adoptar Goldilocks no es solo una mejora técnica, es una decisión financiera:

  • Reducción de costos: Identifica el overprovisioning. Se han reportado ahorros de hasta el 60% en clusters medianos.
  • Visibilidad: Permite que los equipos de DevOps y Finanzas hablen el mismo idioma basándose en datos reales.
  • Cultura de Eficiencia: Facilita la asignación de recursos basada en el uso histórico, no en suposiciones.

    Tip para AWS: Si usas EKS, Goldilocks puede configurarse para mostrar costos estimados según la región y tipo de instancia, haciendo más tangible el ahorro potencial.

Consideraciones y Buenas Prácticas

  1. Evita el modo Auto: No uses VPA en modo automático junto con HPA basado en CPU/Memoria, ya que podrían entrar en conflicto.
  2. Usa Prometheus: Para obtener recomendaciones basadas en un historial más amplio y preciso.
  3. Excluye Sidecars: Usa el flag -exclude-containers para ignorar proxies de service mesh (como Istio o Linkerd) que no requieren ajuste manual.
  4. Cargas variables: Ten cuidado con aplicaciones que tienen picos muy esporádicos; las recomendaciones podrían no ser 100% representativas.

Conclusión

Kubernetes no es solo orquestación de contenedores, también es orquestación de costos. Goldilocks se posiciona como el aliado ideal para navegar entre el rendimiento y la eficiencia económica. Permite justificar inversiones y garantizar estabilidad técnica, asegurando que cada CPU y cada MB estén alineados con el valor que generan para el negocio.

Fuentes y recursos adicionales

Leave a Reply

Your email address will not be published. Required fields are marked *

Let's talk

Interested in working with us? Fill out the form below, and we'll get in touch with you shortly. Let's bring your project to life!