DEV Community

Karim
Karim

Posted on • Originally published at Medium on

Serverless : Knative avec Tekton et Apache OpenWhisk à l’aide de Kontena Pharos et miniONE …

Serverless : Knative avec Tekton et Apache OpenWhisk à l’aide de Kontena Pharos et miniONE …

Le projet Knative a décidé de transformer Knative Build en un projet séparé, appelé Tekton, qui vise à fournir des fonctionnalités génériques de CI/CD basées sur Kubernetes.

Tekton Pipelines

Cela permet par exemple d’exécuter des actions OpenWhisk dans Knative. Pour démarrer ce test, je pars d’une instance Bare Metal dans Scaleway :

de type C2L :

BareMetal Instances

Et je déploie miniONE qui permet d’installer très facilement OpenNebula sur un seul hôte par une seule commande :

Au préalable, j’ai monté le second disque de 250 Go sur /var/lib :

OpenNebula est alors accessible :

Dans le Marketplace, on peut voir qu’il existe une image dédiée au déploiement d’un cluster Kubernetes :

News from the Marketplace: Kubernetes Appliance

Néanmoins, je récupère une image Ubuntu 18.04 qui va me servir au déploiement de mon cluster Kubernetes via Kontena Pharos :

et j’ai lié l’instance Bare Metal à ZeroTier (un réseau mondial peer to peer sécurisé) :

Cela me permet de créer un nouveau réseau dans OpenNebula pour mes futures machines virtuelles qui pourront être accessibles depuis l’extérieur (en plus du réseau privé créé par défaut au moment de l’installation d’OpenNebula) :

avec la réservation d’un pool d’adresses IP via le plan d’adressage défini dans ZeroTier :

Je crée alors quatres machines virtuelles pour mon cluster Kubernetes :

Récupération du binaire Kontena Pharos-Cluster sur Github :

puis création du fichier YAML nécéssaire au déploiement du cluster Kubernetes par Kontena Pharos :

cluster.yml

Déploiement du cluster Kubernetes :

Il est opérationnel :

J’installe Knative comme précédemment via Gloo (dont le binaire est à récupérer sur Github):

Knative Install using Gloo on a Kubernetes Cluster

Puis installation de Tekton :

tektoncd/pipeline

Je vais reprendre l’exemple de cet excellent article d’IBM sur le sujet :

Build a Knative Service with Tekton and Apache OpenWhisk Node.js Runtime

en commencant par créer un secret Kubernetes pour permettre à une image Docker d’être transférée dans un Docker Registry. Ce peut être Docker Hub ou tout autre Docker Registry. Et ceci via ce fichier YAML :

docker-secret.yaml

Il faut également créer un compte de service pour lier le processus de construction à ce secret afin que Tekton puisse envoyer des images Docker au Docker Registry à l’aide des informations d’identification (via ce fichier YAML) :

serviceaccount-tekton.yaml

et on les applique au cluster :

On peut alors créer une première ressource de pipeline Tekton, c’est-à-dire ici obtenir le code d’exécution Node.js de l’image Docker à partir d’Apache OpenWhisk (un pipeline de type Git définit les paramètres, y compris la révision et l’URL à utiliser) :

Le deuxième pipeline contiendra les étapes à suivre pour transmettre une image Docker au Docker Registry. Dans cet exemple on utilise Docker Hub :

Tekton s’attend à ce qu’un type soit spécifié pour PipelineResource. Dans ce cas, l’image doit être créée et poussée dans l’URL du Docker Registry fourni dans les paramètres. Une tâche Tekton définit le travail à exécuter via la définition de la ressource d’entrée en tant que ressource de Pipeline Git, la ressource de sortie en tant que référentiel Docker et les étapes à exécuter de manière séquentielle par la tâche. On définit le modèle de construction tel que l’on aurait pû le faire pour Knative-build. Définition de la tâche et application de cette dernière à Tekton via ces lignes de commande :

Une tâche peut être exécutée par une ressource TaskRun dans Tekton. TaskRun lie les entrées et les sorties à PipelineResources (déjà défini), met au point les valeurs en fonction des paramètres utilisés pour la création des modèles et exécute les étapes de la tâche. Application de cette dernière via ces lignes de commande :

On peut créer une première action Knative avec Tekton ceci via le client Knctl de Knative dont le binaire est à récupérer sur Github :

cppforlife/knctl

Je peux alors déployer un simple service “HelloWorld” (sans fichier de déploiement) et l’invoquer par une requête POST :

Ce test n’aura pas engendré la consommation de beaucoup de ressource (comme en témoignent ces graphes de Netdata sur le serveur Bare Metal) :

NetData - Get control of your Linux Servers. Simple. Effective. Awesome.

Le projet Tekton Pipelines permet donc de déclarer des pipelines de type CI/CD. Et ceci sur n’importe quel cluster Kubernetes …

tektoncd/pipeline

A suivre ! …

Oldest comments (0)