Introduction

L'objet de cet article est de parler de la nouvelle tendance du Gitops en lien avec Kubernetes. Nous allons monter une instance Jenkins sur un cluster de serveur Google avec GKE (cluster Kubernetes), et introduire des exemples de développement web via Github, du Gitops quoi !

Mais c'est quoi "Gitops" ??!

Je ferai un article plus poussée pour expliquer "cette technologie" ou cette méthode de CI/CD sur un cluster Kubernetes ; pourquoi ? comment ? quel apport par rapport à ce qui existe déjà ?

Ce qu'il faut retenir :

GitOps est un moyen de faire une livraison continue sur un cluster. Cela fonctionne en utilisant Git comme source unique pour l'infrastructure et les applications.

Avec Git au centre de vos pipelines de distribution, chaque développeur peut faire des requêtes et utiliser Git pour accélérer et simplifier les déploiements d'applications et les tâches opérationnelles vers Kubernetes. En utilisant des outils familiers tels que Git, les développeurs sont plus productifs et peuvent se concentrer sur la création de nouvelles fonctionnalités plutôt que sur des tâches opérationnelles.

Screenshot-2017-08-22-10.44.29

Un schéma résumant le principe du Gitops

Synopsis

Cette commande va créer un nouveau cluster Kubernetes sur GKE, installer les dépendances locales requises et alimenter la plate-forme Jenkins X

Vous pouvez voir une démo de cette commande ici: https://jenkins-x.io/demos/create_cluster_gke/

Google Kubernetes Engine est un environnement géré permettant de déployer des applications conteneurisées. Il apporte nos dernières innovations en matière de productivité des développeurs, d’efficacité des ressources, d’opérations automatisées et de flexibilité open source.

Google gère des charges de travail de production dans des conteneurs depuis plus de 15 ans et nous tirons le meilleur de ce que nous avons appris au sein de Kubernetes, l’orchestrateur de conteneurs open source leader du secteur, qui alimente Kubernetes Engine.

Comment installer le binaire jx sur votre machine

macOS

Sur un Mac, vous pouvez utiliser brew:

brew jenkins-x/jx
brew install jx

Puis pour lancer la création d'un cluster sur GKE :

  jx create cluster gke

Ensuite le terminal va vous demander de choisir :

? Google Cloud Zone: europe-west3-a
? Google Cloud Machine Type: n1-standard-2
? Minimum number of Nodes 3
? Maximum number of Nodes 3

et de saisir votre compte Github pour créer le pipeline. Une fois que vous vous serez exécuté, il ne restera plus qu'à vous rendre sur l'adresse fournie par GKE pour accèder à votre instance Jenkins et trouver ceci :

Capture-d-e-cran-2018-09-06-a--14.03.23

Après s'être logué, vous trouverez chez Github dans votre liste de repositories, un nouveau repo crée par Jenkins et GKE :

Capture-d-e-cran-2018-09-06-a--14.30.30

Utiliser un quickstart

JX a une commande create quickstart qui créera une construction à partir d'un modèle standardisé. Pour exécuter cette commande, tapez ce qui suit:

jx create quickstart

Pour cet exemple, sélectionnez golang-http et choisissez un nom pour la nouvelle application, par exemple cloudshell-tutorial.

JX vous guidera ensuite dans la configuration du référentiel git pour l'application.

Ce qui donne sur Jenkins :

Capture-d-e-cran-2018-09-08-a--12.10.09

S'il s'agit de la première application que vous avez créée, le téléchargement de toutes les images de générateur requises peut prendre quelques minutes pour générer/déployer l'application. Pour afficher l'état de l'application, vous pouvez utiliser ce qui suit:

jx get activity -f \
cloudshell-tutorial -w

Capture-d-e-cran-2018-09-08-a--12.14.46

Pour afficher l'application dans chaque environnement avec les URL :

jx get apps

Capture-d-e-cran-2018-09-08-a--12.24.04

Promouvoir l'application en production
En utilisant la commande jx promote, vous pouvez pousser cette version du staging vers la production :

cd cloudshell-tutorial

jx promote cloudshell-tutorial \
    --version 0.0.1 --env production

Vous pouvez vérifier la progression du déploiement de la production en utilisant:

jx get activity -f \
    cloudshell-tutorial -w

jx get apps

Documentation :