GitOps simplifié avec Rancher Continuous Delivery, Gitea et K3s dans Hetzner Cloud …

Image for post
Image for post

Comme le relate Rancher dans son blog, Rancher 2.5 simplifie le déploiement continu avec Rancher Continuous Delivery. Une nouvelle fonctionnalité qui adopte une approche GitOps pour rationaliser le processus dans toute infrastructure (environnements privés, publics, hybrides ou multi-cloud).

Image for post
Image for post

Un référentiel Git est ici la seule source d’autorité pour la configuration. Toutes les définitions sont conservées à la source, qu’il s’agisse de définitions de configuration de cluster Kubernetes, de définitions de déploiement d’application ou bientôt de définitions de politique de sécurité.

Lorsque les développeurs apportent des modifications à une application, Git peut la transmettre à Kubernetes pour le déploiement. Si les changements s’écartent de l’état souhaité, Git peut les remettre en ligne.

Le projet Fleet, lancé plus tôt cette année, est le moteur de la livraison continue dans cette nouvelle version de Rancher. Fleet est un contrôleur de cluster Kubernetes conçu pour relever les défis de l’exécution de milliers à des millions de clusters dans le monde …

Image for post
Image for post

Une démonstration simple avec le lancement dans Hetzner Cloud d’une première instance Ubuntu 20.04 LTS avec Rancher Server 2.5 :

Image for post
Image for post

via son image Docker …

Image for post
Image for post

Le serveur Rancher est accessible avec un petit cluster k3s installé par défaut :

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

Lancement d’une deuxième instance dans Hetzner Cloud destinée à exécuter un cluster K3s standalone :

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

Ce cluster K3s actif, je peux l’importer dans le serveur Rancher :

Image for post
Image for post

via ces manifests YAML …

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

Le cluster est importé et prêt à être utilisé dans le module Rancher Continuous Delivery comme on le verra plus loin …

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

Création d’une troisième instance Ubuntu 20.04 LTS destinée à exécuter un serveur Gitea dans Hetzner Cloud :

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

Le serveur expose localement par défaut sur port TCP 3000. Je vais l’exposer publiquement via Caddy 2, le fameux serveur web Open Source, avec le mode HTTPS automatique et écrit en Go :

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

Exposition publique de Gitea avec ce domaine Wildcard et Caddy …

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

J’importe mon dépôt Git existant du sempiternel démonstrateur FC :

Image for post
Image for post

Je retourne sur le dashboard du serveur Rancher 2.5 et le cluster K3s précédemennt crée est déclaré dans le module Rancher Continuous Delivery :

Image for post
Image for post

Je crée un groupe de cluster qui contiendra ce cluster K3s ou d’autres clusters Kubernetes à importer (c’est donc Fleet qui pilotera un éventuel déploiement dans une flotte de clusters Kubernetes) :

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

Je déclare mon dépôt Git via Gitea dans Rancher Continuous Delivery :

Image for post
Image for post

Je déclare le chemin vers le ou les manifests de déploiement au sein de ce dépôt Git :

Image for post
Image for post

Cela génère ce fichier de configuration YAML :

Image for post
Image for post

Dès lors s’opère un déploiement automatique du démonstrateur FC vers le cluster K3s :

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

Avec ce manifest YAML présent dans le dépôt Git :

Image for post
Image for post

Je peux le vérifier localement au sein du cluster K3s :

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

Le démonstrateur FC est accessible publiquement via Traefik comme Ingress Controller dans le cluster K3s :

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

Rapide test de l’action de Rancher Continuous Delivery avec la modification du manifest de déploiement du démonstrateur FC directement dans Gitea :

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

Le nombre de Pod passe de 4 à 2 ici. Automatiquement ce changement est appliqué au sein du cluster K3s …

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

Avec assez peu de ressource consommée dans ce cluster Kubernetes minimal …

Image for post
Image for post

L’approche GitOps sous-jacente dans cet exemple s’appuie sur des processus de flux de travail matures et bien connus, compris par le développeur et le personnel d’exploitation.

Rancher Continuous Delivery tire donc parti des ensembles d’outils de développement Git existants pour gérer les applications cloud natives, garantissant ainsi que les applications s’exécutent comme prévu (déjà réalisable avec le projet Fluxctl) …

Rancher Continuous Delivery s’appuie ici sur Fleet, conçu pour gérer jusqu’à un million de clusters. Il est également suffisamment léger pour fonctionner parfaitement pour un seul cluster, mais il brille vraiment lorsque vous arriverez à grande échelle, c’est à dire un grand nombre de clusters, un grand nombre de déploiements, soit un grand nombre d’équipes dans une seule organisation …

Image for post
Image for post

Pour cela, Fleet peut gérer les déploiements à partir de Charts avec Helm, de manifest YAML ou via Kustomize voire une combinaison des trois …

Fleet est un projet distinct de Rancher et peut être installé sur n’importe quel cluster Kubernetes avec Helm.

Image for post
Image for post

À suivre !

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