Combinación de los enfoques sin servidor y los contenedores
Sugerencia
Este contenido es un extracto del libro electrónico “Architecting Cloud Native .NET Applications for Azure” (Diseño de la arquitectura de aplicaciones .NET nativas en la nube para Azure), disponible en Documentos de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Las aplicaciones nativas de nube suelen implementar servicios que hacen uso de los contenedores y la orquestación. A menudo, existe la posibilidad de exponer algunos de los servicios de la aplicación como Azure Functions. Sin embargo, con una aplicación nativa de nube implementada en Kubernetes, sería bueno sacar partido de Azure Functions dentro de ese mismo conjunto de herramientas. Afortunadamente, Azure Functions se puede encapsular en contenedores Docker e implementar con los mismos procesos y herramientas que el resto de la aplicación basada en Kubernetes.
¿Cuándo tiene sentido usar contenedores con un enfoque sin servidor?
La función de Azure Functions no tiene ningún conocimiento de la plataforma en la que se implementa. En algunos escenarios, es posible que existan requisitos específicos y sea necesario personalizar el entorno en el que se va a ejecutar el código de la función. Necesitará una imagen personalizada que admita dependencias o una configuración que no sea compatible con la imagen predeterminada. En estos casos, tiene sentido implementar la función en un contenedor Docker personalizado.
¿Cuándo se debe evitar el uso de contenedores con Azure Functions?
Si se quiere usar la facturación de consumo, la función no se puede ejecutar en un contenedor. Además, si implementa la función en un clúster de Kubernetes, dejará de beneficiarse del escalado integrado proporcionado por Azure Functions. Deberá usar las características de escalado de Kubernetes, descritas anteriormente en este capítulo.
Cómo combinar contenedores Docker y sin servidor
Para encapsular una función de Azure Functions en un contenedor Docker, instale Azure Functions Core Tools y ejecute el siguiente comando:
func init ProjectName --worker-runtime dotnet --docker
Cuando el proyecto se cree, incluirá un Dockerfile y el tiempo de ejecución de trabajo configurado en dotnet
. Ahora, puede crear y probar la función localmente. Créela y ejecútela con los comandos docker build
y docker run
. Para conocer los pasos detallados para empezar a crear funciones de Azure Functions con compatibilidad con Docker, vea el tutorial Creación de una función en Linux mediante una imagen personalizada.
Cómo combinar un enfoque sin servidor y Kubernetes con KEDA
En este capítulo hemos visto que la plataforma de Azure Functions escala horizontalmente de manera automática para satisfacer cualquier demanda. Sin embargo, cuando se implementan funciones contenedorizadas en AKS, la funcionalidad de escalado integrada se pierde. Esto se subsana con Kubernetes-based Event-Driven Autoscaling (KEDA), Habilita el escalado automático específico para event-driven Kubernetes workloads
, incluidas las funciones en contenedor.
KEDA proporciona una funcionalidad de escalado basada en eventos al entorno de ejecución de Functions en un contenedor Docker. KEDA puede escalar desde cero instancias (no hay eventos) a n instances
, en función de la carga. Permite el escalado automático mediante la exposición de métricas personalizadas al escalador automático de Kubernetes (HorizontalPodAutoscaler). El uso de contenedores de Functions con KEDA hace posible replicar las capacidades de la función sin servidor en cualquier clúster de Kubernetes.
Cabe destacar que el proyecto KEDA está administrado actualmente por la Cloud Native Computing Foundation (CNCF).