5 formas de trabajar sin servidor en Kubernetes

Llámelo "sin servidor", llámelo "cómputo impulsado por eventos" o llámelo "funciones como servicio (FaaS)", la idea es la misma: asignar recursos dinámicamente para ejecutar funciones individuales, esencialmente microservicios, que se invocan en respuesta a los eventos. Las plataformas informáticas sin servidor permiten a los desarrolladores de aplicaciones centrarse en la aplicación, no en la infraestructura subyacente y en todos sus detalles de gestión.

La mayoría de los proveedores de la nube ofrecen algún tipo de plataforma sin servidor, pero usted mismo puede crear una con solo dos ingredientes. Uno es Kubernetes, el sistema de orquestación de contenedores que se ha convertido en una plataforma estándar para crear aplicaciones resilientes y en componentes. El segundo es cualquiera de los sistemas que se utilizan para crear patrones de aplicaciones sin servidor en Kubernetes.

La mayoría de los marcos sin servidor para Kubernetes tienen estas características en común:

  • Se implementa en cualquier entorno que admita Kubernetes, de forma local o remota, incluidos entornos como OpenShift.
  • Admite la ejecución de código escrito en cualquier idioma, con algunos tiempos de ejecución comunes preempaquetados con el marco.
  • Activa la ejecución de código mediante muchos tipos de eventos: un extremo HTTP, un mensaje de cola o algún otro gancho.

Una de las principales ventajas de crear sin servidor en Kubernetes es obtener un control mucho mayor sobre la plataforma subyacente. Muchas ofertas sin servidor restringen el comportamiento de las funciones que ejecutan, lo que a veces hace que ciertas clases de aplicaciones no sean prácticas. Con Kubernetes, puede crear una plataforma sin servidor que se adapte a sus necesidades, dejando la infraestructura a sus operadores de Kubernetes y permitiendo que sus desarrolladores se concentren en escribir código esencial.

A continuación, se muestran cinco de los principales proyectos que incorporan la funcionalidad sin servidor a Kubernetes.

Fisión

Fission es creado y mantenido por la empresa administrada por Kubernetes Platform 9. Su principal reclamo a la fama es que le permite crear aplicaciones FaaS sin tener que construir contenedores, simplemente proporcionando archivos de definición.

Fission se puede instalar con o sin una carta Helm, y se puede instalar en cualquiera de las dos ediciones. Hay una versión completa con cola de mensajes y compatibilidad con InfluxDB para el registro, y una edición simplificada con funciones básicas. El primero está diseñado para implementaciones de producción y el segundo para mojarse los pies.

Para agregar código a una implementación de Fission, use archivos de especificaciones basados ​​en YAML. Las herramientas de línea de comandos de Fission le permiten crear archivos YAML para sus funciones y las rutas utilizadas para activar sus puntos de entrada. El archivo de especificaciones también le permite proporcionar variables de entorno, contenedores auxiliares, volúmenes y controles de tolerancia / taint de Kubernetes para el código.

Fission también proporciona "flujos de trabajo". Instalado por Helm chart, los flujos de trabajo pasan la salida de una función a otra función. Las funciones ni siquiera tienen que estar en el mismo idioma. Tenga en cuenta que esto tiene un costo de rendimiento, ya que la salida de cada función se representa en un formato de intercambio, aunque el sistema de flujo de trabajo admite muchos tipos binarios primitivos comunes para reducir la sobrecarga (por ejemplo, un entero o un flujo de bytes genérico).

Una de las desventajas originalmente asociadas con FaaS fue que la primera vez que se invocaba una función, había un retraso perceptible para iniciar el contenedor asociado con ella. Fission mantiene los contenedores precalentados para minimizar la latencia la primera vez que se ejecuta una función.

Fission ofrece otras comodidades tanto para desarrolladores como para administradores. El servicio se puede implementar en un clúster que no tiene acceso a Internet externo y el código se puede recargar en caliente en el clúster a pedido. La actividad de la función también se puede grabar y reproducir para ayudar con la depuración.

El proyecto Fission está disponible bajo la licencia Apache altamente liberal, por lo que se puede reelaborar libremente según sea necesario.

Knative

Originalmente creado por Google para ejecutar aplicaciones sin servidor en Kubernetes, Knative se centra en patrones comunes a las implementaciones sin servidor en producción. Sin embargo, Knative requiere experiencia directa en la administración de muchos componentes de Kubernetes para usarlos de manera efectiva.

Además de Kubernetes, Knative requiere un sistema de enrutamiento o una malla de servicios como Istio, pero también se pueden usar otras opciones como Ambassador y Gloo. Esto significa un poco más de trabajo en la configuración, pero el proyecto tiene guías detalladas para usar cada opción en una variedad de servicios en la nube y entornos de Kubernetes, incluido Kubernetes básico.

Knative funciona principalmente aprovechando o ampliando las herramientas y la funcionalidad de Kubernetes existentes. Las aplicaciones o funciones se configuran mediante archivos YAML y se entregan como contenedores de Docker que usted crea. La adición, modificación o eliminación de definiciones se realiza a través de la kubectlaplicación de línea de comandos. Para conocer las métricas de las aplicaciones Knative, use Grafana. El escalado se puede realizar con el escalador automático de Knative o con cualquier otro escalador compatible con Kubernetes, incluido uno personalizado.

Knative está en un gran desarrollo y muchas de sus herramientas dedicadas aún se encuentran en un estado difícil. Estos incluyen  knctl, una CLI específicamente para Knative, que le ahorra la molestia de usar otras herramientas de Kubernetes para administrar Knative si solo desea concentrarse en Knative; y kouna herramienta para crear aplicaciones Go en Knative al eliminar el paso de creación del contenedor.

Kubeless

Kubeless fue creado por Bitnami, los desarrolladores de instaladores sencillos para pilas de aplicaciones web comunes. Kubeless usa las definiciones de recursos personalizadas nativas de Kubernetes para manejar funciones, por lo que hay un poco menos de abstracción entre las metáforas de Kubernetes y la funcionalidad de Kubeless.

Los tiempos de ejecución de lenguajes más comunes vienen con la plataforma: .NET, Java, Python, Node.js, PHP, Ruby, Go e incluso el nuevo lenguaje Ballerina para desarrollo nativo en la nube. Los tiempos de ejecución son solo imágenes de Docker, aunque Kubeless tiene un formato de empaquetado específico para usar Dockerfiles para crear tiempos de ejecución personalizados.

Otra característica útil de Kubeless es su CLI, que es idéntica a la de AWS Lambda CLI. Esto es tremendamente conveniente si desea migrar fuera de AWS Lambda, pero desea conservar algunas de las secuencias de comandos de administración existentes, o simplemente no tiene que aprender un conjunto de comandos completamente nuevo.

Kubeless también funciona como un complemento para Serverless Framework, un sistema para crear aplicaciones sin servidor en una variedad de arquitecturas. Si ya usa Serverless o Kubeless, le resultará más fácil agregar uno que usar otro.

OpenFaaS

El argumento de OpenFaaS es "funciones sin servidor simplificadas". Con simple, los desarrolladores quieren decir "no es mucho más difícil que implementar un contenedor Docker".

OpenFaaS se puede implementar en Kubernetes o en un clúster de Docker Swarm (para pruebas locales o uso de baja demanda). Utiliza la CLI de OpenFaaS para compilar, enviar e implementar imágenes de Docker en el clúster para ejecutar funciones. Las plantillas existentes proporcionan formas prefabricadas de implementar aplicaciones escritas en Go, Python, Node.js, .NET, Ruby, Java o PHP 7, aunque siempre puede implementar las suyas propias. La CLI de OpenFaaS también le proporciona formas de administrar secretos en su clúster, mientras que la interfaz de usuario web incorporada le permite crear nuevas funciones y administrarlas.

Otra versión de OpenFaaS, OpenFaaS Cloud, vuelve a empaquetar OpenFaaS con funciones para múltiples desarrolladores, incluida la integración con Git (incluidas GitHub y ediciones autohospedadas de GitLab), CI / CD, administración de secretos, HTTPS y la capacidad de enviar eventos a Slack y otros. se hunde. OpenFaas Cloud está disponible como un producto de código abierto gratuito y en una versión alojada que actualmente es de uso gratuito.

OpenWhisk

Apache OpenWhisk se factura como una plataforma genérica sin servidor. Kubernetes es solo una de las varias opciones disponibles para ejecutar contenedores en OpenWhisk, ya que OpenWhisk también es compatible con Mesos y Docker Compose. Sin embargo, se prefiere Kubernetes debido a sus herramientas para la implementación de aplicaciones, especialmente los gráficos de Helm. IBM Cloud Functions se basa en el proyecto OpenWhisk, por lo que también puede funcionar con los comandos de la CLI de OpenWhisk.

A diferencia de la mayoría de los otros frameworks de Kubernetes sin servidor, OpenWhisk está escrito en el lenguaje Scala, no en Go (en el que están escritos tanto Kubernetes como Docker). Es probable que esto sea un problema solo si desea piratear OpenWhisk y solo tiene experiencia con Go. 

La mayoría de las opciones de tiempo de ejecución de aplicaciones populares vienen empaquetadas con OpenWhisk: Java, Node.js, Python, Ruby, PHP y .NET. Además, también se incluyen muchas opciones esotéricas y de vanguardia: Scala, Ballerina, Swift y Rust. Los tiempos de ejecución son solo contenedores de Docker, por lo que es fácil proporcionar los suyos propios.

Una característica conveniente de implementación de OpenWhisk son las "acciones zip". Apunte un archivo .zip de código y archivos auxiliares a OpenWhisk usando el archivo de manifiesto para un paquete de código, y OpenWhisk creará una acción a partir de él. La CLI de OpenWhisk también incluye herramientas para transformar un árbol de directorio de código en un archivo de este tipo. Y un catálogo de paquetes de servicios facilita la conexión de su aplicación a ofertas comunes de terceros como GitHub, Slack, Apache Kafka o Jira.