Astuce Ceph

Tableau de bord Ceph sans accès Internet

Ce billet a pour objectif de partager une méthode pour obtenir un tableau de bord fonctionnel pour Ceph sans accès internet.

Par Julien Lavesque, Consultant Cloud chez Objectif Libre.

 

La semaine dernière, j’ai dû procéder à un upgrade de Ceph de Jewel vers Luminous pour un de nos clients.

Le cluster avait été déployé avec ceph-ansible, j’ai donc pu utiliser le playbook infrastructure-playbooks/rolling_update.yml pour la mise à jour.

Soit dit en passant : ce playbook est magique ! Il prend en charge tout le process d’upgrade de manière fluide, avec redémarrage décalé des OSD. Ce n’est pas l’objet de l’article, mais si vous envisagez un upgrade de cluster, cela vaut le coup d’y jeter un œil.

 

Le problème de départ

Le cluster en question est un peu spécial : il est installé sur un réseau isolé, sans accès Internet. Cela n’a pas présenté de problème particulier lors des phases d‘installation et d’upgrade car nous avons utilisé un miroir local. Par contre, nous avons eu une petite surprise avec le dashboard de supervision de Ceph.

La page de résultat obtenue :

 

Après une petite recherche, j’ai pu constater que le problème venait de ce code :

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>

Le tableau de bord récupère du CSS et du Javascript depuis cloudflare, ce qui ne fonctionne pas sans accès Internet.

 

La solution

Le code des projects CSS et Javascript mentionnés ci-dessus sont hébergés sur github et peuvent être récupérés hors connexion :

 

Il est temps de modifier les sources du tableau ceph-mgr.

Les sources sont disponibles ici (sur ubuntu) : /usr/lib/ceph/mgr/dashboard

 

Le process est le suivant :

  • Copier les projets récupérés dans un répertoire static/
  • Modifier base.html pour obtenir le résultat suivant :
<link rel="stylesheet" href="{{ url_prefix }}/static/Font-Awesome-4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{{ url_prefix }}/static/ionicons-2.0.1/css/ionicons.min.css">
<script src="{{ url_prefix }}/static/moment-2.17.1/min/moment.min.js"></script>
<script src="{{ url_prefix }}/static/Chart.js-2.4.0/dist/Chart.min.js"></script>

Et voilà !

Votre tableau de bord est maintenant fonctionnel.

Évidemment, ces modifications ont été reportées dans le playbook Ansible, pour automatiser le déploiement sur tous les nœuds MGR.