🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Serverless con Knative sobre Kubernetes para Hosting Elástico

Actualizado el 25 de octubre de 2025

¿Por qué Knative es la clave para el hosting elástico moderno?

El ecosistema del hosting ha evolucionado desde servidores físicos dedicados hasta la virtualización, y de ahí a los contenedores. Sin embargo, la verdadera frontera del hosting elástico no es simplemente empaquetar aplicaciones en contenedores, sino orquestar su ejecución bajo demanda. Aquí es donde entra Knative, un proyecto de código abierto que extiende Kubernetes para ofrecer una experiencia serverless nativa. Mientras que Kubernetes resuelve el problema de la orquestación de contenedores, Knative resuelve el problema de la abstracción de la infraestructura, permitiendo que los desarrolladores se centren en el código y no en los pods.

El resultado es un sistema que no solo escala automáticamente a cero cuando no hay tráfico, sino que también escala de manera agresiva y predecible cuando la demanda aumenta. Si buscas un modelo de hosting que combine la flexibilidad de los microservicios con la eficiencia de costes del serverless, Knative sobre Kubernetes es la respuesta.


Entendiendo el stack: Kubernetes como base, Knative como capa serverless

Para entender el valor de Knative, primero debemos reconocer que Kubernetes es el estándar de facto para la orquestación de contenedores. Sin embargo, Kubernetes no es serverless por sí mismo. Un Deployment típico de Kubernetes mantiene un número fijo de réplicas (pods) ejecutándose constantemente, consumiendo recursos incluso si no reciben peticiones.

Knative (específicamente su componente Serving) introduce una capa de abstracción que transforma Kubernetes en una plataforma serverless. En lugar de gestionar Deployments, Services e Ingress por separado, el desarrollador define un Knative Service. Este recurso personalizado (CRD) se encarga de:

  1. Crear la infraestructura subyacente: Revisiones, rutas, configuraciones y pods.
  2. Gestionar el escalado automático: Desde 0 hasta N réplicas, basado en métricas de concurrencia o RPS.
  3. Enrutar el tráfico: Permite desplegar nuevas versiones y dividir el tráfico entre ellas (canary releases, blue/green deployments).

[INFO] Knative no reemplaza a Kubernetes. Lo extiende. Necesitas un cluster de Kubernetes funcional (p.ej., GKE, EKS, AKS o un cluster on-premise) para instalar Knative.

Componentes principales de Knative

Knative se divide en dos subsistemas principales:

  • Knative Serving: El corazón del hosting elástico. Proporciona el escalado a cero, la gestión de revisiones y el enrutamiento automático.
  • Knative Eventing: Un sistema de gestión de eventos que permite conectar servicios serverless con fuentes de eventos (CloudEvents). Aunque no es obligatorio para el hosting básico, es fundamental para arquitecturas reactivas.

Para el caso del hosting elástico, nos centraremos en Knative Serving.


El poder del escalado automático: de 0 a infinito (y viceversa)

La característica más disruptiva de Knative para el hosting es su escalado automático (autoscaling). A diferencia del Horizontal Pod Autoscaler (HPA) de Kubernetes, que se basa en métricas de CPU o memoria, el autoscaler de Knative (KPA - Knative Pod Autoscaler) está optimizado para aplicaciones web y APIs.

¿Cómo funciona el escalado a cero?

Cuando un Knative Service no recibe tráfico durante un período configurable (por defecto, 30 segundos), el autoscaler reduce el número de réplicas a cero. El pod se elimina por completo, liberando los recursos del cluster.

El siguiente flujo explica el proceso:

  1. No hay tráfico: El servicio tiene 0 réplicas.
  2. Llega una petición: El Activator (un componente de Knative) intercepta la petición.
  3. Activación: El Activator notifica al autoscaler que necesita una réplica.
  4. Escalado: El autoscaler crea un nuevo pod desde cero.
  5. Enrutamiento: Una vez que el pod está listo (health check exitoso), el Activator redirige la petición al pod.
  6. Escalado a la baja: Si el tráfico cesa, el autoscaler vuelve a escalar a cero.

[WARNING] El primer arranque en frío (cold start) puede tardar unos segundos (típicamente 1-3s), ya que implica iniciar un contenedor. Para aplicaciones críticas, se puede configurar un mínimo de réplicas (min-scale) para evitar este retardo.

Configuración del autoscaling

La configuración del escalado se realiza mediante anotaciones en el Knative Service. Aquí tienes un ejemplo de cómo definir un servicio que se escala basado en concurrencia:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: mi-app-serverless
spec:
  template:
    metadata:
      annotations:
        # Número máximo de peticiones simultáneas por pod
        autoscaling.knative.dev/target: "10"
        # Ventana de tiempo para el escalado (estabilidad)
        autoscaling.knative.dev/window: "30s"
        # Escala a cero después de 60s sin tráfico
        autoscaling.knative.dev/scale-to-zero-grace-period: "60s"
    spec:
      containers:
        - image: gcr.io/mi-proyecto/mi-app:latest
          ports:
            - containerPort: 8080

Explicación de las anotaciones:

  • autoscaling.knative.dev/target: Define el número de peticiones concurrentes que cada pod puede manejar antes de que se cree uno nuevo. Si pones 10, y llegan 20 peticiones simultáneas, Knative creará 2 pods.
  • autoscaling.knative.dev/window: La ventana de tiempo que el autoscaler utiliza para tomar decisiones. Una ventana más larga evita cambios bruscos.
  • autoscaling.knative.dev/scale-to-zero-grace-period: Tiempo de espera antes de eliminar el último pod.

Desplegando un hosting elástico con Knative: Ejemplo práctico

Supongamos que queremos alojar un blog estático o una API Node.js que debe escalar según la demanda. El proceso es sorprendentemente simple comparado con gestionar Deployments y HPA manualmente.

1. Instalación de Knative en el cluster

Primero, necesitas un cluster de Kubernetes (versión 1.22+ recomendada). Luego, instalas Knative Serving:

# 1. Instalar los CRDs y los componentes principales
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.12.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.12.0/serving-core.yaml

# 2. Instalar una capa de red (por ejemplo, Kourier o Istio)
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.12.0/kourier.yaml

# 3. Configurar el DNS (para desarrollo, puedes usar sslip.io)
kubectl patch configmap/config-domain \
  --namespace knative-serving \
  --type merge \
  --patch '{"data":{"127.0.0.1.sslip.io":""}}'

2. Definir y desplegar el Knative Service

Crea un archivo service.yaml:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: blog-elastico
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target: "5"
    spec:
      containers:
        - image: nginx:alpine
          ports:
            - containerPort: 80

Despliega el servicio:

kubectl apply -f service.yaml

3. Probar el escalado

Una vez desplegado, obtén la URL del servicio:

kubectl get ksvc blog-elastico

La salida mostrará algo como: http://blog-elastico.default.127.0.0.1.sslip.io

Si haces una petición a esa URL, verás que el servicio responde. Si esperas 60 segundos sin tráfico y vuelves a consultar los pods:

kubectl get pods

Verás que no hay ningún pod en ejecución. El servicio ha escalado a cero. Al hacer una nueva petición, el Activator creará un nuevo pod automáticamente.

[TIP] Para aplicaciones con muchos usuarios concurrentes, ajusta el target de concurrencia. Un valor de 10-20 suele ser óptimo para aplicaciones web típicas. Para APIs intensivas en CPU, prueba con valores más bajos.


Estrategias de enrutamiento y versionado para hosting elástico

Una de las ventajas menos conocidas de Knative es su modelo de revisiones y enrutamiento de tráfico. Cada vez que actualizas un Knative Service (cambiando la imagen, variables de entorno, etc.), se crea una nueva revisión. Esto permite:

  • Rollbacks instantáneos: Volver a una revisión anterior es tan simple como cambiar el tráfico.
  • Canary deployments: Enviar el 10% del tráfico a la nueva versión y el 90% a la anterior.

Ejemplo de cómo dividir el tráfico:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: mi-app
spec:
  traffic:
    - revisionName: mi-app-00001
      percent: 90
    - revisionName: mi-app-00002
      percent: 10

Esta capacidad convierte a Knative en una herramienta ideal para hosting elástico donde necesitas desplegar actualizaciones sin downtime y con control granular del tráfico.


Casos de uso reales para hosting elástico con Knative

1. APIs con tráfico impredecible

Imagina una API de análisis que solo recibe peticiones durante horas laborables. Con Knative, los pods se eliminan por la noche, ahorrando costes de computación.

2. Aplicaciones multiinquilino (SaaS)

Cada inquilino puede tener su propio Knative Service. El escalado a cero permite que inquilinos inactivos no consuman recursos, mientras que los activos escalan según su demanda individual.

3. Procesamiento por lotes y eventos

Combinado con Knative Eventing, puedes crear pipelines serverless que procesen archivos subidos a un bucket de S3. El escalado a cero es perfecto para cargas de trabajo esporádicas.


Consideraciones y mejores prácticas

Ventajas del hosting elástico con Knative

  • Ahorro de costes: Pagas solo por el tiempo de computación real. Sin tráfico = sin pods = sin coste de CPU/RAM.
  • Escalado granular: No necesitas estimar picos de tráfico. Knative se adapta en tiempo real.
  • Portabilidad: Al estar sobre Kubernetes, puedes migrar entre nubes (GCP, AWS, Azure) o ejecutarlo on-premise.
  • Integración nativa: Funciona perfectamente con CI/CD (Tekton, ArgoCD) y service mesh (Istio).

Desventajas y limitaciones

  • Cold starts: El primer arranque puede ser lento. Mitígalo con min-scale: 1 para aplicaciones críticas.
  • Complejidad operativa: Aunque la experiencia del desarrollador es simple, mantener un cluster de Kubernetes + Knative requiere habilidades de SysAdmin.
  • No apto para cargas de trabajo stateful: Knative está diseñado para aplicaciones stateless. Bases de datos o colas de mensajes no deberían ejecutarse en Knative Serving.

[WARNING] No uses Knative para bases de datos o sistemas que requieran almacenamiento persistente local. El escalado a cero eliminaría los datos. Para persistencia, usa servicios externos (Cloud SQL, RDS) o volúmenes persistentes con cuidado.


Conclusión: El futuro del hosting es elástico y serverless

La combinación de Knative y Kubernetes representa un avance significativo en la forma de concebir el hosting elástico. Ya no se trata de aprovisionar máquinas virtuales o mantener un número fijo de contenedores; se trata de abstraer la infraestructura al máximo y dejar que la plataforma decida cuándo y cómo ejecutar el código.

Para los administradores de sistemas, Knative ofrece un control fino sobre el escalado automático y el enrutamiento, reduciendo la carga operativa. Para los desarrolladores, ofrece una experiencia similar a las funciones serverless de AWS Lambda o Google Cloud Functions, pero con la flexibilidad de Kubernetes y sin vendor lock-in.

Si estás construyendo una plataforma de hosting moderna, o simplemente quieres optimizar los costes de tu infraestructura actual, te recomiendo que explores Knative. No es una solución trivial, pero su capacidad para escalar a cero y su modelo de revisiones lo convierten en una herramienta indispensable para el hosting del futuro.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel