Introduction à l’OpenStack

HPC
Écrit par Wilfried Kirschenmann, le 06 février 2018

OpenStack est un ensemble d’outils qui servent à la création et la gestion de plateformes de cloud computing publiques et privées.

Cet outil est soutenu par une communauté d’utilisateurs active et l’OpenStack Foundation, une organisation à but non-lucratif qui supervise le développement et les activités communautaires autour de ce projet.

Selon une enquête menée par la même organisation, en 2016, 65% des déploiements OpenStack se font en production.

Cet outil est de plus en plus mature pour être utilisé dans des environnements cloud de production et également utilisé dans les environnements d’intégration ou de test.

De plus, selon une étude faite par Linux Foundation en collaboration avec Dice (« The Open Source Jobs Report »), 51% des spécialistes de recrutement IT, pensent qu’une expérience sur OpenStack et une autre technologie Cloud est l’un des critères importants dans leurs recrutements.

Le développement d’OpenStack a commencé en 2010 suite à une fusion entre deux projets menés par Rackspace et la NASA. En 2011, la release OpenStack Bexar a été introduite dans Ubuntu, un an après Debian a introduit la release OpenStack Cactus et en 2012, Red Hat à son tour a introduit une distribution OpenStack, on trouve ensuite Oracle, HP et VMware qui ont suivi.

L’architecture OpenStack

OpenStack compte principalement 9 services distincts:

  • Nova Compute
  • Neutron Networking
  • Swift Object Storage
  • Cinder Block Storage
  • Keystone Identity
  • Glance Image
  • Telemetry Ceilometer
  • Horizon Dashboard
  • Heat Orchestration

Les services sont pratiquement indépendants mais nécessitent de tourner ensemble pour assurer la disponibilité, la scalabilité et la sécurité d’une infrastructure OpenStack.

Ces services communiquent ensemble selon le schéma suivant qu’on va détailler dans la deuxième partie de cet article.

architecture openstack

1. Nova Compute (Service de Calcul)

Nova, le composant de calcul d’OpenStack fournit les moyens d’accéder massivement et en self-service à des ressources de calcul scalables. Il est accessible via une API qui permet de gérer des VMS, des conteneurs, des serveurs bare metal et offre aussi la possibilité de gérer d’autres types de ressources et technologies comme KVM, VMWare, Xen, Hyper-V, Docker, LXC et LXD.

Nova se base sur une architecture de messaging et tous ses composants peuvent généralement être exécutés sur plusieurs serveurs. Cette architecture permet aux composants de communiquer via une file d’attente de messages (Message Queue ou MQ).

Ces architectures « message-based » permettent en général la livraison garantie des messages, la sécurité, l’efficacité du routage et le traitement des messages selon leurs priorités.

Nova interagit avec:

  • Une base de donnée SQL pour stocker des données
  • Un dashboard web qui communique via l’API
  • Une API qui échange des messages HTTP avec autres composants de la plateforme
  • Un manager d’authentification responsable de la gestion des utilisateurs, des projets et des rôles. Ce composant est une classe Python qui communique avec une base de donnée ou un serveur LDAP.
  • Un ordonnanceur qui alloue les hôtes aux machines virtuelles appropriées
  • La composante réseau responsable de l’IP forwarding, les bridges et les vlans
  • La composante calcul qui contrôle la communication entre l’hyperviseur et les VMs.

Ces éléments, qui seront détaillés par la suite, font aussi partie de l’architecture OpenStack et il n’y a pas que Nova qui interagit avec mais les autres services aussi.

2. Neutron (Service Réseau)

Neutron est un autre projet qui forme OpenStack et a été créé pour rendre le « networking as a service » entre les interfaces de plusieurs instances plus accessible.

Le networking OpenStack est un service standalone qui déploie plusieurs processus à travers différents noeuds. Ces processus interagissent entre eux et avec d’autres services d’OpenStack.

On distingue 5 composants réseaux principaux :

  • Le serveur Neutron (neutron-server et neutron-*-plugin) : C’est le processus principal, un serveur Neutron (neutron-server) est un démon Python qui expose l’API réseau d’OpenStack. Ce service communique avec la base de donnée en utilisant AMPQ.
  • L’agent Neutron (neutron-*-agent) : Tourne sur chaque noeud de calcul pour gérer la configuration du commutateur virtuel local (vswitch).Ce service nécessite un accès à la file d’attente des messages (MQ). L’agent Neutron dépend du plugin utilisé. Certains plugins comme OpenDaylight (ODL) et Open Virtual Network (OVN) ne nécessitent aucun agent Python sur les noeuds de calcul.
  • L’agent DHCP (neutron-dhcp-agent) : Comme indique son nom, ce service fournit le DHCP. Cet agent est le même pour tous les plugins et requiert aussi un accès au MQ.
  • L’agent L3 (neutron-l3-agent) : Ce composant fournit les services du niveau 3 et le NAT forwarding pour l’accès aux réseaux externes. Ce service nécessite un accès au MQ et sa dépendance à un plugin est optionnelle.
  • Services de fournisseur de réseau (serveur SDN/services) : Ce service fournit des services réseaux additionnels et peut interagir avec neutron-server, neutron-plugin et plugin-agents grâce à l’API REST.

3. Glance (Service des Images)

Glance assure l’exécution du registre des images (Image Registry) dans lequel les images des VMS, les images des disques et les snapshots sont stockées. Il contient également des modèles VM préconstruits afin que l’utilisateur puisse les essayer à la volée.

Les instances sont amorcées à partir de ce registre d’images. L’utilisateur peut créer des images personnalisées et les télécharger sur Glance plus tard pour les réutiliser. Glance assure aussi le stockage des images à distance afin d’économiser l’espace disque local.

4. Swift (Stockage Objet)

Swift offre un service de stockage où les fichiers ne sont pas organisés de manière hiérarchique. Un objet ne peut pas être placé à l’intérieur d’un autre mais existe au même niveau que d’autres objets dans un espace d’adressage plat qui s’appelle un pool de stockage.

Le stockage objet généralement et celui d’OpenStack spécifiquement est conçu pour garantir une optimisation d’accès, une disponibilité des services et une concurrence au niveau de l’accès à l’ensemble de données.

Swift est idéal pour stocker des données non structurées qui peuvent se développer et “scaler” sans inter-liaisons.

Ce service fournit également la vérification de la somme de contrôle de redondance pour les fichiers (checkusum).

5. Cinder (Stockage en Bloc)

Cinder est un autre gestionnaire de stockage mais d’un autre type. Ce type de stockage est l’équivalent d’un disque dur externe liés à une instance. Il est évident que le stockage en bloc (Block Storage) est moins rapide en accès que le stockage objet mais il est plus optimisé pour d’autres scénarios comme les bases de données et les donnés transactionnelles.

Le volume de bloc est créé par swift puis attaché au volume en cours d’exécution sur une instance sur laquelle une partition a été créée. A la fin de vie d’une instance, le volume est récupéré et gardé par Cinder et peut être réutilisé et attaché à une autre instance. Les images Cinder sont stockées sur un environnement de stockage partagé pour un accès rapide.

Une image peut être un snapshot simple ou une image amorçable.

6. Heat (Orchestration)

C’est un service « human-friendly » et plus accessible aux administrateurs pour gérer le cycle de vie entier de l’infrastructure et des applications dans un cloud OpenStack.

L’utilisateur peut personnaliser son cloud OpenStack grâce à des templates avec des simples instructions qui sont lues et interprétées par le moteur Heat (heat-engine).

Heat fournit également un service de scalabilité automatique qui intègre Telemetry, de sorte que vous pouvez créer un groupe de scaling comme template.

7. Telemetry (Ceilomètre)

Telemetry est responsable des mesures: Il peut être utilisé pour générer des factures basées sur les statistiques d’utilisation.

Son API peut être utilisée avec des systèmes de facturation externes. Telemetry permet aux administrateurs de créer des alarmes déclenchées en fonction de métriques qu’il configure.

8. Horizon (Tableau de Bord)

Horizon est le tableau de bord web d’Openstack. Il fournit une interface utilisateur aux services OpenStack, y compris Nova, Swift, Keystone etc.

9. Keystone (Service d’Identité)

C’est le principal service d’authentification et d’autorisation qui gère les utilisateurs, les services et les points de terminaison (endpoints). Keystone utilise des jetons d’authentification (tokens) pour autoriser l’accès aux ressources et maintient l’état des sessions.

Conclusion

Après 17 releases, OpenStack est de plus en mature et gagne une place importante dans l’industrie du Cloud et le marché d’infrastructures.

L’interopérabilité est l’une des forces d’OpenStack. Ceci permet une transparence dans la création des clouds publics et privés ainsi qu’une connectivité plus facile entre vendors.

Des entreprises comme Cisco et HP se sont rapidement rendu compte des forces d’OpenStack et le rôle qu’il est en train de jouer dans la création du futur du cloud : d’autres générations de Cloud plus neutres, plus portables et plus ouvert.

Cette ouverture, comme dans les logiciels Open Source, réduit le nombre de vulnérabilités et élimine les dangers du cloud-lock. Ce dernier est devenu l’une des critères les plus importants pour les entreprises dans leur choix de cloud.

OpenStack est composé de plusieurs projets de nature différentes et sa maîtrise nécessite plusieurs compétences et un peu plus de temps que d’autres technologies, ceci vaut la peine: Selon une étude, les ingénieurs OpenStack gagnent 36% mieux leurs vies en tant qu’ingénieur Infrastructure que des ingénieur non OpenStack.