Glance - Service d'Images¶
Introduction¶
Glance gère le catalogue et le stockage des images de machines virtuelles. Il permet de télécharger, stocker et distribuer les images vers les nœuds compute lors de la création d'instances.
Prérequis¶
Points à apprendre¶
Architecture Glance¶
graph TB
subgraph Glance["GLANCE"]
subgraph API["Glance API (Port 9292)"]
upload["Upload/Download images"]
metadata["Metadata management"]
discovery["Image discovery"]
end
subgraph Backend["Storage Backend"]
filesystem["📁 File System"]
swift["📦 Swift Object"]
ceph["💿 Ceph RBD"]
s3["☁️ S3"]
end
end
API --> Backend
Formats d'images supportés¶
| Format | Extension | Description |
|---|---|---|
| qcow2 | .qcow2 | QEMU Copy-On-Write, snapshots, compression |
| raw | .raw, .img | Image brute, performance max |
| vmdk | .vmdk | VMware |
| vhd/vhdx | .vhd | Hyper-V |
| iso | .iso | CD/DVD (pour boot) |
| ami/aki/ari | - | Format Amazon EC2 legacy |
Container formats¶
| Format | Description |
|---|---|
| bare | Pas de conteneur, image brute |
| ovf | Open Virtualization Format |
| ami | Amazon Machine Image |
| docker | Image Docker |
Gestion des images¶
Télécharger des images cloud¶
# Ubuntu Cloud Image
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
# Debian Cloud
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
# Rocky Linux
wget https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2
# CirrOS (image de test légère)
wget http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
Créer une image¶
# Image basique
openstack image create "Ubuntu 24.04" \
--file noble-server-cloudimg-amd64.img \
--disk-format qcow2 \
--container-format bare \
--public
# Avec métadonnées
openstack image create "Ubuntu 24.04 LTS" \
--file noble-server-cloudimg-amd64.img \
--disk-format qcow2 \
--container-format bare \
--public \
--property os_distro=ubuntu \
--property os_version=24.04 \
--property hw_disk_bus=scsi \
--property hw_scsi_model=virtio-scsi \
--property hw_qemu_guest_agent=yes \
--min-disk 10 \
--min-ram 512
Lister et gérer¶
# Lister images
openstack image list
# Détails
openstack image show "Ubuntu 24.04"
# Télécharger une image
openstack image save --file ubuntu.qcow2 "Ubuntu 24.04"
# Modifier métadonnées
openstack image set --property os_type=linux "Ubuntu 24.04"
# Supprimer
openstack image delete "Ubuntu 24.04"
Propriétés d'image importantes¶
# Propriétés hardware
--property hw_disk_bus=scsi # Bus disque (scsi/virtio/ide)
--property hw_scsi_model=virtio-scsi # Modèle SCSI
--property hw_vif_model=virtio # Modèle réseau
--property hw_qemu_guest_agent=yes # QEMU guest agent
# Propriétés OS
--property os_distro=ubuntu # Distribution
--property os_version=24.04 # Version
--property os_type=linux # Type (linux/windows)
--property os_admin_user=ubuntu # User par défaut
# Contraintes
--min-disk 10 # Espace disque minimum (GB)
--min-ram 512 # RAM minimum (MB)
# Propriétés Ceph (si backend RBD)
--property hw_rng_model=virtio # Random number generator
Visibilité des images¶
| Visibilité | Description |
|---|---|
| public | Visible par tous les projets |
| private | Visible uniquement par le propriétaire |
| shared | Partagée avec des projets spécifiques |
| community | Visible par tous, mais non listée par défaut |
# Partager une image avec un projet
openstack image add project "Ubuntu 24.04" project-id
# Accepter le partage (côté destinataire)
openstack image set --accept "Ubuntu 24.04"
# Lister les membres
openstack image member list "Ubuntu 24.04"
Backends de stockage¶
Filesystem (défaut)¶
# /etc/glance/glance-api.conf
[glance_store]
stores = file
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
Ceph RBD¶
[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
Swift¶
[glance_store]
stores = swift
default_store = swift
swift_store_auth_address = http://controller:5000/v3
swift_store_user = service:glance
swift_store_key = GLANCE_PASS
swift_store_container = glance
swift_store_create_container_on_put = True
Image Caching¶
Le cache réduit les téléchargements répétés depuis le backend.
# /etc/glance/glance-api.conf
[paste_deploy]
flavor = keystone+caching
[glance_store]
filesystem_store_datadir = /var/lib/glance/images/
# Cache
image_cache_dir = /var/lib/glance/image-cache
image_cache_stall_time = 86400
image_cache_max_size = 10737418240 # 10GB
# Pré-cacher une image
glance-cache-manage --host=controller queue-image IMAGE_ID
glance-cache-manage --host=controller cache-image IMAGE_ID
# Voir le cache
glance-cache-manage --host=controller list-cached
Import d'images (Glance v2)¶
Méthode moderne pour l'import d'images volumineuses.
# Créer l'image (metadata only)
openstack image create "Large Image" \
--container-format bare \
--disk-format qcow2
# Import via web-download
openstack image import "Large Image" \
--method web-download \
--uri http://example.com/large-image.qcow2
# Import via glance-direct (upload staging)
openstack image create-via-import "Large Image" \
--container-format bare \
--disk-format qcow2 \
--file large-image.qcow2
Interoperability (Image Signature)¶
Vérification de l'intégrité des images.
# Signer une image
openstack image create "Signed Ubuntu" \
--file ubuntu.qcow2 \
--disk-format qcow2 \
--container-format bare \
--property img_signature=SIGNATURE \
--property img_signature_certificate_uuid=CERT_UUID \
--property img_signature_hash_method=SHA-256 \
--property img_signature_key_type=RSA-PSS
Conversion d'images¶
# Conversion avec qemu-img
qemu-img convert -f vmdk -O qcow2 image.vmdk image.qcow2
qemu-img convert -f raw -O qcow2 image.raw image.qcow2
# Compression qcow2
qemu-img convert -f qcow2 -O qcow2 -c source.qcow2 compressed.qcow2
# Vérifier format
qemu-img info image.qcow2
# Redimensionner
qemu-img resize image.qcow2 +10G
Exemples pratiques¶
Création d'image custom¶
#!/bin/bash
# Script création image Ubuntu customisée
# Variables
BASE_IMAGE="noble-server-cloudimg-amd64.img"
CUSTOM_IMAGE="ubuntu-24.04-custom.qcow2"
# Copier image base
cp $BASE_IMAGE $CUSTOM_IMAGE
# Personnaliser avec virt-customize
virt-customize -a $CUSTOM_IMAGE \
--install qemu-guest-agent,cloud-init,vim \
--run-command 'systemctl enable qemu-guest-agent' \
--run-command 'apt-get clean' \
--selinux-relabel
# Réduire taille
virt-sparsify --in-place $CUSTOM_IMAGE
# Upload vers Glance
openstack image create "Ubuntu 24.04 Custom" \
--file $CUSTOM_IMAGE \
--disk-format qcow2 \
--container-format bare \
--property hw_qemu_guest_agent=yes \
--property os_distro=ubuntu \
--property os_version=24.04 \
--public
Pipeline d'images automatisé¶
#!/bin/bash
# Mise à jour automatique des images
IMAGES=(
"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img|Ubuntu 24.04"
"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2|Debian 12"
)
for entry in "${IMAGES[@]}"; do
URL="${entry%%|*}"
NAME="${entry##*|}"
FILENAME=$(basename "$URL")
echo "Processing $NAME..."
# Télécharger
wget -q -N "$URL" -O "/tmp/$FILENAME"
# Supprimer ancienne image
openstack image delete "$NAME" 2>/dev/null || true
# Créer nouvelle
openstack image create "$NAME" \
--file "/tmp/$FILENAME" \
--disk-format qcow2 \
--container-format bare \
--public
rm "/tmp/$FILENAME"
done
Ressources¶
Checkpoint¶
- Je comprends les formats d'images supportés
- Je peux créer et gérer des images dans Glance
- Je sais configurer les propriétés d'image importantes
- Je comprends les différents backends de stockage
- Je peux convertir des images entre formats
- Je sais partager des images entre projets