Introduction

La virtualisation est à la mode. Certaines DSI ne jurent que par elle comme si elle était la solution à tous les problèmes informatiques. A mon sens on virtualise trop et surtout n'importe comment. Il existe sur le marché un nombre important de solutions. Chacune bien entendu se revendiquant : "the best !". La virtualisation est une des briques du Cloud Computing, ça aussi c'est tendance et toute entreprise, même si elle n'en a aucun besoin, se doit d'avoir son Cloud.

OpenStack est un projet parmi tant d'autres auquel s’intéresse de plus en plus d'entreprises ( ce qui me plait bien, car on fait comme ça des formations... ). Ce billet est extrait donc du cours OpenStack ( 3 jours ) que je donne régulièrement. Il ne s'intéresse qu'a l'installation des composants de base OpenStack une machine virtuelle.

Soyons clair dès le début : OpenStack n'est pas simple du tout. Ce billet n'a pas d'autre prétention que de mettre en place un config minimale et opérationnelle dans un environnement de formation. De toute manière devstack est totalement inadapté à une production.

OpenStack

Déjà ce n'est pas un produit mais un ensemble de composants OpenSource assemblés pour mettre en place une plateforme de virtualisation de type IaaS ( Infrastructure As A Service ). La littérature spécialisée emploi le terme de framework ( comme si la langue française n'était pas assez riche ! ). Selon la configuration souhaitée on installe plus ou moins de ces composants. Certains sont bien sur obligatoires, il s'agit de :

  • Nova nommé compute, c'est un peu le système central de OpenStack. Ce composant gère notamment le ou les hyperviseurs de virtualisation : KVM ( par défaut ), Xen, QEMU, ESX...
  • Neutron qui est chargé de la gestion réseau; Dans certaines configurations très simples il n'est pas requis.
  • Cinder pour le stockage dit type bloc, en clair où seront les disques des machines virtuelles ( File System classiques, SAN, NAS, iSCSI,... )
  • Keystone pour la gestion des autorisations et des droits.

A ceci se rajoute une interface d’administration en mode Web nommée Horizon. Il existe d'autres composants, mais ce n'est pas l'objectif de ce billet.

Tout ce joli monde dialogue via RabbitMQ qui utilise le protocole AMQP ( et en bonus des API REST ! ) -> Voir Wikipédia et consorts pour en savoir plus.

OpenStack est écrit dans le langage Python. Les versions sortent à un rythme soutenu ( 2 par an ) ce qui a de quoi rendre fou tout adepte de stabilité.

OpenStack fait un peu "usine à gaz" ce qui n'est pas si loin de la réalité. Toutefois c'est un produit intéressant mais qui demandera beaucoup, beaucoup de temps d'apprentissage, de recherche, d'essai...et aussi un matériel conséquent.

Les difficultés commencent dès l'installation, ne pas espérer un truc du style "yum -y install openstack". Si on suit la documentation il faut au minimum 3 serveurs avec de 1 à 3 cartes réseau ( plus les switches adaptés ). Il est évident que lors d'une formation il est difficile de mettre ceci en place même avec des machines virtuelles type VirtualBox ( sur un cours de 3 jours on y passerait quasiment une journée ! ).

Le projet Devstack permet d'installer une plateforme OpenStack minimale sur une seule et même machine ( on dit "All In One" ) qui peut être un vrai serveur ( là on dit "Bare-Metal", je sais c'est lassant... ) ou une VM VirtualBox. C'est cette approche que je vais présenter. La documentation du projet Devstack n'est pas très simple pour le débutant et surtout comporte pas mal de choses non dites.

Du fait de l'utilisation de VirtualBox l'hyperviseur sera QEMU. Encore une fois ne pas espérer des performances accrues avec ce type de mise en place.

Dans cet exemple l'OS sera CentOS 7 en 64 bits. La version OpenStack sera la dernière en date : Liberty. Devstack en fait ne supporte que CentOS/RedHat7 ou Ubuntu 12.04 ou bien Suse...

Installation de la VM

Sous VirtualBox créer une VM avec deux cartes réseau :

  • La première en mode Pont afin d'aller sur le Net
  • La seconde en mode réseau privé

Affecter au moins 4Go de RAM ( en dessous c'est complètement inexploitable ) et un disque de 50Go. Installer ensuite la VM avec la version 7 de CentOS. Procéder à une installation type Minimale et affecter correctement les IP ( si possible ne pas utiliser DHCP ).

Très important : lors de l'installation créer un utilisateur en plus du root avec les droits d'administration ( via sudo ). En effet devstack ne peut s'installer sous l'identité du root. Dans ce billet cet utilisateur sera nommé : stack.

Une fois l'OS en place il faut installer deux packages supplémentaires via yum

yum -y install git net-tools

Devstack est stocké dans un dépot GIT. Quand à net-tools ce package permet de disposer de la commande ifconfig en CentOS 7 qui n'est pas installée dans le package Minimal.

OpenStack et SELinux : Un conseil désactiver purement et simplement SELinux en positionnant SELINUX=disabled dans le fichier /etc/selinux/config. Il n'est pas utile de rebooter la commande "setenforce 0" permet la désactivation temporaire ( en fait le mode passe à permissive ). En production il existe un package spécial permettant d'utiliser SELinux.

setenforce 0
getenforce -> Permissive

A partir ce cet instant le compte root n'est plus requis. Se connecter donc en stack.

Télécharger Devstack

La commande est simple :

git clone https://git.openstack.org/openstack-dev/devstack

Ceci va, dans la home directory de stack, créer un répertoire devstack. Se positionner dans ce répertoire.

cd devstack

Le script à lancer est stack.sh qui va poser certaines questions notamment sur des mots de passe. Il est possible ( et conseillé ) de créer un fichier nommé local.conf qui contiendra ces mots de passe. Ci dessous un fichier type :

[[local|localrc]]
ADMIN_PASSWORD=silverlake
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=openstacktoken01

La documentation devstack détaille ce fichier, mais pour une première approche ces lignes sont suffisantes.

Tous les services auront le même mot de passe. La chaine SERVICE_TOKEN doit normalement être une suite en hexa-decimal unique, mais pour un test faire simple.

Ce fichier doit se nommé local.conf et être dans le répertoire ~/devstack. Lancer ensuite le script.

./stack.sh

Beaucoup de choses s'affichent à l’écran, il faut notamment donner le mot de passe du user stack ( La commande sudo est dans le script, par la suite ce user aura une option NO_PASSWD voir le fichier /etc/sudoers. ). Selon le débit Internet l'installation est plus ou moins longue ( compter 40-60 minutes avec une ADSL classique ). La fin d'installation est signalée ainsi :

This is your host IP address: 192.168.3.100
This is your host IPv6 address: ::1
2015-11-01 12:47:48.600 | Skip setting lvm filters for non Ubuntu systems
Horizon is now available at http://192.168.3.100/dashboard
Keystone is serving at http://192.168.3.100:5000/
The default users are: admin and demo
The password: silverlake
2015-11-01 12:47:48.607 | stack.sh completed in 3462 seconds.

En fin d'installation il est possible de se connecter à l'interface Web via l'IP, à condition de stopper iptables, les règles du parefeu sont mal faites et il est impossible de se connecter à l'interface Web. Le plus simple est de faire ainsi :

sudo iptables -F
sudo systemctl disable iptables

Les plus courageux pourront s'attaquer au paramétrage iptables. Les parefeu (firewall ? ) ayant tendance à ne régler que les problèmes qu'ils génèrent.

Jusqu'ici ce billet n'apporte pas grand chose par rapport à la documentation officielle. Le soucis vient quand vous aller relancer votre VM et là : plus rien ne fonctionne ! En effet devstack ne créé rien dans les scripts de démarrage automatique. Inutile donc de chercher à coup de chkconfig ou systemctl !

Post-installation

Il faut activer certains services au boot

sudo systemctl enable rabbitmq-server
sudo systemctl enable mariadb
sudo systemctl enable httpd

La version liberty utilise mariadb et non mysql. Ne pas oublier ci-dessus de désactiver iptables.

Relancer la VM.

Il faut activer la vision par l'OS des espaces de stockage qui sont simulés par des fichiers situés sous /opt/stack/data/. La commande losetup permet ceci.

sudo losetup -f /opt/stack/data/stack-volumes-default-backing-file
sudo losetup -f /opt/stack/data/stack-volumes-lvmdriver-1-backing-file

Se positionner dans le répertoire de devstack et lancer le shell rejoin-stack.sh

cd ~/devstack/
./rejoin-stack.sh

Ce script utilise screen, pour en sortir utiliser "<ctrl>"+"a" et "d". Il est évident que vous pouvez faire un shell qui se lance au boot et faisant tout ça !

Conclusion

OpenStack est complexe. Devstack permet de créer un environnement de test ou de formation, rien de plus. La doc officielle ne dit pratiquement rien sur quoi faire après un reboot. C'était le but de ce billet sans prétention. Ensuite il reste le plus dur apprendre OpenStack mais c'est une autre histoire.