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

Image for post
Image for post

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 :

Image for post
Image for post
Image for post
Image for post

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 …

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

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 …

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

avec les informations obtenues via GKE :

Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Ce nouveau noeud est actif :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

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/
Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

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) :

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

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 :

Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store