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

Image for post
Image for post

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

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

Le noeud maître est prêt :

Image for post
Image for post

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 :

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

Le cluster Kubernetes est en fonction :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
$ kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml$ kubectl apply -f config.yaml
Image for post
Image for post
config.yaml

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

Image for post
Image for post

J’installe Helm :

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

Image for post
Image for post

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

Image for post
Image for post

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 :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
vocalbot.yml

La fonction apparaît sur le portail OpenFaaS :

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

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

Image for post
Image for post
handler.js

avec cette dépendance minimale :

Image for post
Image for post
package.json

Lancement de la construction de la nouvelle fonction :

Image for post
Image for post

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

Image for post
Image for post

La fonction est déployée :

Image for post
Image for post

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

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

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

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