Développement OpenStack : Guide pas à pas pour les contributeurs

Configuration initiale d'OpenStack

Pour déployer OpenStack de manière simple, l'outil Devstack est recommandé pour les développeurs. Consultez la documentation officielle pour l'installation complète :

Guide d'installation Devstack

Activation du support KVM imbriqué

Vérifiez d'abord si le noyau est configuré pour le KVM imbriqué :

sudo cat /etc/modprobe.d/qemu-system-x86.conf
# Doit contenir: options kvm_intel nested=1

Si ce n'est pas le cas, configurez-le :

echo "options kvm-intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf
sudo rmmod kvm_intel && sudo modprobe kvm_intel

Optionnel : dans Nova, ajoutez le mode host-passthrough (peut affecter la migration) :

libvirt_cpu_mode = host-passthrough

Redémarrez les services Nova après modification.

Configuration du PCI PassThrough

Deux méthodes existent : le framework UIO hérité ou VFIO (recommendé). Pour les périphériques SR-IOV, une configuration spécifique est nécessaire.

Prérequis pour PCI PassThrough

Activez les extensions Intel VT-d dans le BIOS et vérifiez :

sudo dmesg | grep -e DMAR -e IOMMU

Activez VT-d dans le noyau :

sudo echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Mettez à jour la ligne de commande GRUB :

sudo sed -i -e 's/\(^GRUB_CMDLINE_LINUX_DEFAULT.*\)"$/\1 intel_iommu=on"/' /etc/default/grub
sudo update-grub

Utilisation du framework UIO hérité

Pour les cas où VFIO pose des problèmes, configurez le paramètre KVM :

# Configuration temporaire
sudo echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts
# Configuration permanente
sudo echo "options kvm allow_unsafe_assigned_interrupts=1" >> /etc/modprobe.d/kvm_iommu.conf

Identifiez les périphériques PCI :

lspci -n
lspci

Associez le pilote pci_stub :

sudo modprobe pci_stub
echo "8086 10fb" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:01:00.0 > /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind
echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind

Attachez le périphérique à la machine virtuelle avec virsh :

echo "<hostdev managed="yes" mode="subsystem" type="pci">
  <driver name="kvm"></driver>
  <source>
    <address bus="0x01" domain="0x0000" function="0x1" slot="0x00"></address>
  </source>
</hostdev>" > nouveau-pci.xml
virsh attach-device nom-invite --config nouveau-pci.xml
virsh start nom-invite

Utilisation de VFIO

Chargez les modules au démarrage :

sudo echo "vfio
vfio_iommu_type1
vfio_pci" >> /etc/modules

Configurez les interruptions non sécurisées si nécessaire :

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio_iommu_type1.conf

Désactivez AppArmor pour libvirtd (contournement de bug Ubuntu) :

sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get --purge remove apparmor apparmor-utils libapparmor-perl libapparmor1
sudo apt-get install ubuntu-desktop

Identifiez le groupe IOMMU du périphérique et associez tous les membres :

readlink /sys/bus/pci/devices/0000\:01\:00.0/iommu_group
ls -l /sys/bus/pci/devices/0000\:01\:00.0/iommu_group/devices

Associez le pilote vfio-pci :

echo "8086 10fb" > /sys/bus/pci/drivers/vfio-pci/new_id
echo "0000:01:00.1" > /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind
echo "0000:01:00.1" > /sys/bus/pci/drivers/vfio-pci/bind

Attachez le périphérique avec le pilote vfio :

echo "<hostdev managed="yes" mode="subsystem" type="pci">
  <driver name="vfio"></driver>
  <source>
    <address bus="0x01" domain="0x0000" function="0x1" slot="0x00"></address>
  </source>
</hostdev>" > nouveau-pci.xml

Configuration du module igb pour SR-IOV

Pour une configuration persistante :

sudo echo 'options igb max_vfs=7' > /etc/modprobe.d/igb.conf
sudo echo "igb" >> /etc/modules
sudo update-initramfs -k all -t -u

Développement de compétences pour OpenStack

Consultez la documentation dans /opt/stack/nova/doc/source/devref pour comprendre l'architecture :

  • gerrit.rst : Flux de travail avec Gerrit
  • development.environment.rst : Configuration de l'environnement de développement
  • rpc.rst : Système RPC basé sur AMQP
  • threading.rst : Modèle de threading green thread

Pratiquez avec les technologies clés :

  • RabbitMQ : Tutoriels et code source disponible sur GitHub
  • SQLAlchemy : ORM pour Python
  • WSGI et eventlet : Pour les API REST

Contribution à la communauté OpenStack

Rejoigenz les canaux IRC et les listes de diffusion pour interagir avec la communauté.

Pour soumettre des patches, suivez le flux de travail Gerrit.

Utilisation pratique d'OpenStack

Accédez au tableau de bord via http://localhost/ après installation.

Utilisez CURL pour interagir avec l'API :

#!/bin/bash
reponse=$(curl -i 'http://127.0.0.1:5000/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "123"}}}')
echo $reponse
# Extrait le token ID

Avec le client OpenStack, configurez l'environnement :

cd devstack/
. openrc OS_USERNAME OS_TENANT_NAME

Pour le PCI passthrough, mettez à jour /etc/nova/nova.conf :

[DEFAULT]
pci_passthrough_whitelist={"product_id":"10fb", "vendor_id":"8086", "deviceids":"0000:01:00.0, 0000:01:00.1"}
pci_alias = {"vendor_id":"8086", "product_id":"10fb", "name":"intelnic"}
scheduler_available_filters = nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter

Lancez une instance avec périphérique PCI :

nova flavor-key m1.tiny set pci_passthrough:alias=intelnic:1
nova boot pci --flavor m1.tiny --image=cirros-0.3.2-x86_64-uec

Débogage et tests

Utilisez la commande print pour le débogage dans les terminaux screen :

cd devstack/
./rejoin-stack.sh

Opérations utiles dans screen :

  • Ctrl + A + : pour exécuter des commandes
  • Ctrl + A + ' pour changer de fenêtre

Consultez les guides de tests pour écrire des cas de test.

Étiquettes: openstack kvm PCI passthrough rabbitmq SQLAlchemy

Publié le 25 juin à 23h27