Serverless : Fonctions à la demande dans des instances préemptives de GKE via Project Riff et Spotinst …

Karim
7 min readMar 19, 2019

Ils existent de nombreuses façons de regrouper et d’exécuter des charges de travail dans le cloud. Le plus récent et le plus intéressant est celui des fonctions, ou sans serveur (Serverless). La contribution de Pivotal au mouvement des fonctions est Riff, un projet open-source, récemment dévoilé sur SpringOne Platform .Le projet Riff aide les développeurs à construire et exécuter des fonctions en utilisant Knative. Il inclut des commandes pour installer Knative dans un cluster Kubernetes, et pour gérer les fonctions, services, canaux et abonnements :

Dans Google Kubernetes Engine, il est possible d’utiliser des instances préemptives (PVM, Preemptible VM ou machine virtuelle (VM, Virtual Machine) Google Compute Engine (GCE) qui peut être achetée avec une forte remise à condition que le client accepte que l’instance ne dure que 24 heures). Le client doit également accepter que Google puisse arrêter la PVM si l’exécution d’autres charges de travail exige un supplément de capacité. Les PVM sont particulièrement adaptées aux tests, aux traitements par lots rapides et aux applications tolérant les pannes. Une VM préemptive permet aux clients d’économiser jusqu’à 80 % par rapport à une instance Compute Engine standard :

Les VM préemptives fonctionnent de façon optimale avec les applications ou systèmes qui distribuent leurs processus entre plusieurs instances d’un cluster. En effet, si l’arrêt d’une instance peut perturber les applications d’entreprise courantes, telles que les bases de données, il est à peine perceptible dans les systèmes distribués qui s’exécutent sur des clusters de machines et sont conçus pour tolérer les pannes. Les VM préemptives se prêtent particulièrement bien aux applications de développement Web, de développement de logiciels Agile, ou de recherche et développement dans les technologies émergentes. Les clients qui utilisent une VM préemptive sont prévenus par une interface ACPI (Advanced Configuration and Power Interface) 30 secondes avant l’arrêt de leur service …

Je vais lancer un cluster GKE qui utilise ce type d’instances préemptives par la ligne de commande :

Et je peux utiliser Spotinst qui fournit des services d’infrastructure de cloud spot à des prix réduits. Cela permet de créer graphiquement des instances préemptives supplémentaires dans le cluster GKE que je viens de créer …

Cela passe par la création d’un Elastigroup dans la console Spotinst :

avec les informations obtenues via GKE :

Dès lors on obtient un script à charger dans le cluster GKE :

et je peux observer une instances préemtives supplémentaires dans le cluster GKE initiée par Spotinst :

Ce nouveau noeud est actif :

Je peux initier Riff dans le cluster GKE en récupérant le binaire pour Linux depuis le dépôt github officiel :

curl -Lo riff-linux-amd64.tgz https://github.com/projectriff/riff/releases/download/v0.2.0/riff-linux-amd64.tgztar xvzf riff-linux-amd64.tgzsudo mv riff /usr/local/bin/

Je lance Riff qui installe Istio et Knative dans le cluster GKE :

Une fois l’installation terminée, je crée un compte de service pour héberger des images dans Google Container Registry indispensables pour l’exécution des fonctions à la demande dans le cluster (qui est lié à Riff via la création d’un namespace dans le cluster) :

Je lance le test d’une fonction qui simplement détermine le carré d’un nombre quelconque :

On voit que Riff utilise des buildpacks en fonction de la détection du langage et des bibliothèques utilisés pour la création de la fonction :

J’invoque la fonctionen entrant des nombres quelconques : le carré de ces derniers est retourné à chaque fois …

Je lance un autre exemple avec la célèbre fonction chargée de compter le nombre de mot :

et l’invocation de cette fonction via des phrases quelconques retourne bien le nombre de mot attendu :

Les deux images Docker qui ont servi à la création de ces deux fonctions apparaissent dans Google Container Registry :

Enfin, je peux comme les fois dernières, utiliser Weave Cloud à des fins de monitoring du cluster GKE :

Au final j’ai un bilan de ce qui a pu être économisé via la console de Spotinst (dans une logique FinOps) :

La destruction des instances préemptives et du cluster est immédiate :

--

--