Serverless : Installation de Knative Serving sur un cluster Kubernetes via Gloo, Rancher, Kontena Pharos et des instances Azure basse priorité. Mise en oeuvre rapide du Chaos Engineering via Gremlin …

Image for post
Image for post

Knative Serving s’appuie sur Kubernetes et ici Gloo pour déployer et servir des applications et fonctions sans serveur. Le service est facile à mettre en place et s’adapte à des scénarios avancés. Knative Serving fournit des primitives middleware qui activent un déploiement rapide de containers serverless, un scaling up et down à zero de manière automatique ou des instantanés ponctuels du code et des configurations déployés …

Image for post
Image for post

Pour arriver à cette architecture, je commence par lancer des instances basse priorité sur des groupes identiques (VMSS Low Priority) dans Azure que l’on pourrait comparer aux instances préemptibles dans Google Cloud (avec une durée de vie limitée et un prix très réduit jusqu’à 80%) :

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

Je peux partir du template JSON acoompagné du fichier de paramètre :

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

Je lance le déploiement qui se termine en quelques minutes :

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

Je récupère Pharos qui va me permettre d’initier la création d’un cluster Kubernetes rapidement dans ces instances Azure basse priorité :

Image for post
Image for post

Je récupère donc le binaire sur le site de Kontena Pharos :

Image for post
Image for post

et je créé un fichier de configuration cluster.yml :

Image for post
Image for post

Et je lance la création du cluster Kubernetes :

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

Le cluster est disponible avec les adresses IP publiques :

Image for post
Image for post

Je raccorde ce cluster Kubernetes à une instance où tourne Rancher Server dans Outscale :

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

Et j’importe ce cluster Kubernetes :

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

Je peux activer le monitoring offert dans ce cluster via Grafana et Prometheus :

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

Je peux initier Knative Serving dans ce cluster Kubernetes via Gloo :

Image for post
Image for post

Gloo est un Ingress Controller natif dans Kubernetes, et un API Gateway de nouvelle génération. Gloo prend en charge des applications legacy, des microservices et le serverless. Il possède des capacités de découverte et une intégration étroite avec les principaux projets open-source. Gloo est spécialement conçu pour prendre en charge les applications hybrides, dans lesquelles de multiples technologies, architectures, protocoles et clouds peuvent coexister …

Je récupère le binaire Glooctl pour linux depuis Github :

Image for post
Image for post

ou via une ligne de commande :

Image for post
Image for post

et je lance l’installation de Knative Serving :

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

J’arrive donc à cette configuration :

Image for post
Image for post

Je peux lancer le test du fameux Helloworld en Go via la création d’un fichier helloworld.go :

Image for post
Image for post

accompagné de son Dockerfile :

Image for post
Image for post

et d’un template YAML pour le déploiement d’un service Helloworld dans ce cluster via Knative Serving :

Image for post
Image for post

Et je lance sur l’instance Master du cluster Kubernetes la construction de l’image Helloworld :

Image for post
Image for post

Je lance le déploiement dans le cluster :

kubectl apply --filename service.yaml

et je peux invoquer ce service Helloworld :

Image for post
Image for post

Dans le tableau de bord du serveur Rancher je peux voir le POD et les namespaces impliqués dans ce service Helloworld :

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

Il ne me reste plus qu’à initier un test rapide de « Chaos Engineering ». Cette approche consiste à générer des pannes volontairement dans l’architecture de production afin d’observer les conséquences de cette défaillance, in-situ. L’objectif de cette démarche est de prendre des mesures qui permettront de contrer l’éventuel effet papillon. Cet effet qui peut se manifester de manière imprévue sur la plateforme de production et qui n’a pu être détecté en pré-production.

Image for post
Image for post

Pour cela je m’appuie sur la plateforme SaaS Gremlin :

Résultat de recherche d'images pour "gremlin chaos"

Je commance par installer les agents Gremlin dans le cluster Kubernetes :

Image for post
Image for post

Je vois apparaître les hôtes du cluster Kubernetes dans le dashboard Gremlin ainsi que les containers :

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

et je peux créer une attaque sur le CPU de certains PODs :

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

Lancement du test qui se termine avec un rapport d’exécution :

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

et qui se visualise dans Grafana sur des pics de charge CPU sur certains PODs et sur les hôtes du cluster :

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

Pour conclure, on a vu que Knative (projet initié par IBM et Google en juillet 2018) fournit un ensemble de composants middleware nécessaires à la création d’applications modernes basées sur des conteneurs et axées sur la source, qui peuvent s’exécuter dans n’importe quel environnement : sur site, dans le cloud et même dans un centre de données tiers. Les composants Knative s’appuient sur Kubernetes et codifient les bonnes pratiques partagées par des frameworks réels basés sur Kubernetes. Les développeurs peuvent ainsi se concentrer sur l’écriture du code plutôt que de gérer les aspects fastidieux de la création, du déploiement et de la gestion d’une application. En conjonction de Knative Serving, on retrouve Knative Build (qui utilise les primitives Kubernetes existantes pour vous fournir la possibilité d’exécuter des constructions de conteneurs sur cluster à partir des sources) ou Knative Eventing (système conçu pour répondre à un besoin commun de développement en mode Cloud Native et qui fournit des primitives composables pour créer des sources d’événements à liaison tardive et des consommateurs d’événements) …

A suivre !

Quelques liens à ce sujet :

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