Ce guide documente les étapes complètes pour préparer un serveur, installer et déployer OpenStack en utilisant DevStack sur un OS DEBIAN 12.
Minimum 2 machines (1 contrôleur + 1 compute). Chaque machine doit avoir au moins 10 Go de RAM ou plus, 8 cœurs CPU ou plus, deux espace disque sur la machine contrôleur et un espace disque sur la machine compute (100 Go recommandé ou plus) et deux cartes réseaux en mode Bridged. Système d'exploitation : Debian 12.
su -
apt update -y && apt upgrade -y
apt install sudo git -y
sudo visudo
Ajouter :
alcapone ALL=(ALL:ALL) NOPASSWD:ALL
lsb_release -a
id
nproc
free -mh
sudo apt install cpu-checker -y
sudo kvm-ok
Pour processeur AMD
sudo modprobe kvm-amd
echo 'options kvm-amd nested=1' | sudo tee -a /etc/modprobe.d/kvm-amd.conf
sudo modprobe -r kvm-amd
sudo modprobe kvm-amd
Pour processeur Intel
sudo modprobe kvm-intel
echo 'options kvm-intel nested=1' | sudo tee -a /etc/modprobe.d/kvm-intel.conf
sudo modprobe -r kvm-intel
sudo modprobe kvm-intel
Vérifier :
cat /sys/module/kvm_intel/parameters/nested
ip a
Exemple de configuration :
sudo nano /etc/network/interfaces
# Interface physique pour le management (ens33)
allow-hotplug ens33
iface ens33 inet static
address 192.168.1.121/24
gateway 192.168.1.254
dns-nameservers 8.8.8.8 8.8.4.4
# Interface physique pour le bridge externe (ens34) - pas d'IP
allow-hotplug ens34
iface ens34 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
Redémarrer :
# Appliquer la nouvelle configuration
sudo systemctl restart networking
lsblk
sudo pvcreate /dev/sdb
sudo vgcreate cinder-volumes /dev/sdb
sudo vgs
ssh-keygen -t ed25519 -C "devstack" -f ~/.ssh/devstack
cat ~/.ssh/devstack.pub | ssh alcapone@192.168.1.41 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# Tester la connexion
ssh -i ~/.ssh/devstack alcapone@192.168.1.41
git clone https://opendev.org/openstack/devstack
cd devstack
Le nœud contrôleur exécute tous les services OpenStack.
nano local.conf
[[local|localrc]]
# Adresse IP du nœud contrôleur (celle de ta machine sur le LAN)
HOST_IP=192.168.1.121
# Plage réseau interne pour les instances (ne doit pas entrer en conflit avec ton LAN)
FIXED_RANGE=10.0.1.0/20
# Plage d’adresses IP flottantes (doit appartenir au même réseau que HOST_IP)
FLOATING_RANGE=192.168.1.120/25
# interface reliée au LAN externe (pas d’IP assignée directement)
PUBLIC_INTERFACE=ens34
# utilisée par Neutron pour le réseau provider
FLAT_INTERFACE=ens34
# Emplacement du fichier de logs
LOGFILE=/opt/stack/logs/stack.sh.log
LOGDAYS=2
# Configuration multi-nœud
MULTI_HOST=1
# Mot de passe admin
ADMIN_PASSWORD=adminuser
# Mot de passe DB
DATABASE_PASSWORD=labstack
# Mot de passe RabbitMQ
RABBIT_PASSWORD=labstack
# Mot de passe services
SERVICE_PASSWORD=labstack
# Activer les services Cinder
enable_service c-api c-vol c-sch c-bak
# Configurer le backend LVM pour Cinder
CINDER_ENABLED_BACKENDS=lvm:cinder-volumes
VOLUME_GROUP=cinder-volumes
VOLUME_BACKING_FILE_SIZE=0
# Désactiver les services qui ne doivent pas tourner sur le contrôleur
disable_service n-cpu q-agt tempest
# configuration du volume group pour cinder
[[post-config|$CINDER_CONF]]
[cinder-volumes]
image_volume_cache_enabled = True
volume_clear = zero
lvm_type = auto
target_prefix = iqn.2010-10.org.openstack:
target_port = 3260
target_protocol = iscsi
target_helper = lioadm
volume_group = cinder-volumes
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = cinder-volumes
[DEFAULT]
enabled_backends = cinder-volumes
default_volume_type = cinder-volumes
# Exécutez le script stack.sh
./stack.sh
# Ce script télécharge, configure et déploie les services OpenStack sur le nœud contrôleur. Cela peut prendre du temps (10-30 minutes selon la machine).
# Une fois terminé, vérifiez que les services sont en cours d’exécution
source openrc admin admin
openstack service list
openstack endpoint list
# Accédez à l’interface Horizon via un navigateur : http://<HOST_IP>/dashboard.
Les nœuds de calcul exécutent uniquement les services de travail OpenStack.
nano local.conf
[[local|localrc]]
# Adresse IP du nœud compute (celle de ta machine sur le LAN)
HOST_IP=192.168.1.42
# Plage réseau interne pour les instances (ne doit pas entrer en conflit avec ton LAN)
FIXED_RANGE=10.0.1.0/20
# Plage d’adresses IP flottantes (doit appartenir au même réseau que HOST_IP)
FLOATING_RANGE=192.168.1.120/25
# interface reliée au LAN externe (pas d’IP assignée directement)
PUBLIC_INTERFACE=ens34
# utilisée par Neutron pour le réseau provider
FLAT_INTERFACE=ens34
# Emplacement du fichier de logs
LOGFILE=/opt/stack/logs/stack.sh.log
LOGDAYS=2
# Configuration multi-nœud
MULTI_HOST=1
# Mots de passe (doivent correspondre à ceux du contrôleur)
ADMIN_PASSWORD=adminuser
DATABASE_PASSWORD=labstack
RABBIT_PASSWORD=labstack
SERVICE_PASSWORD=labstack
# Type de base de données
DATABASE_TYPE=mysql
# Adresse IP du nœud contrôleur
SERVICE_HOST=192.168.1.121
# Hôtes des services centraux (sur le contrôleur)
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
# Services activés sur le nœud compute
ENABLED_SERVICES=n-cpu,placement-client,ovn-controller,ovs-vswitchd,ovsdb-server,q-ovn-metadata-agent
# Configuration VNC pour console
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_lite.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
# Désactiver les services qui ne doivent pas tourner sur compute
disable_service tempest
disable_service n-api n-sch n-cond n-obj n-crt
disable_service c-api c-vol c-sch c-bak
disable_service g-api g-reg
disable_service horizon
disable_service mysql rabbit key
disable_service q-svc q-dhcp q-l3 q-meta
# Exécutez le script stack.sh
./stack.sh
# Ce script télécharge, configure et déploie les services OpenStack sur le nœud compute. Cela peut prendre du temps (10-30 minutes selon la machine).
Depuis le controller :
openstack service list
openstack endpoint list
openstack compute service list
openstack network agent list
Arrêter OpenStack est aussi simple il suffit d’exécuter le shscript inclus :
./unstack.sh
./clean.sh
# Il arrive que les instances en cours d'exécution ne soient pas nettoyées. DevStack tente de le faire lors de son exécution, mais il arrive que cette opération doive être effectuée manuellement :
sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
DevStack crée par défaut :
- Deux utilisateurs : admin (administrateur) et demo (utilisateur standard).
- Deux projets : admin et demo.
Chaque utilisateur est membre d’un projet :
- admin → membre du projet admin
- demo → membre du projet demo
Un projet (ou tenant) est comme un “compartiment” ou une “organisation” qui contient des ressources (VM, volumes, réseaux…). Un utilisateur appartient à un projet et a un rôle qui définit ce qu’il peut faire (admin, member…).
nano create_users.sh
#!/bin/bash
. /home/alcapone/devstack/openrc admin admin
# Créer utilisateur diegosoda
NAME=diegosoda
PASSWORD=adminuser
PROJECT=devops
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add admin --user $NAME --project $PROJECT
# Créer utilisateur tubie
NAME=tubie
PASSWORD=adminuser
PROJECT=infra
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add admin --user $NAME --project $PROJECT
# Rendre le script exécutable
chmod +x create_users.sh
# # Exécutez le script create_users.sh
./create_users.sh
- Connectez-vous à Horizon avec chaque utilisateur
- Allez dans Project → API Access
- Cliquez sur Download OpenStack RC File → OpenStack clouds.yaml File
- Le fichier sera automatiquement généré avec les bonnes informations
# Créer le répertoire de configuration
mkdir -p ~/.config/openstack
# Depuis Windows (PowerShell ou CMD)
scp "C:\Users\steph\Downloads\clouds.yaml" alcapone@192.168.1.121:~/.config/openstack/clouds.yaml
scp "C:\Users\steph\Downloads\devops-openrc.sh" alcapone@192.168.1.121:~
# Vérifier la présence du fichier
ls -la ~/.config/openstack/clouds.yaml
# Vérifier le contenu
cat ~/.config/openstack/clouds.yaml
# Vérifiez la version de Python :
# Assurez-vous d'utiliser une version de Python compatible (par exemple, Python 3.6 ou supérieur). Vérifiez avec :
python3 --version
# Installez python-openstackclient
python3 -m venv alcapone
source alcapone/bin/activate
pip install --upgrade pip
pip install python-openstackclient
# Variables d’environnement
nano ~/.bashrc
# Ajouter ceci à la fin :
export OS_CLOUD=diegosoda
source alcapone/bin/activate
# Redémarrer :
Ctrl+D
# Test maintenant
echo "Cloud actuel: $OS_CLOUD"
openstack token issue