DEV Community

Karim
Karim

Posted on • Originally published at Medium

Serverless : Déployer une application Single Page (SPA) via OpenFaaS et K3S …

Serverless : Déployer une application Single Page (SPA) via OpenFaaS et K3S …

Pour commencer cette expérience, déploiement d’un premier noeud Ubuntu 18.04 LTS de type CX11 (à 1 vCPU et 2 Go RAM) dans Hetzner Cloud :

en utilisant K3S et ce fichier cloud-init (en tant que noeud maître du cluster Kubernetes) :

Le noeud maître est prêt :

Puis je déploie trois autres noeuds Ubuntu 18.04 LTS (toujours de type CX11 à 1 vCPU et 2 Go de mémoire vive) via ce fichier cloud-init :

Le cluster Kubernetes est en fonction :

J’utilise comme d’habitude ZeroTier en conjonction de MetalLB pour assurer un service de Load Balancing dans ce cluster :


$ kubectl apply -f [https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml](https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml)

$ kubectl apply -f config.yaml

config.yaml

Je récupère sur le noeud maître OpenFaaS CLI :

J’installe Helm :

Helm - The Package Manager for Kubernetes.

$ curl -L https://git.io/get\_helm.sh | bash

$ kubectl --namespace kube-system create serviceaccount tiller

$ kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

$ kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

et je peux alors déployer OpenFaaS dans le cluster :

openfaas/faas-netes

Via l’adresse IP fournie par le service de Load Balancing, je peux accéder au portail d’OpenFaaS :

Je lance le déploiement de mon application Single Page (en l’occurence ici mon chatbot) :

via une fonction sur la base du template OpenFaaS (conçu par Alex Ellis) pour les sites statiques (utilisant Nginx pour servir le contenu). Celle-çi est d’abord construite localement sous la forme d’une image Docker qui sera poussée vers le Docker Hub (on peut également utiliser son Docker Registry privé) puis vers la plateforme OpenFaaS :

alexellis/static-site-template

vocalbot.yml

La fonction apparaît sur le portail OpenFaaS :

et je peux utiliser l’adresse fournie au moment du déploiement de la fonction pour accéder à mon chatbot :

Une autre variante sur la base du template OpenFaaS Node.js 10 Express :

openfaas-incubator/node10-express-template

Je récupère le template et je crée ma nouvelle fonction en m’inspirant du projet Leaderboard-app d’Alex Ellis sur Github :

Il utilise ce fichier handler.js qui permet de pointer vers le répertoire contenant la page web du Chatbot :

handler.js

avec cette dépendance minimale :

package.json

Lancement de la construction de la nouvelle fonction :

Suivi de la phase de “Push & Deploy” du Docker Hub vers OpenFaaS :

La fonction est déployée :

L’adresse retournée me permet d’accéder une nouvelle fois vers le contenu statique du chatbot :

Je peux vérifier via le déploiement d’un petit serveur Rancher que le tout ne consomme pas beaucoup de ressources :

Alex Ellis propose d’aller plus loin avec une nouvelle stack PLONK apparemment soutenue par la Cloud Native Computing Foundation (CNCF) :

Introducing the PLONK Stack for Cloud Native Developers

On retrouve là une ressemblance avec la stack FONK proposé sur Github par la société Serverless :

Comme le rappelle cet ancienne expérience que j’avais réalisée :

Serverless : déploiement et test de la stack FONK (FaaS — Object store — NoSQL — Kubernetes) via…

A voir si la nouvelle stack PLONK permettra de populariser cette nouvelle génération d’architecture Web qui combine ces technologies dites “Cloud Native”

A suivre !

Top comments (0)