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

Image for post
Image for post

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.

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 :

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

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

Image for post
Image for post

OpenNebula est alors accessible :

Image for post
Image for post

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

Image for post
Image for post

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 :

Image for post
Image for post

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

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

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

Image for post
Image for post

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

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

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

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

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

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
cluster.yml

Déploiement du cluster Kubernetes :

Image for post
Image for post

Il est opérationnel :

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 vais reprendre l’exemple de cet excellent article d’IBM sur le sujet :

Image for post
Image for post

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 :

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

Image for post
Image for post
serviceaccount-tekton.yaml

et on les applique au cluster :

Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post

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 :

Image for post
Image for post

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 :

Image for post
Image for post

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 :

Image for post
Image for post

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

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

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

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

A suivre ! …

Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app