Nova - Service Compute¶
Introduction¶
Nova est le cœur d'OpenStack, responsable de la gestion des instances (machines virtuelles). Il orchestre la création, le scheduling et la gestion du cycle de vie des VMs à travers les nœuds compute.
Prérequis¶
Points à apprendre¶
Architecture Nova¶
graph TB
subgraph Controller["CONTROLLER NODE"]
api["Nova API<br/>(8774)"]
conductor["Conductor"]
scheduler["Scheduler"]
rabbitmq["🐰 RabbitMQ"]
api --> rabbitmq
conductor --> rabbitmq
scheduler --> rabbitmq
end
subgraph Compute["COMPUTE NODE"]
nova_compute["Nova Compute"]
libvirt["libvirt"]
subgraph VMs["Virtual Machines"]
vm1["VM1"]
vm2["VM2"]
vm3["VM3"]
end
nova_compute --> libvirt
libvirt --> vm1
libvirt --> vm2
libvirt --> vm3
end
rabbitmq --> nova_compute
Composants Nova¶
| Composant | Rôle |
|---|---|
| nova-api | Point d'entrée REST API |
| nova-scheduler | Sélection du compute host |
| nova-conductor | Médiation DB, coordination |
| nova-compute | Agent sur chaque hyperviseur |
| nova-novncproxy | Proxy console VNC |
| nova-metadata-api | Metadata service (169.254.169.254) |
Placement Service¶
Depuis Stein, Placement est un service séparé qui gère l'inventaire des ressources.
# Voir les resource providers (compute nodes)
openstack resource provider list
# Inventaire d'un provider
openstack resource provider inventory list PROVIDER_UUID
# Traits (caractéristiques)
openstack resource provider trait list PROVIDER_UUID
Flavors (Types d'instances)¶
Les flavors définissent les ressources allouées aux instances.
# Lister les flavors
openstack flavor list
# Créer un flavor
openstack flavor create m1.small \
--vcpus 1 \
--ram 2048 \
--disk 20 \
--ephemeral 0 \
--swap 0
# Flavor avec propriétés avancées
openstack flavor create m1.gpu \
--vcpus 4 \
--ram 8192 \
--disk 40 \
--property hw:cpu_policy=dedicated \
--property hw:mem_page_size=large \
--property pci_passthrough:alias=gpu:1
Propriétés de flavor importantes¶
# CPU
--property hw:cpu_policy=dedicated # CPU pinning
--property hw:cpu_thread_policy=prefer # Hyperthreading
--property hw:numa_nodes=2 # NUMA topology
# Mémoire
--property hw:mem_page_size=large # Huge pages (2MB)
--property hw:mem_page_size=1GB # 1GB pages
# Disque
--property hw:disk_bus=scsi
--property hw:scsi_model=virtio-scsi
# Réseau
--property hw:vif_multiqueue_enabled=true
# GPU/PCI
--property pci_passthrough:alias=gpu:1
Gestion des instances¶
Création d'instance¶
# Instance basique
openstack server create myvm \
--flavor m1.small \
--image "Ubuntu 24.04" \
--network private \
--key-name mykey
# Instance complète
openstack server create webserver \
--flavor m1.medium \
--image "Ubuntu 24.04" \
--network private \
--network management \
--security-group web-sg \
--security-group ssh-sg \
--key-name mykey \
--availability-zone nova:compute-01 \
--user-data cloud-init.yaml \
--property env=production \
--boot-from-volume 50 \
--wait
Cycle de vie¶
# États de l'instance
openstack server list
# Arrêter / Démarrer
openstack server stop myvm
openstack server start myvm
# Redémarrer
openstack server reboot myvm # Soft reboot
openstack server reboot --hard myvm # Hard reboot
# Pause / Unpause (RAM préservée)
openstack server pause myvm
openstack server unpause myvm
# Suspend / Resume (état sauvegardé)
openstack server suspend myvm
openstack server resume myvm
# Shelve (libère ressources compute)
openstack server shelve myvm
openstack server unshelve myvm
# Supprimer
openstack server delete myvm
openstack server delete --force myvm # Force
Console et accès¶
# URL console VNC
openstack console url show myvm
# Console log
openstack console log show myvm
openstack console log show myvm --lines 50
# Accès SSH (si floating IP)
ssh -i ~/.ssh/mykey.pem ubuntu@FLOATING_IP
Scheduler Nova¶
Le scheduler sélectionne le meilleur host pour une instance.
Filtres¶
| Filtre | Description |
|---|---|
| AvailabilityZoneFilter | Respecte la zone demandée |
| ComputeFilter | Host compute actif |
| RamFilter | RAM suffisante |
| DiskFilter | Espace disque suffisant |
| ComputeCapabilitiesFilter | Capabilities du host |
| ImagePropertiesFilter | Compatibilité image |
| ServerGroupAntiAffinityFilter | Anti-affinité |
| ServerGroupAffinityFilter | Affinité |
| AggregateInstanceExtraSpecsFilter | Host aggregates |
# /etc/nova/nova.conf
[filter_scheduler]
enabled_filters = AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter,NUMATopologyFilter
Weights¶
[filter_scheduler]
weight_classes = nova.scheduler.weights.all_weighers
ram_weight_multiplier = 1.0
disk_weight_multiplier = 1.0
io_ops_weight_multiplier = -1.0 # Préférer hosts moins chargés
Host Aggregates et Availability Zones¶
# Créer un aggregate
openstack aggregate create fast-storage \
--zone nova
# Ajouter des propriétés
openstack aggregate set --property ssd=true fast-storage
# Ajouter un host
openstack aggregate add host fast-storage compute-01
# Créer une availability zone
openstack aggregate create az-1 --zone az-1
openstack aggregate add host az-1 compute-01
# Lister
openstack aggregate list
openstack availability zone list
Server Groups (Anti-Affinité)¶
# Créer un group anti-affinity
openstack server group create --policy anti-affinity web-servers
# Créer instances dans le groupe
openstack server create web-1 \
--flavor m1.small \
--image "Ubuntu 24.04" \
--hint group=GROUP_UUID
openstack server create web-2 \
--flavor m1.small \
--image "Ubuntu 24.04" \
--hint group=GROUP_UUID
# -> sera placé sur un host différent
Migration d'instances¶
# Live migration (pas d'interruption)
openstack server migrate --live compute-02 myvm
# Cold migration (instance arrêtée)
openstack server migrate myvm
# Confirmer/Annuler migration
openstack server resize confirm myvm
openstack server resize revert myvm
# Evacuer (host en panne)
openstack server evacuate myvm --host compute-02
Resize d'instance¶
# Changer de flavor
openstack server resize myvm --flavor m1.large
# Confirmer
openstack server resize confirm myvm
# Annuler
openstack server resize revert myvm
Quotas¶
# Voir les quotas d'un projet
openstack quota show PROJECT_ID
# Modifier quotas
openstack quota set --instances 100 \
--cores 200 \
--ram 512000 \
--floating-ips 50 \
PROJECT_ID
# Voir l'utilisation
openstack limits show --absolute
Cells v2¶
Architecture de scaling pour très grands déploiements.
graph TB
subgraph API["API LAYER"]
nova_api["nova-api"]
nova_scheduler["nova-scheduler"]
placement["placement"]
nova_api <--> nova_scheduler
nova_scheduler <--> placement
end
subgraph Cell1["Cell 1"]
c1_conductor["conductor"]
c1_compute["compute 1-N"]
c1_db[(database)]
c1_mq["rabbitmq"]
end
subgraph Cell2["Cell 2"]
c2_conductor["conductor"]
c2_compute["compute 1-N"]
c2_db[(database)]
c2_mq["rabbitmq"]
end
subgraph Cell3["Cell 3"]
c3_conductor["conductor"]
c3_compute["compute 1-N"]
c3_db[(database)]
c3_mq["rabbitmq"]
end
API --> Cell1
API --> Cell2
API --> Cell3
Exemples pratiques¶
Script création d'infrastructure¶
#!/bin/bash
# Création d'une stack web haute disponibilité
# Variables
PREFIX="webapp"
FLAVOR="m1.small"
IMAGE="Ubuntu 24.04"
NETWORK="private"
KEY="mykey"
# Créer security group
openstack security group create ${PREFIX}-sg
openstack security group rule create --protocol tcp --dst-port 22 ${PREFIX}-sg
openstack security group rule create --protocol tcp --dst-port 80 ${PREFIX}-sg
openstack security group rule create --protocol tcp --dst-port 443 ${PREFIX}-sg
# Créer server group anti-affinity
SG_ID=$(openstack server group create --policy anti-affinity ${PREFIX}-group -f value -c id)
# Créer les instances
for i in 1 2 3; do
openstack server create ${PREFIX}-web-${i} \
--flavor $FLAVOR \
--image "$IMAGE" \
--network $NETWORK \
--security-group ${PREFIX}-sg \
--key-name $KEY \
--hint group=$SG_ID \
--wait &
done
wait
# Assigner floating IPs
for i in 1 2 3; do
FIP=$(openstack floating ip create external -f value -c floating_ip_address)
openstack server add floating ip ${PREFIX}-web-${i} $FIP
echo "${PREFIX}-web-${i}: $FIP"
done
Monitoring des hyperviseurs¶
# Liste des hyperviseurs
openstack hypervisor list
# Stats détaillées
openstack hypervisor show compute-01
# Stats globales
openstack hypervisor stats show
# Serveurs par hypervisor
openstack server list --host compute-01 --all-projects
Ressources¶
Checkpoint¶
- Je comprends l'architecture Nova et ses composants
- Je peux créer et gérer des flavors
- Je sais créer des instances avec différentes options
- Je comprends le fonctionnement du scheduler
- Je peux configurer des server groups (anti-affinité)
- Je sais effectuer des migrations d'instances
- Je comprends les quotas et leur gestion