Openstack

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Plateforme cloud IaaS open source
Licence Apache 2.0
Composants clés Nova, Neutron, Cinder, Swift, Keystone, Glance, Horizon
Interface Dashboard web Horizon, API REST, CLI (openstack)
Environnement de dev Devstack
Voir aussi Devstack · Proxmox

OpenStack est une plateforme cloud IaaS (Infrastructure as a Service) open source qui permet de gérer des pools de ressources de calcul, stockage et réseau à travers un ensemble d'API et un tableau de bord web, à la manière d'un AWS/Azure privé.

Composants principaux

OpenStack est bâti sur une architecture modulaire, chaque brique gérant un aspect de l'infrastructure :

  • Nova — orchestration du calcul (cycle de vie des instances/VM)
  • Neutron — virtualisation réseau (renommé depuis Quantum, nom d'origine du projet
 jusqu'en 2014, à ne pas confondre avec l'outil de calcul quantique)
  • Cinder — stockage bloc persistant (volumes attachables aux instances)
  • Swift — stockage objet (façon S3)
  • Keystone — service d'authentification et d'annuaire des services
  • Glance — catalogue et registre des images disque
  • Horizon — tableau de bord web (dashboard) pour piloter l'ensemble

Installation

En production, une installation OpenStack se fait généralement via un outil de déploiement dédié (Kolla-Ansible, TripleO, OpenStack-Ansible, ou une distribution packagée comme Charmed OpenStack). Pour découvrir la plateforme ou développer dessus, on utilise plutôt Devstack, qui installe un environnement complet en une seule commande à partir des sources (voir Devstack pour le détail).

La documentation officielle à jour reste la meilleure référence pour une installation de production : https://docs.openstack.org/

Utilisation via le dashboard Horizon

Une fois la plateforme démarrée, l'essentiel de l'administration courante peut se faire depuis le dashboard web (adresse de l'exemple ci-dessous à adapter à l'environnement réel) :

http://<ip-controleur>/

Workflow type de mise en place d'une petite infra applicative :

  • Créer une paire de clés SSH pour l'accès aux instances :
Projet > Compute > Access & Security > Key Pairs > Create Key Pair
  • Lancer une instance à partir d'une image du catalogue Glance :
Projet > Compute > Images > <image> > Launch
  • Créer et attacher un volume de stockage bloc (Cinder) à une instance :
Projet > Compute > Volumes > Create Volume
  • Ouvrir l'accès réseau à une instance (IP flottante + règles de pare-feu) :
Projet > Compute > Access & Security > Floating IPs > Allocate IP to Project
Projet > Compute > Access & Security > Security Groups > default > Manage Rules > Add Rule

Un scénario classique de TP consiste à monter ainsi une petite architecture à trois niveaux (base de données, applicatif, répartiteur de charge HAProxy en frontal), chaque brique étant une instance distincte avec son propre snapshot Glance, le frontal HAProxy recevant l'IP flottante publique du projet.

Automatisation / scaling

Exemple de script (à titre pédagogique) de scaling horizontal naïf, ajustant le nombre d'instances applicatives en fonction du nombre de requêtes en cours sur un frontal HAProxy, via la CLI Nova :

while : ; do
  requests=$(curl --silent http://<frontal>/server-status | perl -ne 'print $1 if(m:(\d+)\s+requests currently:)')
  servers=$(nova list --name php_server | grep php_server | wc -l)
  desired_servers=$((requests / 10 + 1))

  echo "$requests requêtes, $servers instances actives, $desired_servers désirées"

  if (( desired_servers > servers )); then
    nova boot --poll --flavor 6 --image <image-id> --key-name <ma-cle-ssh> php_server
  elif (( desired_servers < servers )); then
    nova delete php_server
  fi
  sleep 5
done

Ce script se lance depuis un shell ayant les credentials OpenStack chargés (fichier téléchargeable depuis Horizon : Admin > Settings > Télécharger le fichier RC). Pour générer de la charge de test :

ab -c 10 -n 200000 http://<ip-instance>/

(cette approche de scaling par script shell est purement pédagogique — en production, on utilisera plutôt Heat (orchestration) et/ou un module d'auto-scaling natif.)

Voir aussi

  • Devstack — environnement OpenStack tout-en-un pour le développement/les tests
  • Proxmox — alternative plus légère pour de la virtualisation sans les briques cloud IaaS