Présentation du fonctionnement d'OpenNebula

OpenNebula est constitué d'un service de gestion centralisé (démon oned) qui orchestre le déploiement des machines virtuelles, pilote et supervise les hyperviseurs (host). Ce démon est écrit en ruby, et est pilotable en ligne de commande (CLI) via un compte utilisateur dédié : oneadmin. Il dispose aussi d'une interface web : sunstone.

Pour le pilotage des hyperviseurs, des scripts ruby sont déployés via ssh.

OpenNebula gère plusieurs type de stockage pour les images des VM (ssh, NFS, Ceph, gluster etc). Le plus simple pour disposer d'un espace partagé entre les serveurs restant NFS.

Prérequis

Comparé à d'autres solutions comme OpenStack, OpenNebula est beaucoup moins intrusif.

Matériels

Comme prérequis:

  • 1 serveur de gestion
  • 1 ou plusieurs hyperviseurs

Il est cependant possible d'installer la partie gestion centrale d'OpenNebulla et la partie de gestion d'hyperviseur sur la même machine. Il faudra donc au minimum disposer d'une seul machine pour tester OpenNebula.

Ici je ne parlerais que de l'installation d'OpenNebula sur CentOS 7. Le serveur de gestion ainsi que les hyperviseurs sont installés avec le profil "installation minimale".

Dépôts RPMs

Il faut disposer du dépôt EPEL 7, principalement pour des paquets en rapport avec ruby :

# yum install http://epel.mirrors.ovh.net/epel/7/x86_64/e/epel-release-7-2.noarch.rpm

Il faut ensuite configurer le dépôt officiel OpenNebula sur toutes les machines :

[opennebula]
name=opennebula
baseurl=http://downloads.opennebula.org/repo/4.10/CentOS/7/x86_64/
enabled=1
gpgcheck=0

SeLinux

Il est conseillé de passer SeLinux en permissif voire de le désactiver :

# setenforce 0

Editer le fichier /etc/selinux/config pour que ça soit permanent. C'est principalement sur le serveur de gestion, a priori sur les hyperviseurs SeLinux ne devrait pas poser de problèmes.

EDIT: il est possible de laisser SeLinux activé. Il faut cependant, dans notre cas, autoriser l'utilisation de NFS pour homedirs (/var/lib/one de l'utilisateur oneadmin) :

# setsebool -P use_nfs_home_dirs=1

Parefeu

Penser du moins au début à couper le parefeu:

systemctl disable firewalld
systemctl stop firewalld

Nous verrons peut être dans un autre billet la configuration du parefeu si besoin.

Installation du serveur de gestion

Installation d'OpenNebula

Installation des paquets pour le serveur et l'interface web sunstone:

# yum install opennebula opennebula-server opennebula-sunstone

Installation des bibliothèques gem supplémentaires. Ici un script est fournit pour faciliter cette étape, mais nécessite tout de même la compilation de certains fichiers:

# /usr/share/one/install_gems

Activation des services:

# systemctl enable opennebula
# systemctl enable opennebula-sunstone

Il y aura surement des warnings vu qu'OpenNebula fournit que des scripts sysVinit et non systemd.

La partie serveur est installée.

Configuration du stockage partagé

Le stockage partagé n'est nécessaire que si vous avec plusieurs machines.

Le plus simple pour mettre en oeuvre OpenNebula est d'avoir un système de fichiers partagés entre les différentes machines. Surtout pour faciliter le déploiement des clefs SSH. En effet OpenNebula utilise des connexions SSH entre les différentes machines pour travailler. Nous allons donc exporter le répertoire de travail principal d'OpenNebula, qui est aussi le répertoire maison de l'utilisateur oneadmin.

Tout d'abord installer le paquet nfs-utils pour la gestion du service NFS (normalement les paquets opennebula ont déjà installé nfs-utils):

# yum install nfs-utils

Pour configurer l'export NFS, ajouter cette ligne dans /etc/exports:

/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)

Activer et demarrer le service NFS:

# systemctl enable nfs-server
# systemctl start nfs-server

Taper la commande suivante pour vérifier que l'export NFS est actif:

# exportfs -v
/var/lib/one  	<world>(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

Configuration de la base de données

Il est fortement recommandé de réfléchir au choix du type de base de données à utiliser au tout début car la migration n'est pas triviale. Par défaut, OpenNebula utilise une base de type SQLITE. Cela peut suffire si vous ne prévoyez que peu de machines virtuelles. Mais il peut y avoir un impact sur les performances de l'interface web dans notre cas car le chemin par défaut de la base sqlite est sur notre export NFS. Le choix d'une base MySQL s'impose presque:

# yum install mariadb-server

Ce qui en réalité installera sur CentOS 7 les paquets mariadb.

Pour activer et démarrer le service mysql :

# systemctl enable mariadb
# systemctl start mariadb

Il faut ensuite créer la base pour OpenNebula, ainsi qu'un utilisateur pour s'y connecter :

# mysql
> CREATE DATABASE opennebula;
> GRANT ALL ON opennebula.* TO oneadmin@localhost IDENTIFIED BY 'oneadmin_secret';

La configuration du type de base SQL à utiliser se fait dans le fichier /etc/one/oned.conf :

#DB = [ backend = "sqlite" ]

# Sample configuration for MySQL
DB = [ backend = "mysql",
       server  = "localhost",
       port    = 0,
       user    = "oneadmin",
       passwd  = "oneadmin_secret",
       db_name = "opennebula" ]

Démarrage des services

Maintenant que la partie base de données est configurée, les services peuvent être demarrés :

# systemctl start opennebula
# systemctl start opennebula-sunstone

L'interface web est accessible sur le port 9869. Attention par défaut le service n'écoute que sur 127.0.0.1. Il faut modifier le host dans /etc/one/sunstone-server.conf pour mettre l'ip du serveur (ou 0.0.0.0).

Installation d'un hyperviseur

Montage NFS

Ce chapitre sur le montage NFS est à suivre que si vous avec plusieurs machines.

Le serveur export le répertoire de travail /var/lib/one de l'utilisateur oneadmin. Pour activer son montage il faut ajouter la ligne suivante dans /etc/fstab :

192.168.0.1:/var/lib/one/  /var/lib/one/  nfs   soft,intr,rsize=8192,wsize=8192        0 0

En admettant que 192.168.0.1 soit l'adresse IP de votre serveur NFS.

Il faut ensuite monter ce partage NFS avant l'installation des paquets OpenNebula (qui vont créer l'utilisateur oneadmin) :

# mkdir -p /var/lib/one
# mount /var/lib/one

Installation d'un noeud hyperviseur OpenNebula

Installation des paquets pour la partie hyperviseur sous KVM:

# yum install opennebula-node-kvm

Ceci s'occupera d'ajouter tous les paquets nécessaires à la virtualisation.

Penser à activer et démarrer le service libvirtd:

# systemctl enable libvirtd
# systemctl start libvirtd

C'est tout.

Vérification

Sur le noeud de gestion, avec l'utilisateur oneadmin, il faut s'assurer que la connexion SSH se fait sans intervention:

[root@one] # su - oneadmin
[oneadmin@one] $ ssh node01
[oneadmin@node01] $ exit
[oneadmin@one] $ ssh node02
[oneadmin@node02] $ exit

etc

Normalement c'est le cas, car l'utilsateur oneadmin possède une clef SSH autorisée (dans ~/.ssh/authorized_keys) et comme son repertoire est partagé en NFS sur l'ensemble des machines, la connexion est possible.

Ajout des hyperviseurs

A partir de maintenant tout peut se faire via l'interface web sunstone. Le login par défaut est "oneadmin" et le mot de passe a été généré lors de l'installation et il se trouve dans /var/lib/one/.one/one_auth.

Voici cependant un exemple d'ajout d'hyperviseur KVM avec driver réseau OpenVswitch :

[root@one] # su - oneadmin
[oneadmin@one] $ onehost create node01 -i kvm -v kvm -n ovswitch
[oneadmin@one] $ onehost create node02 -i kvm -v kvm -n ovswitch

Pour vérifier la liste des hyperviseurs :

[oneadmin@one] $ onehost list

Si tout ce passe bien :

  ID NAME            CLUSTER   RVM      ALLOCATED_CPU      ALLOCATED_MEM STAT  
   0 node01          -           1      10 / 200 (5%)  768M / 15.5G (4%) on    
   1 node02          -           2     20 / 200 (10%)  1.5G / 15.5G (9%) on 

Conclusion

L'installation d'OpenNebula est vraiment simple, et la partie gérant les hyperviseurs est très peu intrusive. L'interface web est complète et permet de gerer vraiment beaucoup de point, y compris des ACL, des quotas, de l'accounting, le tout dans des vues paramètrables avec une distinction entre administration, et utilisateur d'un service type cloud (vue plus simpliste). Bref il s'agit d'un produit très efficace qui commence à devenir mature, et qui a surement plus sa place aujourd'hui qu'un OpenStack qui reste une véritable usine à gaz...

Nous verrons dans un autre billet la configuration d'OpenNebula avec OpenVswitch.