Kontena Pharos dans Hetzner Cloud et introduction au packaging d’application dans Kubernetes avec Pulumi et Ballerina …

Image for post
Image for post

Avec l’émergence des architectures orientées microservices, l’industrie du logiciel évolue vers le développement d’applications natives dans le cloud. En effet, de l’architecture orientée services (SOA) on arrive aujourd’hui aux architectures dites Cloud Native :

Image for post
Image for post

Je commence par récupérer le binaire pharos-cluster depuis le site de Kontena :

Image for post
Image for post

que l’on peut aussi charger depuis le nouveau client chpharos :

Image for post
Image for post

test du client pharos-cluster :

Image for post
Image for post

Avec le client hcloud d’Hetzner Cloud, je lance la création de 3 instances qui vont entrer dans la constitution de mon cluster Kubernetes :

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

Je vais créer un fichier YAML nommé cluster.yml qui va reprendre les adresses IP publiques de mes instances dans Hetzner :

Image for post
Image for post

et je lance la création de mon cluster Kubernetes avec Kontena Pharos :

$ pharos up -c cluster.yml
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 l’installation se termine correctement …

Image for post
Image for post

Je récupère les credentials nécessaires à l’utilisation du client kubectl dans le cluster :

Image for post
Image for post

et je peux y installer / initier Helm :

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

Installation de Kubeless pour profiter des fonctions à la demande (FaaS) selon cette logique d’évolution des architectures actuelles :

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 installation du client kubeless associé :

Image for post
Image for post

Ballerina est un nouveau langage de programmation Cloud Native et open source qui prend en charge nativement le support de Kubernetes. Celui-çi s’intégre en runtime avec Kubeless.

Image for post
Image for post
dpkg -i /<ballerina-home>/<ballerina-binary>.deb

rpm -i <ballerina-binary>.rpm
Image for post
Image for post

Je fais un simple test avec une fonction Hello :

Image for post
Image for post

et je la déploie avec le client Kubeless :

Image for post
Image for post

elle apparaît dans le tableau de bord de la plateforme Kubeless :

Image for post
Image for post

et je peux l’invoquer avec encore une fois le client Kubeless :

Image for post
Image for post

Je peux également utiliser le maintenant célèbre framework Serverless avec Kubeless comme provider :

Image for post
Image for post
$ npm install -g serverless
$ serverless create --template kubeless-nodejs --path kubeless
Image for post
Image for post
Image for post
Image for post

création d’une fonction handler.js :

Image for post
Image for post

et déploiement de cette dernière :

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

Je peux également installer Serverless Event Gateway (qui est donc une passerelle locale dans Kubernetes qui peut faire le relais vers d’autres endpoints pour invoquer des fonctions distantes dans d’autres plateformes) :

Image for post
Image for post
helm install stable/etcd-operator --name ego --namespace kubeless
helm install event-gateway --name eg --namespace kubeless
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et je peux vérifier que cette passerelle répond bien localement :

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

Je peux également Pulumi. Pulumi est une plateforme de développement qui permet de créer des programmes “Cloud Native” simples et productifs. Actuellement, il supporte les langages de programmation JavaScript, TypeScript, Python et Go. Les plates-formes cloud Amazon Web Services, Microsoft Azure, Google Cloud Platform et Kubernetes sont prises en charge. Pulumi se concentre principalement sur l’automatisation du code d’infrastructure plutôt que sur l’automatisation du code applicatif. On peut donc utiliser son langage de programmation préféré pour automatiser le déploiement d’une infrastructure :

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

Je vais utiliser un template en TypeScript pour Kubernetes :

$ mkdir k8s-fcagent && cd k8s-fcagent
$ pulumi new kubernetes-typescript
Image for post
Image for post

Exemple ici encore une fois avec le démonstrateur FCA :

Image for post
Image for post

Je peux obtenir une preview avant exécution :

Image for post
Image for post

et je lance ma stack composée ici de 3 réplicas :

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

Et je peux scaler à 4 réplicas …

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

et je peux simplement détruire cette stack aussi rapidement qu’elle a été créée …

Image for post
Image for post

Avec toujours les agents de Weave Cloud en arrière plan pour le monitoring ou le GitOps :

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 pour finir cette petite expérience, la suppression de mon cluster dans Hetzner Cloud est tout aussi rapide …

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

Avec l’apparition de l’architecture des microservices, l’industrie du logiciel évolue vers le développement et le déploiement d’applications natives dans le cloud. Docker et Kubernetes sont les éléments clés du déploiement natif du cloud. Cependant, l’exigence actuelle de devoir créer manuellement des descripteurs de déploiement YAML est douloureuse et source d’erreurs.

Un moyen populaire de déployer une application par-dessus Kubernetes consiste à adopter différents outils et structures. Draft, Gitkube , Helm, Ksonnet ou Skaffold sont des outils apparus dans ce contexte.

Image for post
Image for post

On a vu ici que Ballerina et Pulumi ont introduit différentes approches en permettant aux développeurs de gérer l’automatisation du déploiement dans le langage de programmation lui-même sans avoir à écrire des descripteurs de déploiement YAML. Cela devient peut-être une tendance et changera probablement la pratique DevOps dans l’industrie du logiciel …

Quelques liens :

A suivre !

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