OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent

Componenti · Storage

Glance

Immagini archiviate in PVC a blocchi tramite i DataVolume di CDI; i quattro metodi di importazione interoperabili.

Go CDI e CSIopenkeel-glance

Il modulo

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

Estratto da openkeel-glance/README.md (in inglese).

API REST

83 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel.

  • 76Implementato
  • 7Parziale

Come viene testata la compatibilità

I test funzionali di Glance Python sono stati riregistrati con la loro configurazione per richiesta e riprodotti sul servizio Go; vengono verificate anche le aspettative dei client e la concorrenza su Galera.

Replay degli scambi registrati

Replay E2E dei test funzionali riregistrati

Gli scambi di 239 test funzionali Python, con le loro sostituzioni di configurazione e regole di policy, restituiscono le stesse risposte.

Esecuzione

make e2e su go-mysql-server e MariaDB 11.4; make e2e-strict superato con test/e2e/known-differences.txt (116 file, ciascuno con la sua motivazione).

Ultimo risultato 1988 / 2442 identici (81.4 %) su entrambi i motori; la lacuna principale è la cache delle immagini, fuori ambito.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Contratto client

Aspettative dei client

L'elenco delle versioni, l'API locations per Nova e Cinder, i download 204, gli hash, le pagine di errore, i tipi JSON-patch, copy-image e lo schema delle immagini corrispondono a ciò che i client si aspettano.

Esecuzione

Verificato rispetto alle aspettative della reverse-spec 07 § 4, tramite il replay e gli handler.

Ultimo risultato Tutte soddisfatte; v2.14 (cache) non viene mai elencata.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Concorrenza su Galera

Concorrenza su MariaDB Galera

Il lock di importazione, lo stato di upload e le creazioni di immagini con lo stesso id e di namespace con lo stesso nome hanno un solo vincitore su tre nodi.

Esecuzione

make galera-test su un cluster a 3 nodi.

Ultimo risultato 4 / 4: esattamente un vincitore, nessun errore sfugge ai tentativi ripetuti, ogni nodo legge lo stesso stato.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Test unitari e golden test

Build e test unitari

Il servizio viene compilato e supera i controlli statici e i suoi test unitari.

Esecuzione

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

Ultimo risultato Superato.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Escluso dal rewrite

Glance mantiene l'API delle immagini e i quattro metodi di importazione ma archivia le immagini tramite CDI su CSI, eliminando la cache delle immagini, gli altri driver di store e la conversione con qemu-img.

Gestito dalla piattaforma Cloud Native

Cache delle immagini e strumenti glance-cache

Gestito da CDI

Perché è stato escluso

I dati delle immagini vengono clonati da CDI nei volumi; una cache di file per nodo non ha alcuna utilità.

Perché la soluzione non ne risente

/v2/cache risponde 404 come un Glance senza cache, e glanceclient segnala i comandi di cache come non supportati. L'avvio da immagine è gestito da cloni CDI.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Store rbd, swift, s3, cinder e vmware

Gestito da CDI, CSI (Longhorn)

Perché è stato escluso

Lo store csi conserva le immagini come DataVolume CDI su una StorageClass configurabile, dietro lo stesso contratto di store; file e http restano per i test e le posizioni in sola lettura.

Perché la soluzione non ne risente

Nova, Cinder, OpenStackClient e Skyline vedono la stessa API; la scelta dello storage passa alla StorageClass.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Plugin image_conversion (qemu-img)

Gestito da CDI

Perché è stato escluso

L'immagine è distroless e CDI converte già qcow2 e vmdk in raw sullo store csi.

Perché la soluzione non ne risente

Il plugin non è configurabile, ma le immagini vengono comunque convertite per le VM; l'originale caricato è conservato e servito per impostazione predefinita al download.

Fonte: openkeel-glance/docs/CONFORMANCE.md

Meccanismi interni semplificati

Executor taskflow

Perché è stato escluso

I task di importazione girano in un pool di goroutine della replica anziché in thread taskflow.

Perché la soluzione non ne risente

Stessa semantica dei task, stesso lock di importazione e stessa scadenza; il replay mostra solo differenze di tempistica.

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

Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli

Interazioni Glance

Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.

Diagramma openkeel-glance.svg Schermo intero
Le 9 interazioni del modello
DaAProtocolloCosa
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)

Specifiche