OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Stockage

Glance

Images stockées dans des PVC bloc via des DataVolumes CDI ; les quatre méthodes d'import interopérables.

Go CDI et CSIopenkeel-glance

Le module

OpenKeel implementation in Go of OpenStack Glance, the image service, generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing (Nova, Cinder, glanceclient/OpenStackClient, Skyline): same routes, status codes, webob error pages, policies, image state machine, data path (md5 + multihash, format inspection) and the four interoperable import methods. Image data lives in PVCs of a block StorageClass (Longhorn by default) through CDI DataVolumes. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

  • Go module: github.com/openkeel/openkeel-glance
  • Binaries: glance-api (API on port 9292, health and metrics on 9090, import tasks in its task pool), glance-scrubber (delayed delete), glance-manage (db sync, db load_metadefs)
  • Stores: csi (CDI DataVolume img-<image id> in namespace openkeel-images, shared with openkeel-cinder and openkeel-nova; the uploaded bytes are also kept as sent on a ReadWriteMany volume, so downloads match the checksums of qcow2/vmdk images that CDI converts to raw), file (development, tests, staging), http (read-only locations)
  • Conformance: 1988 of 2442 recorded exchanges replayed identically (go-mysql-server and MariaDB 11.4), Galera concurrency test 4/4
  • Configuration: YAML, see config/config.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md

Extrait de openkeel-glance/README.md (en anglais).

API REST

83 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.

  • 76Implémenté
  • 7Partiel

Comment la compatibilité est testée

Les tests fonctionnels de Glance Python ont été réenregistrés avec leur configuration par requête et rejoués contre le service Go ; les attentes des clients et la concurrence sur Galera sont également vérifiées.

Rejeu des échanges enregistrés

Rejeu E2E des tests fonctionnels réenregistrés

Les échanges de 239 tests fonctionnels Python, avec leurs surcharges de configuration et leurs règles de politique, donnent les mêmes réponses.

Exécution

make e2e sur go-mysql-server et MariaDB 11.4 ; make e2e-strict réussit avec test/e2e/known-differences.txt (116 fichiers, chacun avec sa raison).

Dernier résultat 1988 / 2442 identiques (81.4 %) sur les deux moteurs ; le principal écart est le cache d'images, hors périmètre.

Source : openkeel-glance/docs/CONFORMANCE.md

Contrat client

Attentes des clients

La liste des versions, l'API locations pour Nova et Cinder, les téléchargements 204, les empreintes, les pages d'erreur, les types JSON-patch, copy-image et le schéma d'image correspondent aux attentes des clients.

Exécution

Vérifié par rapport aux attentes de la reverse-spec 07 § 4, via le rejeu et les handlers.

Dernier résultat Toutes satisfaites ; v2.14 (cache) n'est jamais listée.

Source : openkeel-glance/docs/CONFORMANCE.md

Concurrence sur Galera

Concurrence sur MariaDB Galera

Le verrou d'import, le statut d'upload, les créations d'image de même id et de namespace de même nom n'ont qu'un gagnant sur trois nœuds.

Exécution

make galera-test sur un cluster à 3 nœuds.

Dernier résultat 4 / 4 : exactement un gagnant, aucune erreur n'échappe aux nouvelles tentatives, chaque nœud lit le même état.

Source : openkeel-glance/docs/CONFORMANCE.md

Tests unitaires et golden tests

Build et tests unitaires

Le service se compile, passe les vérifications statiques et ses tests unitaires.

Exécution

go build ./..., go vet ./..., go test ./....

Dernier résultat Réussi.

Source : openkeel-glance/docs/CONFORMANCE.md

Écarté de la réécriture

Glance conserve l'API d'images et les quatre méthodes d'import mais stocke les images via CDI sur CSI, ce qui supprime le cache d'images, les autres drivers de store et la conversion qemu-img.

Assuré par la plateforme Cloud Native

Cache d'images et outils glance-cache

Repris par CDI

Pourquoi c'est écarté

Les données d'image sont clonées par CDI dans des volumes ; un cache de fichiers par nœud n'a aucune utilité.

Pourquoi la solution n'est pas affectée

/v2/cache répond 404 comme un Glance sans cache, et glanceclient signale les commandes de cache comme non prises en charge. Le démarrage depuis une image est assuré par des clones CDI.

Source : openkeel-glance/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Stores rbd, swift, s3, cinder et vmware

Repris par CDI, CSI (Longhorn)

Pourquoi c'est écarté

Le store csi conserve les images sous forme de DataVolumes CDI sur une StorageClass configurable, derrière le même contrat de store ; file et http restent pour les tests et les emplacements en lecture seule.

Pourquoi la solution n'est pas affectée

Nova, Cinder, OpenStackClient et Skyline voient la même API ; le choix du stockage passe à la StorageClass.

Source : openkeel-glance/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Plugin image_conversion (qemu-img)

Repris par CDI

Pourquoi c'est écarté

L'image est distroless et CDI convertit déjà qcow2 et vmdk en raw sur le store csi.

Pourquoi la solution n'est pas affectée

Le plugin n'est pas configurable, mais les images sont toujours converties pour les VM ; l'original téléversé est conservé et servi par défaut au téléchargement.

Source : openkeel-glance/docs/CONFORMANCE.md

Mécanique interne simplifiée

Exécuteur taskflow

Pourquoi c'est écarté

Les tâches d'import s'exécutent dans un pool de goroutines de la réplique au lieu de threads taskflow.

Pourquoi la solution n'est pas affectée

Même sémantique des tâches, même verrou d'import et même expiration ; le rejeu ne montre que des écarts de durée.

Source : openkeel-glance/config/dropped-options.md

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de Glance

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-glance.svg Plein écran
Les 9 interactions du modèle
DeVersProtocoleQuoi
SkylineGlanceAPI RESTimages
Nova APIGlanceAPI RESTimage metadata
Cinder APIGlanceAPI RESTvolume from image
GlanceBarbicanAPI RESTimage signatures
GlanceGlance store driverAPI RESTin-process driver
Glance store driverCDIAPI KubernetesDataVolume upload (upload proxy), import, clone
Ironic conductorGlanceAPI RESTimage download (cache)
EC2 APIGlanceAPI RESTAMIs
Glance store driverKubeVirtAPI KubernetesVirtualMachineExport (download without keep_original)

Spécifications