Serverless : déploiement et test de la stack FONK (FaaS — Object store — NoSQL — Kubernetes) via Fission et Kubeless …
Comme son nom l’indique, la notion de serverless (ou sans serveur) consiste à exécuter le code d’une application sans avoir à configurer les serveurs physiques ou machines virtuelles nécessaires, ni à les superviser, les mettre à jour ou les “patcher”. Le développeur s’affranchit ainsi des contraintes de l’infrastructure IT et se concentre sur son travail. A la charge du fournisseur d’assurer toute l’intendance, le dimensionnement des ressources machines en fonction du trafic, et l’équilibrage de charges (ou load balancing).
L’exécution du code est lancée via ce qu’on appelle des “fonctions” en réponse à des événements. Par exemple, lorsqu’une page web est sollicitée (via une requête HTTP), une fonction déclenchera l’exécution du code et des services associés comme l’authentification utilisateur, l’envoi d’un message ou l’interrogation d’une base de données. D’où l’appellation de “Function as a Service” (FaaS) souvent attribuée à ce type d’offre.
Il ne faut pas confondre Serverless et NoOps. Si on prend le mot Ops (Opérations) cela ne signifie pas uniquement des opérations d’admin systèmes. Cela signifie également au moins le suivi, le déploiement, la sécurité, le réseautage et aussi souvent une certaine quantité de débogage de production et de mise à l’échelle du système. Ces problèmes existent toujours avec des applications Serverless, ils sont même plus compliquées étant donné la jeunesse de la technologie et les nouvelles fonctions et paramètres à prendre en compte.
Dans une optique de simplification, la communauté derrière le framework Serverless a dévoilé fonk-apps.io, un projet open source dans le but de réduire la courbe d’apprentissage du Serverless pour le grand public :
Il le fait en fournissant des exemples d’applications web simples dans plusieurs langages. Afin de faciliter la transition vers le Cloud native via Kubernetes, le premier de ces exemples d’applications web est le Guestbook (ou Livre d’or) avec ces résultats :
Je vais donc me lancer ici dans le déploiement de cette Stack FONK en commençant par la création d’un cluster Kubernetes dans Azure via AKS et ce script :
accompagné de ces fichiers de template et de paramètres en JSON :
Le cluster est alors déployé et prêt à être utilisé :
Je configure le RBAC et j’installe Helm dans ce cluster :
et avec cette stack FONK, j’installe Minio via Helm …
… puis MongoDB :
A partir de là, je vais utiliser Kubeless en conjonction du framework Serverless avec cette stack :
J’initialise donc Kubeless dans le cluster :
et j’installe le client Serverless via npm et Node.js :
Je clone le dépôt du guestbook en exemple pour installer les dépendances nécessaires à sa bonne exécution :
Via le client Serverless, je déploie mes fonctions dans le cluster :
et en utilisant la partie UI de Kubeless, je peux alors visualiser deux fonctions :
que je peux invoquer :
Dans minio, je peux charger deux fichiers “index.html et rest.js” dans lequel j’ai inséré l’adresse IP de l’API permettant d’invoquer les deux fonctions CREATE et LIST :
Je peux donc appeler directement depuis l’interface graphique chargée dans Minio via ce formulaire, ces deux fonctions :
Je vais exactement réaliser la même expérience mais en utilisant cette fois-çi Fission. Fission permet de créer facilement des services HTTP sur Kubernetes à partir de fonctions. Il fonctionne au niveau source et extrait les images des containers (dans la plupart des cas) :
Je déploie Fission dans le cluster via Helm :
et toujours via le dépôt de la stack FONK en exemple récupéré sur Github, je déploie un environnement sur le cluster via le client Fission :
je créé les paquets nécessaires à la création des deux fonctions CREATE et LIST :
et je déploie les fonctions accompagnées de leurs routes respectives :
et je peux alors invoquer ces deux fonctions :
Je modifie le fichier rest.js chargé dans Minio en modifiant les deux liens URL qui pointent vers ces deux fonctions :
et je le recharge dans Minio :
Je peux alors invoquer graphiquement ces dernières via la page web accessible via Minio :
ou encore une fois via la ligne de commande :
Je peux invoquer localement sur ma station ces fonctions via un utilitaire tel Shell2http qui comme son nom l’indique exécute des commandes shell via un serveur HTTP :
Un rapide test pour terminer via deux petits scripts shell :
Ca répond localement dans le navigateur :
Le nombre de plate-formes dédiées à la création de ces fonctions à la demande dans Kubernetes est amenée à augmenter dans le cadre de ce projet autour de la stack FONK :
Un projet FONK sur GitHub à suivre d’autant qu’il est possible d’essayer d’autres exemples. Pour conclure, l’approche Serverless peut en effet apporter beaucoup de simplification et d’avantages mais ce n’est pas la solution miracle à tous les problèmes. Il faut bien étudier au préalable ses Use Cases et ses contraintes afin de pouvoir peser le pour et contre de son utilisation. Mais cette pratique est amenée à de développer vu l’effervescence des acteurs autour de celle-ci et l’émergence chaque jour de nouveaux systèmes ou frameworks qui permettront une utilisation et une supervision simplifiée …