titre informatique

Présentation

OpenNebula

OpenNebula est une solution permettant de mettre en place une infrastructure de cloud computing privé de type IaaS. Un serveur OpenNebula orchestre une grappe de serveurs (des noeuds) sur lesquels sont déployés les instances de machines. Ces machines peuvent être des machines virtuelles (KVM, Firecracker) ou des conteneurs (LXD).

Dans cette documentation, vous verrez comme configurer une simple infrastructure de cloud computing permettant le déploiement de conteneurs LXD.

Prérecquis

Le déploiement de cette infrastructure a été testée avec Ubuntu 22.04 (que ce soit pour le serveur OpenNebula ou les noeuds). Cette version intègre nativement LXD (le système de gestion de conteneurs LXC d'Ubuntu), ce qui évite de l'installer sur les deux noeuds. Pour cet atelier, trois machines Ubuntu 22.04 seront utilisés : une pour le serveur OpenNebula et deux noeuds pour héberger les conteneurs. Il est plus pratique d'utiliser une machine avec interface graphique pour le serveur OpenNebula car ce système se gère avec une interface web (le frontal). Les deux serveurs LXD peuvent être des machines Ubuntu Server. Une quatrième poste peut être également utilisé pour vérifier le fonctionnement d'OpenNebula pour des clients.

OpenNebula nécessite que les machines de l'infrastructure (le serveur OpenNebula et les différents noeuds) communiquent via un nom de domaine. Dans cette documentation, nous considérerons que les machines soient joignables via ces adresses :

 Machine Adresse IP Nom
 Serveur OpenNebula  192.168.1.1/24  one.infra.net
 Noeud 1  192.168.1.11/24  lxd1.infra.net
 Noeud 2  192.168.1.12/24  lxd2.infra.net

L'association entre le nom et l'adresse IP de ces machines peut être réalisée via un serveur DNS ou en modifiant le fichier /etc/hosts de ces machines.

Nous considérerons également que l'adresse de passerelle du réseau est 192.168.1.254 et l'adresse du serveur DNS 192.168.1.250.

 

Préparation des noeuds

En cas d'utilisation de machines clonées

Si vous utilisez une même machine que vous clonez pour mettre en place vos deux noeuds LXD, les deux machines auront la même adresse MAC lors de la configuration de la carte réseau en pont. Pour éviter ce problème, il est nécessaire de générer un nouvel identifiant de machine pour ces deux machines, en suivant la démarche suivante :

  • Supprimer le fichier /etc/machine-id ;
  • Générer un nouvel identifiant avec la commande dbus-uuidgen --ensure=/etc/machine-id ;
  • Redémarrer la machine pour prendre en compte le nouvel identifiant.
Configuration réseau des noeuds
Mode promiscuité

Les noeuds vont héberger les différentes instances de machines déployées dans l'infrastructure de cloud computing. Leur carte réseau va donc devoir accepter les requêtes à destination d'une autre adresse MAC de la leur. Vous devez donc passer leur carte réseau en mode promiscuité (n'oubliez pas de configurer le mode promiscuité dans la configuration des cartes réseaux de votre environnement de virtualisation si vous mettez en place cette infrastructure au sein d'un hyperviseur comme VirtualBox).

Sous Ubuntu, vous pouvez activer le mode promiscuité sur une carte réseau avec la commande ip link set enp0s3 promisc on (si enp0s3 est le nom de votre carte réseau). Attention, cette commande est à réaliser à chaque redémarrage du système (vous pouvez créer un script qui lance automatiquement cette commande au démarrage).

Création des ponts

Afin de faire communiquer les conteneurs générés par OpenNebula avec le reste du réseau, les cartes réseaux des noeuds doivent être configurés en pont. Voici la configuration de la carte réseau du premier noeud (à adapter pour le second noeud, en changeant l'adresse IP) :

Network:
  ethernets:
    enp0s3:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces:
      - enp0s3
      addresses:
      - 192.168.1.11/24
      routes:
      - to: default
        via: 192.168.1.254
      nameservers:
        addresses:
        - 192.168.1.250
      parameters:
        stp: false
        forward-delay: 4
      mtu: 1500
      dhcp4: false
      dhcp6: false
  version: 2

 

Mise en place du serveur OpenNebula

Prérecquis

La carte réseau du serveur OpenNebula est configurée ainsi :

  • Adresse : 192.168.1.1/24
  • Passerelle : 192.168.1.254
  • Serveur DNS : 192.168.1.250
SSH

Le serveur OpenNebula communiquera avec les noeuds via le protocole SSH, vous devez donc installer le paquet ssh dessus.

Installation d'OpenNebula
Ajout des dépôts d'OpenNebula
  • Installation du paquet apt-transport-https (les dépôts d'OpenNebula sont accessibles en HTTPS). Remarque : les paquets gnupg et wget sont également nécessaires mais ils sont normalement installés par défaut sur les systèmes Ubuntu.
  • Téléchargement, décodage et stockage de la clé d'authentification des dépôts d'OpenNebula :  wget -q -O- https://downloads.opennebula.io/repo/repo2.key | gpg -–dearmor > /usr/share/keyrings/opennebula.gpg
  • Ajout du dépôt d'OpenNebula :
    • Ouvrir le fichier du répertoire /etc/apt/sources.list.d/opennebula.list (qui ne doit pas exister) ;
    • Ajouter dans le fichier la ligne deb [signed-by=/usr/share/keyrings/opennebula.gpg] https://downloads.opennebula.io/repo/6.6.0/Ubuntu/22.04 stable opennebula
    • Remarque : 6.6.0 indique la version d'OpenNebula à installer. A changer en fonction de la version que vous souhaitez et de l'évolution du système. Même chose pour le système d'exploitation, qui est ici Ubuntu 22.04.
  • Mise à jour des dépôts pour vérifier la prise en compte de ceux d'OpenNebula : apt update
Installation des paquets d'OpenNebula

Il existe plus d'une vingaine de paquets disponibles pour OpenNebula, en fonction de l'insfractucture que vous souhaite mettre en place. Dans notre situation, vous allez installer les trois paquets obligatoires pour le fonctionnement d'OpenNebula :

  • opennebula : processus et ordonnanceur d'OpenNebula ;
  • opennebula-sunstone : interface web de gestion d'OpenNebula ;
  • opennebula-fireedge : nouvelle interface web de gestion d'OpenNebula.
Base de données

OpenNebula nécessite l’utilisation d’une base de données pour stocker les informations sur les nœuds et les machines virtuelles (ou conteneurs). Pour une mise en
production d’OpenNebula, il est nécessaire d’utiliser une base de données MariaDB, MySQL ou PostgreSQL. Pour les petites infrastructures, comme celle de notre atelier, vous pouvez utiliser la base de données SQLite générée automatiquement lors de l’installation d’OpenNebula. Vous n’avez donc pas besoin de la configurer.

Mot de passe de l'administrateur

Vous pouvez tout d'abord choisir le mot de passe de l'utilisation d'administration d'OpenNebula nommé oneadmin. Le mot de passe est généré aléatoirement lors de l'installation d'OpenNebula mais il est plus simple de le définir soi-même :

  • Ouvrir le fichier /var/lib/one/.one/one_auth
  • Modifiez le mot de passe (la chaine se trouvant après le caractère "deux points" : oneadmin:motdepasse

Remarque : le mot de passe de l'administrateur ne peut plus être modifié de cette manière une fois que les services OpenNebula ont été lancés une première fois.

Les services d'OpenNebula

OpenNebula fonctionne avec trois services : opennebula, opennebula-sunstone, opennebula-fireedge. Vous devez lancer ces services puis les activer pour qu'ils se lancent à chaque redémarrage du serveur :

  • Démarrage des services : systemctl start opennebula opennebula-sunstone opennebula-fireedge
  • Activation des services : systemctl enable opennebula opennebula-sunstone opennebula-fireedge

Vous pouvez vérifier le bon fonctionnement d'OpenNebula avec la commande oneuser show. Si une erreur apparait (Failed to open TCP connection to localhost:2633), le processus d'OpenNebula n'a pas pu démarrer correctement.

Accès aux interfaces de gestion d'OpenNebula

 OpenNebula possède deux interfaces web pour gérer l'infrastructure de cloud computing :

  • Sunstone, accessible via le port 9869 ;
  • FireEdge, accessible via le port 2616.

Vous pouvez donc y accéder à partir de votre serveur OpenNebula directement, s'il s'agit d'une machine avec interface graphique possédant un navigateur web (via les adresses http://127.0.0.1:9869 et http://127.0.0.1:2616) ou d'une autre machine en utilisant l'adresse IP du serveur (dans notre cas, http://192.168.1.1:9869 et http://192.168.1.1:2616).

 

Mise en place des noeuds

Installation des paquets sur les noeuds

Vous devez installer les paquets d'OpenNebula sur vos deux noeuds afin que le système puisse interagir avec le serveur OpenNebula.

Paquets à installer sur les deux noeuds :

  • Paquet ssh : communication avec le serveur OpenNebula (normalement préinstallé sur les machines Ubuntu Server) ;
  • Paquet opennebula-node-lxc : pilote pour des noeuds LXD.

Remarque : le pilote LXD d'OpenNebula est déprécié, vous devez donc installer le pilote LXC, même si vous utiliser un serveur LXD.

Mot de passe de l'administrateur sur les noeuds

Vous devez ensuite définir le mot de passe de l'utilisateur oneadmin sur les deux noeuds avec la commande passwd oneadmin.

Ce mot de passe sera demandé lors du transfert des clés SSH avec le serveur OpenNebula.

Transfert des clés

Une liaison SSH va être mise en place entre le serveur OpenNebula et les deux noeuds. Afin d'avoir à saisir un mot de passe à chaque connexion, les machines vont devoir échanger leur certificat.

A partir du serveur OpenNebula :

  • Connexion sous l'utilisateur oneadmin avec la commande sudo su - oneadmin ;
  • Récupération des clés SSH des trois machines de l'infrastructure (le serveur et les deux noeuds) avec la commande ssh-keyscan one.infra.net lxd1.infra.net lxd2.infra.net >> /var/lib/one/.ssh/known_hosts (en utilisant bien les noms de domaine et non les adresses IP des machines) ;
  • Transfert les clés sur le premier noeud avec la commande scp -rp /var/lib/one/.ssh lxd1.infra.net:/var/lib/one/ (saisissez lorsque cela est demandé le mot de passe de l'utilisateur oneadmin que vous avez défini pour le premier noeud) ;
  • Transfert les clés sur le deuxième noeud avec la commande scp -rp /var/lib/one/.ssh lxd2.infra.net:/var/lib/one/ (saisissez lorsque cela est demandé le mot de passe de l'utilisateur oneadmin que vous avez défini pour le deuxième noeud).

Vous pouvez ensuite vérifier que les trois machines peuvent établir des connexions SSH entre elles sans saisir de mots de passe.

Configuration d'OpenNebula
Création d'un réseau virtuel

Afin que les instances de machines aient une configuration IP fonctionnelle et puissent communiquer sur le réseau (et accéder à Internet), il faut créer un réseau virtuel dans OpenNebula. A partir de l'interface Sunstone, la configuration des réseaux virtuels est accessible par le menu Network -> Virtual Networks.

Pour notre situation, nous utiliserons la configuration suivante :

  • Nom du réseau : au choix ;
  • Nom du pont : br0 ;
  • Mode réseau : pont (bridged) ;
  • Première adresse distribuée : 192.168.1.100 ;
  • Nombre d'adresses  : 99 ;
  • Adresse du réseau : 192.168.1.0 ;
  • Masque : 255.255.255.0 ;
  • Passerelle : 192.168.1.254 ;
  • Serveur DNS : 192.168.1.250.
Déclaration des noeuds

Les noeuds s'ajoutent dans OpenNebula en accédant au menu Infrastructure -> Hosts. Dans notre situation, il faut ajouter les deux noeuds en précisant, pour chacun d'entre eux :

  • Le type du noeud : LXC (et non LXD !) ;
  • Le cluster : celui par défaut ;
  • Le serveur : nom complet du serveur LXD (lxd1.infra.net et lxd2.infra.net).

 L'infrastructure est maintenant opérationnelle.

 

Création et gestion des machines

Les images
Les magasins d'images

Afin de créer les machines (ou conteneurs), OpenNebula utilise des images comme modèle. Il est possible de télécharger ces images directement dans l'interface d'OpenNebula, à partir de magasins (Storage -> Marketplaces). Par défaut, seul le magasin OpenNebula Public possède du contenu disponible, les autres magasins sont désactivés. Le magasin OpenNebula Public permet de télécharger des images virtuelles, et non des conteneurs LXD. Il faut donc activer le magasin Linux Containers.

La gestion des magasins se fait avec la commande onemarket :

  • Liste de magasins : onemarket list ;
  • Activation d'un magasin : onemarket enable id ;
  • Désactivation d'un magasin : onemarket disable id.

 Dans notre situation, vous devez retrouver l'identifiant du magasin Linux Containers (visible dans la liste des magasins) puis activer ce magasin.

Les applications

La liste des applications (images et modèles) sont disponibles dans le menu Storage -> Apps. En activant le magasin Linux Containers, vous pouvez télécharger les images de conteneurs de différentes distributions Linux.

Les modèles d'image
Présentation

Un modèle va permettre d'instancier une machine à partir d'une image, en définissant des paramètres de configuration (configuration matériel, stockage, réseau, mot de passe par défaut, etc).

Lorsque vous télécharger une image, un modèle associé à cette image est automatiquement téléchargé (sauf si vous décochez la case adéquate). Vous pouvez également créer vos propres modèles, ce qui permet de créer aux utilisateurs de votre infrastructure de cloud computing de créer des machines selon les critères que vous choisissez.

Création et gestion des modèles

La gestion des modèles de machine est accessible par le menu Templates -> VMs.

Dans la page d'édition d'un modèle (que ce soit pour sa création ou sa modification, via le bouton Update), vous pouvez notamment modifier les paramètres suivants :

  • Des informations décrivant la machine et sa configuration matériel (onglet General) ;
  • L'image associée au modèle (onglet Storage) ;
  • Le réseau virtuel associé au modèle (onglet Network) ;
  • Un script qui s'executer lors de la création de la machine (onglet Context -> Configuration)
  • Des variables permettant de personnaliser l'image créée à partir du modèle (onglet Context -> Custom vars). Exemples de variables que vous pouvez utiliser :
    • Variable PASSWORD : mot de passe de la machine ;
    • Variable SET_HOSTNAME avec $NAME comme valeur : nom système sur celui défini lors de la création de la machine.
Les machines
Création et gestion de machines

La création et la gestion des machines se font via le menu Instances -> VMs. Vous pouvez à partir d'ici créer des machines à partir des modèles, consulter leur état et leur utilisation des ressources matérielles, les arrêter, etc.

Accès aux machines

Il existe deux principales possibilités pour accéder aux machines :

  • Par l'interface web d'OpenNebula, qui offre la possibilité d'utiliser VNC (Virtual Network Computing) ;
  • Par SSH, en créant un utilisateur autorisé à se connecter en SSH sur la machine, ou en saisissant le certificat du poste client dans le modèle de la machine (Onglet Context -> Configuration).

 

Les utilisateurs

Présentation

OpenNebula est capable de gérer des comptes utilisateurs et des groupes avec des droits différents afin de permettre à des clients du service de cloud computing de créer, utiliser et gérer leurs propres instances de machine.

Gestion des utilisateurs et de leurs droits

Les utilisateurs et leurs droits se gèrent via le menu System :

  • Menu Users : gestion des utilisateurs ;
  • Menu Groupes : gestion des groupes d'utilisateurs ;
  • Menu ACLs : gestion des droits.

 

Merci à Franck Ozano pour la formation sur OpenNebula, base de cette documentation.