OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken

Komponenten · Speicher

Glance

Images, über CDI-DataVolumes in Block-PVCs gespeichert; die vier interoperablen Importmethoden.

Go CDI und CSIopenkeel-glance

Das Modul

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

Auszug aus openkeel-glance/README.md (auf Englisch).

REST-API

83 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.

  • 76Implementiert
  • 7Teilweise

Wie die Kompatibilität getestet wird

Die Funktionstests von Python-Glance wurden mit ihrer Konfiguration pro Anfrage neu aufgezeichnet und gegen den Go-Dienst wiedergegeben; Client-Erwartungen und Nebenläufigkeit auf Galera werden ebenfalls geprüft.

Replay aufgezeichneter Austausche

E2E-Replay der neu aufgezeichneten Funktionstests

Die Austausche aus 239 funktionalen Python-Tests liefern mit ihren Konfigurationsüberschreibungen und Policy-Regeln dieselben Antworten.

Ausführung

make e2e auf go-mysql-server und MariaDB 11.4; make e2e-strict besteht mit test/e2e/known-differences.txt (116 Dateien, jeweils mit Begründung).

Letztes Ergebnis 1988 / 2442 identisch (81.4 %) auf beiden Engines; die größte Lücke ist der Image-Cache, außerhalb des Umfangs.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Client-Vertrag

Client-Erwartungen

Versionsliste, Locations-API für Nova und Cinder, 204-Downloads, Hashes, Fehlerseiten, JSON-Patch-Typen, copy-image und Image-Schema entsprechen den Erwartungen der Clients.

Ausführung

Geprüft gegen die Erwartungen der reverse-spec 07 § 4, über das Replay und die Handler.

Letztes Ergebnis Alle erfüllt; v2.14 (Cache) wird nie aufgeführt.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Nebenläufigkeit auf Galera

Nebenläufigkeit auf MariaDB Galera

Import-Lock, Upload-Status sowie Erstellungen von Images mit gleicher ID und Namespaces mit gleichem Namen haben über drei Knoten genau einen Gewinner.

Ausführung

make galera-test auf einem Cluster mit 3 Knoten.

Letztes Ergebnis 4 / 4: genau ein Gewinner, kein Fehler entgeht den Wiederholungen, jeder Knoten liest denselben Zustand.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Unit- und Golden Tests

Build und Unit-Tests

Der Dienst wird gebaut und besteht die statischen Prüfungen und seine Unit-Tests.

Ausführung

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

Letztes Ergebnis Bestanden.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Glance behält die Image-API und die vier Importmethoden, speichert Images aber über CDI auf CSI; damit entfallen der Image-Cache, die übrigen Store-Treiber und die Konvertierung mit qemu-img.

Von der Cloud-Native-Plattform übernommen

Image-Cache und glance-cache-Werkzeuge

Übernommen von CDI

Warum es ausgelassen wurde

Image-Daten werden von CDI in Volumes geklont; ein Dateicache pro Knoten hat keinen Nutzen.

Warum die Lösung nicht beeinträchtigt ist

/v2/cache antwortet 404 wie ein Glance ohne Cache, und glanceclient meldet Cache-Befehle als nicht unterstützt. Der Start aus einem Image erfolgt über CDI-Klone.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Stores rbd, swift, s3, cinder und vmware

Übernommen von CDI, CSI (Longhorn)

Warum es ausgelassen wurde

Der csi-Store hält Images als CDI-DataVolumes auf einer konfigurierbaren StorageClass, hinter demselben Store-Vertrag; file und http bleiben für Tests und schreibgeschützte Speicherorte.

Warum die Lösung nicht beeinträchtigt ist

Nova, Cinder, OpenStackClient und Skyline sehen dieselbe API; die Wahl des Speichers wandert in die StorageClass.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Plugin image_conversion (qemu-img)

Übernommen von CDI

Warum es ausgelassen wurde

Das Image ist distroless, und CDI konvertiert qcow2 und vmdk auf dem csi-Store bereits nach raw.

Warum die Lösung nicht beeinträchtigt ist

Das Plugin ist nicht konfigurierbar, aber Images werden für VMs weiterhin konvertiert; das hochgeladene Original wird aufbewahrt und standardmäßig beim Download ausgeliefert.

Quelle: openkeel-glance/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

Taskflow-Executor

Warum es ausgelassen wurde

Import-Tasks laufen in einem Goroutine-Pool der Replik statt in taskflow-Threads.

Warum die Lösung nicht beeinträchtigt ist

Gleiche Task-Semantik, Importsperre und Ablaufzeit; der Replay zeigt nur Unterschiede im Timing.

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

Hier ist nur aufgeführt, was bewusst ausgelassen wurde; noch nicht erledigte Arbeit steht in den Known gaps der docs/CONFORMANCE.md des Moduls. Alle Module

Glance-Interaktionen

Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.

Diagramm openkeel-glance.svg Vollbild
Die 9 Interaktionen des Modells
VonNachProtokollWas
SkylineGlanceREST-APIimages
Nova APIGlanceREST-APIimage metadata
Cinder APIGlanceREST-APIvolume from image
GlanceBarbicanREST-APIimage signatures
GlanceGlance store driverREST-APIin-process driver
Glance store driverCDIKubernetes-APIDataVolume upload (upload proxy), import, clone
Ironic conductorGlanceREST-APIimage download (cache)
EC2 APIGlanceREST-APIAMIs
Glance store driverKubeVirtKubernetes-APIVirtualMachineExport (download without keep_original)

Spezifikationen