5 façons de faire du sans serveur sur Kubernetes

Appelez-le «sans serveur», appelez-le «calcul piloté par les événements» ou appelez-le «fonctions en tant que service (FaaS)», l'idée est la même: allouer dynamiquement des ressources pour exécuter des fonctions individuelles, essentiellement des microservices, qui sont invoquées en réponse aux événements. Les plates-formes de calcul sans serveur permettent aux développeurs d'applications de se concentrer sur l'application, pas sur l'infrastructure sous-jacente et sur tous ses détails de gestion.

La plupart des fournisseurs de cloud proposent une sorte de plate-forme sans serveur, mais vous pouvez en créer une vous-même avec seulement deux ingrédients. L'un d'eux est Kubernetes, le système d'orchestration de conteneurs qui est devenu une plate-forme standard pour la création d'applications résilientes et composées. Le second est l'un des nombreux systèmes utilisés pour créer des modèles d'application sans serveur dans Kubernetes.

La plupart des frameworks sans serveur pour Kubernetes ont ces fonctionnalités en commun:

  • Se déploie sur n'importe quel environnement prenant en charge Kubernetes, localement ou à distance, y compris des environnements comme OpenShift.
  • Prend en charge l'exécution de code écrit dans n'importe quelle langue, avec certains runtimes courants pré-emballés avec le framework
  • Déclenche l'exécution de code par de nombreux types d'événements: un point de terminaison HTTP, un message de file d'attente ou un autre hook.

L'un des principaux avantages de la création sans serveur sur Kubernetes est de mieux contrôler la plate-forme sous-jacente. De nombreuses offres sans serveur limitent le comportement des fonctions qu'elles exécutent, rendant parfois certaines classes d'applications peu pratiques. Avec Kubernetes, vous pouvez créer une plate-forme sans serveur qui correspond à vos besoins, en laissant l'infrastructure à vos opérateurs Kubernetes et en laissant vos développeurs se concentrer sur l'écriture de code essentiel.

Voici cinq des principaux projets apportant des fonctionnalités sans serveur à Kubernetes.

Fission

Fission est créée et maintenue par la société gérée de Kubernetes Platform 9. Sa principale prétention à la renommée est qu'elle vous permet de créer des applications FaaS sans avoir à créer de conteneurs, simplement en fournissant des fichiers de définition.

Fission peut être installé avec ou sans carte Helm, et peut être installé dans l'une des deux éditions. Il existe une version complète avec file d'attente de messages et prise en charge d'InfluxDB pour la journalisation, et une édition simplifiée avec un service de fonctions de base. Le premier est conçu pour les déploiements de production et le second pour se mouiller les pieds.

Pour ajouter du code à un déploiement Fission, vous utilisez des fichiers de spécifications basés sur YAML. Les outils de ligne de commande de Fission vous permettent de créer des fichiers YAML pour vos fonctions et les routes utilisées pour déclencher leurs points d'entrée. Le fichier de spécification vous permet également de fournir des variables d'environnement, des conteneurs auxiliaires, des volumes et des contrôles de taint / toleration Kubernetes pour le code.

Fission fournit également des «flux de travail». Installés par Helm chart, les workflows transmettent la sortie d'une fonction à une autre fonction. Les fonctions n'ont même pas besoin d'être dans la même langue. Notez que cela a un coût en termes de performances, car la sortie de chaque fonction est rendue dans un format d'échange, bien que le système de flux de travail prenne en charge de nombreux types binaires primitifs courants pour réduire la surcharge (par exemple, un entier ou un flux d'octets générique).

L'un des inconvénients initialement associés à FaaS était que la première fois qu'une fonction était appelée, il y avait un délai perceptible pour lancer le conteneur qui lui était associé. La fission maintient les conteneurs préchauffés pour minimiser la latence lors de la première exécution d'une fonction.

Fission offre d'autres commodités pour les développeurs et les administrateurs. Le service peut être déployé dans un cluster qui n'a pas d'accès Internet externe, et le code peut être rechargé à chaud dans le cluster à la demande. L'activité fonctionnelle peut également être enregistrée et rejouée pour faciliter le débogage.

Le projet Fission est disponible sous la licence Apache très libérale, il peut donc être librement retravaillé si nécessaire.

Knative

Créé à l'origine par Google pour exécuter des applications sans serveur sur Kubernetes, Knative se concentre sur les modèles communs aux déploiements sans serveur en production. Cependant, Knative nécessite une expertise directe dans la gestion de nombreux composants Kubernetes pour une utilisation efficace.

En plus de Kubernetes, Knative nécessite un système de routage ou un service mesh comme Istio, mais d'autres options comme Ambassador et Gloo peuvent également être utilisées. Cela signifie un peu plus de travail de configuration, mais le projet dispose de guides détaillés sur l'utilisation de chaque option dans une variété de services cloud et d'environnements Kubernetes, y compris Kubernetes vanilla.

Knative fonctionne principalement en exploitant ou en étendant les outils et fonctionnalités Kubernetes existants. Les applications, ou fonctions, sont configurées au moyen de fichiers YAML et livrées en tant que conteneurs Docker que vous créez. L'ajout, la modification ou la suppression de définitions se fait via l' kubectlapplication de ligne de commande. Pour les métriques sur les applications Knative, utilisez Grafana. La mise à l'échelle peut être effectuée avec le propre autoscaler de Knative, ou avec tout autre scaler compatible Kubernetes, y compris un scaler personnalisé.

Knative est en cours de développement intensif, et bon nombre de ses outils dédiés sont encore à l'état brut. Celles-ci incluent  knctl, une CLI spécialement pour Knative, qui vous évite d'avoir à utiliser les autres outils de Kubernetes pour gérer Knative si vous voulez juste vous concentrer sur Knative; et ko, un outil pour créer des applications Go sur Knative en éliminant l'étape de création de conteneur.

Kubeless

Kubeless a été créé par Bitnami, les développeurs d'installateurs faciles pour les piles d'applications Web courantes. Kubeless utilise les définitions de ressources personnalisées natives de Kubernetes pour gérer les fonctions, il y a donc un peu moins d'abstraction entre les métaphores Kubernetes et la fonctionnalité Kubeless.

Les environnements d'exécution de langage les plus courants sont fournis avec la plate-forme: .NET, Java, Python, Node.js, PHP, Ruby, Go et même le nouveau langage Ballerina pour le développement cloud natif. Les runtimes ne sont que des images Docker, bien que Kubeless ait un format d'empaquetage spécifique pour utiliser Dockerfiles pour créer des runtimes personnalisés.

Une autre fonctionnalité pratique de Kubeless est sa CLI, qui est identique à la commande AWS Lambda CLI. C'est extrêmement pratique si vous souhaitez migrer hors d'AWS Lambda, mais que vous souhaitez conserver une partie des scripts de gestion existants, ou simplement ne pas avoir à apprendre un tout nouveau jeu de commandes.

Kubeless fonctionne également comme un plug-in pour le Serverless Framework, un système permettant de créer des applications sans serveur sur une variété d'architectures. Si vous utilisez déjà Serverless ou Kubeless, vous aurez plus de facilité à ajouter l'un ou l'autre que d'utiliser autre chose.

OpenFaaS

L'argument d'OpenFaaS est «des fonctions sans serveur simplifiées». Par simple, les développeurs veulent dire «pas beaucoup plus difficile que de déployer un conteneur Docker».

OpenFaaS peut être déployé sur Kubernetes ou sur un cluster Docker Swarm (pour des tests locaux ou une utilisation à faible demande). Vous utilisez l'interface de ligne de commande OpenFaaS pour créer, pousser et déployer des images Docker dans le cluster pour exécuter des fonctions. Les modèles existants fournissent des moyens prédéfinis de déployer des applications écrites en Go, Python, Node.js, .NET, Ruby, Java ou PHP 7, bien que vous puissiez toujours créer les vôtres. L'interface de ligne de commande OpenFaaS vous permet également de gérer les secrets dans votre cluster, tandis que l'interface utilisateur Web intégrée vous permet de créer de nouvelles fonctions et de les gérer.

Une autre version d'OpenFaaS, OpenFaaS Cloud, reconditionne OpenFaaS avec des fonctionnalités pour plusieurs développeurs, notamment l'intégration avec Git (y compris GitHub et les éditions auto-hébergées de GitLab), CI / CD, gestion des secrets, HTTPS, et la possibilité de fournir des événements à Slack et autres les puits. OpenFaas Cloud est disponible en tant que produit open source gratuit, et dans une version hébergée qui est actuellement gratuite.

OpenWhisk

Apache OpenWhisk est facturé comme une plate-forme générique sans serveur. Kubernetes n'est que l'une des nombreuses options disponibles pour exécuter des conteneurs dans OpenWhisk, car OpenWhisk prend également en charge Mesos et Docker Compose. Néanmoins, Kubernetes est préféré en raison de ses outils de déploiement d'applications, en particulier les graphiques Helm. IBM Cloud Functions est basé sur le projet OpenWhisk et peut donc également fonctionner avec les commandes CLI d'OpenWhisk.

Contrairement à la plupart des autres frameworks Kubernetes sans serveur, OpenWhisk est écrit dans le langage Scala, pas dans Go (dans lequel Kubernetes et Docker sont écrits). Cela ne posera probablement un problème que si vous souhaitez pirater OpenWhisk et que vous n'avez de l'expérience qu'avec Go. 

La plupart des options d'exécution d'applications populaires sont pré-emballées avec OpenWhisk: Java, Node.js, Python, Ruby, PHP et .NET. De plus, de nombreuses options ésotériques et de pointe sont également incluses: Scala, Ballerina, Swift et Rust. Les runtime ne sont que des conteneurs Docker, il est donc facile de fournir les vôtres.

Une fonctionnalité pratique de déploiement d'OpenWhisk est les «actions zip». Pointez une archive .zip de code et de fichiers auxiliaires vers OpenWhisk à l'aide du fichier manifeste d'un package de code, et OpenWhisk créera une action à partir de celui-ci. L'interface de ligne de commande OpenWhisk comprend également des outils pour transformer une arborescence de répertoires de code en une telle archive. Et un catalogue de packages de services permet de connecter facilement votre application à des offres tierces courantes telles que GitHub, Slack, Apache Kafka ou Jira.