Empaqueter et télé-déployer son cluster Kubernetes et ses applications simplement avec Gravity …
Tags: kubernetes, docker, hetzner, digitalocean
Published: 2020-07-19 20:48:28

---
title: Empaqueter et télé-déployer son cluster Kubernetes et ses applications simplement avec Gravity …
published: true
date: 2020-07-19 20:29:03 UTC
tags: kubernetes,docker,hetzner,digitalocean
canonical_url: https://medium.com/@deep75/empaqueter-et-t%C3%A9l%C3%A9-d%C3%A9ployer-son-cluster-kubernetes-et-ses-applications-simplement-avec-gravity-fcc2cecae34d
---

![](https://cdn-images-1.medium.com/max/2658/1*i33_JOxG1S_7aD4zhk0D6A.jpeg)

Gravity (de la société Gravitational) est un outil open source permettant aux développeurs de regrouper plusieurs applications Kubernetes dans un fichier *.tar* facilement distribuable appelé «image de cluster».

[**gravitational/gravity**
*Gravity is an upstream Kubernetes packaging solution that takes the drama out of deploying and running applications in…*github.com](https://github.com/gravitational/gravity)

Une image de cluster contient tout ce dont une application a besoin et peut être utilisée pour créer rapidement des clusters Kubernetes préchargés avec des applications à partir de zéro.

Ou pour charger des applications contenues dans une image dans un cluster Kubernetes existant comme OpenShift ou GKE.

![](https://cdn-images-1.medium.com/max/2640/1*ACzD80OkCTREn79PWTFW4A.jpeg)

[**Run Cloud-native Applications in Uncharted Territory | Gravity**
*Make cloud-native applications work in any Linux environment, even air-gapped data centers or edge devices. Meet strict…*gravitational.com](https://gravitational.com/gravity)

>  Gravity peut être utilisé par les organisations qui ont besoin de déployer leurs applications Kubernetes dans des «territoires inexplorés» tels que l’infrastructure de leurs clients (cloud ou sur site), dans un contexte d’Edge Computing ou pour empaqueter des applications pour une distribution interne facilement sur différents clouds …

Elle est présente dans le fameux paysage de la CNCF (Cloud Native Computing Foundation).

[**CNCF Cloud Native Interactive Landscape**
*Filter and sort by GitHub stars, funding, commits, contributors, hq location, and tweets. Updated: 2020-07-19 00:23:28Z*landscape.cncf.io](https://landscape.cncf.io/selected=gravity)

![](https://cdn-images-1.medium.com/max/2730/1*KsUSosn-D89zm8Frk37ifA.jpeg)

![](https://cdn-images-1.medium.com/max/2000/0*TokK-AzMsnfEmhC_.jpg)

La récente version 7.0 a apporté la faculté de :

* Déployer des images Gravity Cluster dans des clusters Kubernetes existants (avec des noeuds protégés notamment par SELinux).

* Faciliter l’exécution des clusters Gravity dans des environnements où la sécurité et la conformité sont primordiales (via notamment Teleport, une passerelle SSH / Kubernetes intégrée pour synchroniser le contrôle d’accès basé sur les rôles pour les deux protocoles et fournir une authentification unifiée).

[**Announcing Gravity 7.0**
*Today, we are excited to announce the release of Gravity 7.0! Gravity is a tool for developers to package multiple…*gravitational.com](https://gravitational.com/blog/announcing-gravity-7-0/)

[**Secure Access for Developers that Doesn't Get in the Way**
*" Gravitational reduces the operations and the support burden normally associated with on-premises software. The…*gravitational.com](https://gravitational.com/teleport/)

Lancement pour ce nouveau test d’un droplet sous Ubuntu 20.04 LTS dans DigitalOcean :

![](https://cdn-images-1.medium.com/max/2298/1*FwBpRCySqwjUZtmJDtBHdA.jpeg)

avec l’installation préalable du moteur Docker :

![](https://cdn-images-1.medium.com/max/2456/1*7Dj-ioaN7kudS4h1DqQldg.png)

Je récupère le paquet contenant Gravity depuis le site web de Gravitational (qui existe sous une version communautaire ou commerciale) :

[**Download Gravity - Community Edition**
*Gravity is open-source, meets open standards and is built with cloud-native expertise. Open source and open standards…*gravitational.com](https://gravitational.com/gravity/download/)

![](https://cdn-images-1.medium.com/max/2718/1*CmrNc3nP2mbmpunc3nVtdg.jpeg)

Ce paquet contient les binaires nécessaires au bon fonctionnement de Gravity …

![](https://cdn-images-1.medium.com/max/3668/1*wujPWeKkfTZDtSUKeN5PzQ.png)

Je récupère le dépôt Git des exemples relatifs à la solution Gravity …

![](https://cdn-images-1.medium.com/max/3264/1*fPIXlEejBgTSYpmO8Uy1iQ.png)

qui contient les Charts Helm nécessaires au déploiement de Wordpress :

![](https://cdn-images-1.medium.com/max/2610/1*8GkXcJYxJ_0KZFx1Dqa7Gg.jpeg)

mais aussi les manifests YAML comprenant l’installation ou la mise à jour du cluster :

![install.yaml](https://cdn-images-1.medium.com/max/2556/1*vRu53bVnxcKDr7oV5LNMug.png)

![upgrade.yaml](https://cdn-images-1.medium.com/max/2524/1*N3Wfo-gSNCIhdKExgSm5KA.png)

On va donc commencer l’empaquetage d’un cluster K8s avec cette solution Wordpress embarquée via cette commande :

![](https://cdn-images-1.medium.com/max/3824/1*ACs5AX38O0GXJKvoSWsFbQ.png)

qui fait appel à ce fichier YAML décrivant tout le processus de déploiement du cluster Kubernetes avec Wordpress (j’ai choisi le mode à un noeud pour le cluster et il est possible dans ce cas d’opter pour un cluster médian à 3 noeuds ou en haute-disponibilité avec 6 noeuds) :

![app.yaml](https://cdn-images-1.medium.com/max/4096/1*bYRmgYUWcmUcLnOmVNmZBQ.png)

Juste avant cela j’ai arrêté le fonctionnement du moteur Docker local :

![](https://cdn-images-1.medium.com/max/2000/1*JI_ZvjOcogx2NIMCE6JcDg.png)

>  Lorsque Gravity crée un cluster Kubernetes à partir d’une image de cluster, il installe un conteneur système spécial ou “Master Container” sur chaque hôte. Ce conteneur est appelé “planète” et est visible en tant que démon pour Gravity.

>  Le conteneur principal contient tous les services de Kubernetes, en assure la gestion automatique et les isole des autres démons préexistants fonctionnant sur les hôtes du cluster.

[**Building Cluster Images**
*This section covers how to build a Gravity Cluster Image. There are two use cases we'll cover here: Building an "empty"…*gravitational.com](https://gravitational.com/gravity/docs/pack/#custom-system-container)

>  La planète est une image Docker maintenue par Gravitational. Pour le moment, l’image de la planète est basée sur **Debian 9**. L’image de base de la planète est publiée dans un Docker Registry public à l’adresse **quay.io/gravitational/planet** afin qu’il soit possible de personnaliser l’environnement de la planète pour ses Clusters en utilisant l’image de Gravitational comme base.

J’obtiens un paquet global d’environ **2,7 Go**. Je vais me servir de ce Droplet pour décompacter localement ce paquet et déployer mon cluster Kubernetes :

![](https://cdn-images-1.medium.com/max/3400/1*Jp7QaCxJhaeFv3_OJGclRQ.png)

Une fois décompaqueté, je peux lancer son installation locale :

![](https://cdn-images-1.medium.com/max/4096/1*K_8ab_XRFcKfp1EdexlElg.png)

J’obtiens les endpoints nécessaires aux accès à Wordpress et à la gestion du cluster Kubernetes :

![](https://cdn-images-1.medium.com/max/3368/1*4jIulJZ-bvyPxbBCf_LlOw.png)

Wordpress avec sa base de données est accessible sur le port TCP 30080 :

![](https://cdn-images-1.medium.com/max/4008/1*_qCobgfOS_GZSONTOBPvZA.png)

![](https://cdn-images-1.medium.com/max/2700/1*vdwvsYra6K2sEWoywFFv_g.jpeg)

![](https://cdn-images-1.medium.com/max/2730/1*noj1O6YUxUB-xPHUR4qghg.jpeg)

avec sa console d’administration :

![](https://cdn-images-1.medium.com/max/2724/1*-d5uAA50PVO4u4BkkH3PZw.jpeg)

![](https://cdn-images-1.medium.com/max/2702/1*83SFSwt5Cqdcnguajaw3Zw.jpeg)

et sa page Web par défaut :

![](https://cdn-images-1.medium.com/max/2710/1*xI6edwk7QNP5cqX-MI0ivQ.jpeg)

Via la solution Teleport (passerelle SSH / Kubernetes avec RBAC), je crée un utilisateur avec des droits d’administration :

![](https://cdn-images-1.medium.com/max/2000/0*dqzahWFoKJ3vCkZK.png)

![](https://cdn-images-1.medium.com/max/4076/1*ZWzQAsQT8LuZcgg5W4KpRQ.png)

Il est alors possible via cet utilisateur d’accéder à la console d’administration et de monitoring fournie par Gravity …

![](https://cdn-images-1.medium.com/max/2710/1*AhIs6-R7fHYl8gH8tbpoIw.jpeg)

où je peux visualiser le Droplet que j’ai utilisé pour ce télé-déploiement :

![](https://cdn-images-1.medium.com/max/2680/1*gdsfGAhTJp3XCa73nE2YSg.jpeg)

la partie logs :

![](https://cdn-images-1.medium.com/max/2688/1*Ft2ogjNPKV4s_hqrnBHjyQ.jpeg)

une console SSH :

![](https://cdn-images-1.medium.com/max/2718/1*gkAXXDuSmeLst4-5tQE3xg.jpeg)

et le cluster Kubernetes local :

![](https://cdn-images-1.medium.com/max/2688/1*wk1DlbSLYig-ugu8MSAMWw.jpeg)

sans oublier la partie monitoring fournies par le célèbre duo “Prometheus + Grafana” :

![](https://cdn-images-1.medium.com/max/2674/1*723MAOvhsqkY7A9vi0m5Qg.jpeg)

![](https://cdn-images-1.medium.com/max/2688/1*9k3waogpnr4rjkWTqLTh-w.jpeg)

Je décide d’ajouter deux nouveaux noeuds externes à ce cluster via deux nouveaux Droplets :

![](https://cdn-images-1.medium.com/max/2292/1*KH7Ri_6Dqbfis6zAShumzQ.jpeg)

L’un sera dédié à la partie Front de Wordpress avec les conteneurs correspondants :

![](https://cdn-images-1.medium.com/max/2730/1*Pd18lF4WuxgUrgCF-3V8eQ.jpeg)

avec la génération de ces scripts d’installation de Gravity :

![](https://cdn-images-1.medium.com/max/2716/1*0cygSeJAvdgDlsT7ZNIVnA.jpeg)

que j’exécute dans le Droplet :

![](https://cdn-images-1.medium.com/max/4096/1*k4t2ILZyI0JubL1pq6DueQ.png)

Le noeud apparaît et est actif dans la console d’administration :

![](https://cdn-images-1.medium.com/max/2688/1*Ybcm3R2eQOM_ct8_TCuxig.jpeg)

Le second Droplet sera lui logiquement dédié à la partie Base de données avec les conteneurs correspondants :

![](https://cdn-images-1.medium.com/max/2674/1*9-Osnn-2J8WhQj07cNTIuA.jpeg)

![](https://cdn-images-1.medium.com/max/2700/1*mmGimqiaEuV7mVXP1hzL1w.jpeg)

Lancement des deux scripts :

![](https://cdn-images-1.medium.com/max/4096/1*MgPZday-taJzIFogQiGk_Q.png)

Les trois noeuds du cluster sont actifs avec Wordpress embarqué :

![](https://cdn-images-1.medium.com/max/2694/1*wv8TatEieGNlUlL7NpUZYQ.jpeg)

Je m’en assure via Teleport et la console SSH sur le noeud maître :

![](https://cdn-images-1.medium.com/max/2728/1*l4f0aZGmIrSzHfVmpiEwNA.jpeg)

Il existe un modèle en pur déploiement web via un mode “Wizard”. Test de ce dernier avec toujours Wordpress en backend via la réutilisation de l’archive .tar précédemment générée.

Je pars ici de trois instances Ubuntu 20.04 LTS dans Hetzner Cloud qui propose depuis peu des instances avec processeurs AMD EPYC et d’un Droplet dans DigitalOcean qui contient l’archive :

![](https://cdn-images-1.medium.com/max/2656/1*tkqPDaGw8iGt3uAIUspXoQ.jpeg)

![](https://cdn-images-1.medium.com/max/2702/1*akXtCu9d0v0Wf3pYsihORA.jpeg)

Lancement du télé-deploiement du cluster Kubernetes avec la solution Wordpress embarquée via ce mode Wizard depuis le Droplet Ubuntu dans DigitalOcean :

![](https://cdn-images-1.medium.com/max/2722/1*_oDK2HjwAVzal1Ij_2AWig.jpeg)

Un endpoint avec une console Web est accessible pour la suite des opérations :

![](https://cdn-images-1.medium.com/max/2728/1*so5nQizn9hutPrektXf5Xw.jpeg)

Comme l’utilisation d’un FQDN est préconisé par Gravitational pour le nom de ce futur cluster Kubernetes, j’en choisis un en domaine Wildcard.

Puis je choisis une architecture classique à trois noeuds pour le cluster Kubernetes (un noeud maître généraliste et deux noeuds Worker avec l’un dédié comme précedemment à la partie Front de Wordpress et le second à la partie Base de données) :

![](https://cdn-images-1.medium.com/max/2730/1*KAsHOSNBXzFE7FtNZW0zIg.jpeg)

Et les scripts d’installation à lancer sur ces instances dans Hetzner Cloud sont fournies encore une fois :

![](https://cdn-images-1.medium.com/max/2730/1*PxZbQwI0A-0CW0kPzB9PEw.jpeg)

Exécution de ces derniers sur les instances Ubuntu :

![](https://cdn-images-1.medium.com/max/2726/1*6pQz79__e4p1w0oVIe2S1Q.jpeg)

![](https://cdn-images-1.medium.com/max/2722/1*HT-BVJREj1xP8osXluhAFQ.jpeg)

![](https://cdn-images-1.medium.com/max/2720/1*qrEwE_OUBiiXf8VnyEq2Rg.jpeg)

Adresses IP et Hostname apparaissent au fur et à mesure de l’exécution de ces scripts dans la console Web :

![](https://cdn-images-1.medium.com/max/2722/1*nEAahpbslusKXvEaXoWmKA.jpeg)

J’initie alors le processus de télé-déploiement du cluster Kubernetes en mode Web :

![](https://cdn-images-1.medium.com/max/2728/1*0UVf7nZ54hXyfZ7RIpc9Sw.jpeg)

![](https://cdn-images-1.medium.com/max/2724/1*eGZNAuYEtskIFXMPIkutEA.jpeg)

![](https://cdn-images-1.medium.com/max/2726/1*SvTWVSQ088tM0CiwAcYkhg.jpeg)

Après un laps de temps, l’installation se termine …

![](https://cdn-images-1.medium.com/max/2726/1*dA_ON6Xya9X29Q32VNOw1A.jpeg)

Et j’accède au dashboard du cluster offert par Gravity :

![](https://cdn-images-1.medium.com/max/2706/1*jHwGeR4ii2anWxQpe_BEug.jpeg)

![](https://cdn-images-1.medium.com/max/2698/1*s0cU7Wi4i_l4sB4gnHCkYQ.jpeg)

![](https://cdn-images-1.medium.com/max/2694/1*AyFUXoFd9Ds8W-VJl2qpCQ.jpeg)

La solution Wordpress est déployée et active :

![](https://cdn-images-1.medium.com/max/2730/1*1SslIDxGef3OJtXI_JyL_Q.jpeg)

![](https://cdn-images-1.medium.com/max/2708/1*TYgTfWgGQ2yLM-_9OG-_rQ.jpeg)

Ainsi que la partie Monitoring via Grafana + Prometheus :

![](https://cdn-images-1.medium.com/max/2694/1*pBUcHQRUoFrFRdgetiepXw.jpeg)

Via Teleport, je peux contrôler ce cluster avec le client Kubectl :

![](https://cdn-images-1.medium.com/max/2726/1*9lLDjO1eQUGCmacsPX0LoA.jpeg)

Wordpress est accessible encore une fois par défaut en mode NodePort sur le port TCP 30080 de tous les noeuds du cluster Kubernetes :

![](https://cdn-images-1.medium.com/max/2690/1*ccKmNZsCmjqrMTmuSnAZhg.jpeg)

![](https://cdn-images-1.medium.com/max/2712/1*_0ytP5ZZz57ZwO93tlcang.jpeg)

![](https://cdn-images-1.medium.com/max/2702/1*fod_cV5OuGl6vgsqpsABfA.jpeg)

avec sa page de blog par défaut …

![](https://cdn-images-1.medium.com/max/2704/1*hqSULnfm20wsG-7omViRBQ.jpeg)

Je peux tester en mode Beta l’accès à cette page depuis le port 80 via l’utilisation du nouveau service de Load Balancing offert par Hetzner Cloud :

![](https://cdn-images-1.medium.com/max/2710/1*QjAReGkfptoSUzg28XNENw.jpeg)

![](https://cdn-images-1.medium.com/max/2700/1*Rp5VIn_iVaNSf4GhRrEWCw.jpeg)

Les clusters Kubernetes créés avec Gravity sont désormais automatiquement configurés pour exécuter OpenEBS . Cela facilite considérablement le package de bases de données et d’autres services avec état dans des images de cluster Gravity.

Gravity a inclus la commande ‘*gravity status*’, qui explique bien ce qui ne va pas le cas échéant avec son cluster K8s. Et offre également une «vue chronologique» qui vous permet de voir comment l’état d’un cluster a changé au fil du temps.

La version commerciale de Gravity offrant la possibilité d’acquerir un Gravity Hub pour “récupérer ou pousser” son cluster Kubernetes et ses applications comme on le ferait avec des conteneurs …

![](https://cdn-images-1.medium.com/max/2560/0*K82bOfZ1jHbd9omw.png)

Très récemment, c’est la passerelle Teleport qui a bénéficié d’une amélioration de son interface utilisateur …

[**Teleport 4.3 Product Release Notes: A New UI & Approval Workflow Plugins**
*This is a major Teleport release with a focus on new features, functionality, and bug fixes. It's a substantial release…*gravitational.com](https://gravitational.com/blog/4-point-3-release-notes/)

[**Teleport Demo Video - Modern SSH**
*We recently launched Teleport 4.3 and received an overwhelming response from newer members of the community. They have…*gravitational.com](https://gravitational.com/blog/teleport-demo-video/)

Il y a encore plein de choses passionnantes à découvrir sur la feuille de route de Gravity !

![](https://cdn-images-1.medium.com/max/2000/0*FLFo2WoQBjgS6KzI.png)
[**Gravity Overview - Gravitational Gravity**
*Gravity is an open source toolkit that provides true portability for cloud-native applications. It allows developers to…*gravitational.com](https://gravitational.com/gravity/docs/)

![](https://cdn-images-1.medium.com/max/2000/0*7SM755OMjE2-SkVR.jpg)

À suivre !