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

Komponenten · Speicher

Cinder

Block-Volumes sind PVCs einer CSI-StorageClass (Rook-Ceph, Longhorn, NetApp, Huawei Dorado, Pure Storage), mit CSI-Snapshots und cinder-backup-Sicherungen.

Go Jeder Block-CSI-Treiberopenkeel-cinder

Das Modul

OpenKeel implementation in Go of OpenStack Cinder, the Block Storage API v3, 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, Glance's cinder store, python-cinderclient, Skyline): same routes, status codes, error bodies, microversions 3.0–3.71 and policies. Volumes are Kubernetes PVCs on a block CSI StorageClass (Longhorn by default), snapshots and backups are CSI VolumeSnapshots, volumes from images are CDI clones, and attachments are KubeVirt hotplugs. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md; the build plan with the status of every operation is in docs/PLAN.md.

  • Go module: github.com/openkeel/openkeel-cinder
  • Binaries (one image): | Binary | Role | Ports | |---|---|---| | cinder-api | REST API v3; also -migrate for the database migrations | 8776, admin 9090 | | cinder-scheduler | places volumes on backends and backups on backup hosts, purges expired reservations and messages | admin 9090 | | cinder-volume | drives PVCs, VolumeSnapshots, DataVolumes and PV handovers for the volumes of its backends | admin 9090 | | cinder-backup | creates, deletes and restores backups (VolumeSnapshots of the backup class) | admin 9090 | The workers poll the database for transient statuses and elect one active replica each with a Kubernetes Lease.
  • 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-cinder/README.md (auf Englisch).

REST-API

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

  • 147Implementiert
  • 25Teilweise
  • 46Nicht implementiert

Wie die Kompatibilität getestet wird

Die Austausche der Python-Cinder-Funktionstests werden gegen den Go-Dienst wiedergegeben, Novas Attachment-Vertrag wird getestet, und die Nebenläufigkeit wird auf Galera geprüft.

Replay aufgezeichneter Austausche

E2E-Replay der Funktionstests

967 Austausche aus 196 funktionalen Python-Tests liefern denselben Status und Body, mit emulierter Fixture der Funktionstests.

Ausführung

make e2e, auf go-mysql-server und MariaDB 11.4 (E2E_MYSQL_DSN); E2E_STRICT=1 besteht mit test/e2e/known-differences.txt.

Letztes Ergebnis 832 / 967 identisch (834 auf MariaDB); nur im Umfang 832 / 854 (97.4 %), der Rest sind groups und manage (außerhalb des Umfangs).

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Client-Vertrag

Nova-Attachment-Vertrag

Attachments-API in 3.44, idempotentes Aktualisieren und Löschen, Service-Token-Regel und die von Nova ausgewerteten Fehlerstatus entsprechen seinen Erwartungen.

Ausführung

TestNovaAttachmentFlow, Router-Tests und TestQuotaExceeded.

Letztes Ergebnis Getestet; os-reimage und externe Nova-Ereignisse implementiert, aber nicht gegen Nova wiedergegeben.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Unit- und Golden Tests

Unit-, Policy- und Ablauftests

Policy-Personas für 161 der 167 Standardregeln, Kontingent- und Transfer-Vektoren, Router-Regeln und der CSI-Treiber verhalten sich wie spezifiziert.

Ausführung

go test ./... (13 Pakete), CSI-Treiber auf client-go-Fakes.

Letztes Ergebnis Alle bestanden.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Nebenläufigkeit auf Galera

Nebenläufigkeit auf MariaDB Galera

Kontingent und Reservierung halten, wenn Erstellungen gleichzeitig über drei Galera-Knoten eintreffen.

Ausführung

make galera-test auf einem Cluster mit 3 Knoten: 30 Erstellungen für ein Kontingent von 10, 9 nebenläufige os-reserve.

Letztes Ergebnis Bestanden, 3 von 3 Durchläufen: genau 10 × 202, 20 × 413, kein 5xx; ein einziger os-reserve-Gewinner.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Tempest

Tempest und Client-Replays

Tempest tempest/api/volume, cinder-tempest-plugin und Replays der Aufrufe von cinderclient, Nova und dem Glance-Store.

Ausführung

Erfordern einen kind-Cluster mit Keystone, Longhorn, CDI und KubeVirt; es gibt keine aufgezeichneten Client-Aufrufe.

Letztes Ergebnis Nicht ausgeführt.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Cinder behält die Volume-API, überlässt den Datenpfad aber CSI (standardmäßig Longhorn); damit entfallen Herstellertreiber, Migration und Replikation zwischen Backends sowie die RPC-Topologie.

Von der Cloud-Native-Plattform übernommen

Volume-Treiber der Hersteller und FC Zone Manager

Übernommen von CSI (standardmäßig Longhorn)

Warum es ausgelassen wurde

Jedes Backend ist eine CSI-StorageClass mit CSI-Snapshots und KubeVirt-Hotplug; die Verbindungsinformation ist ein kubernetes_pvc, den das Nova von OpenKeel nutzt.

Warum die Lösung nicht beeinträchtigt ist

Nova, der cinder-Store von Glance, cinderclient und Skyline nutzen dieselbe API. Jeder Speicher mit CSI-Treiber kann als Backend dienen.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Volume-Migration zwischen Backends

Übernommen von CSI

Warum es ausgelassen wurde

Das Kopieren von Daten zwischen StorageClasses erfolgt per retype mit der Migrationsrichtlinie on-demand.

Warum die Lösung nicht beeinträchtigt ist

os-migrate_volume antwortet 400 mit einer Meldung, die auf os-retype verweist, das die Daten verschiebt.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Cinder-Replikation und failover_host

Übernommen von CSI

Warum es ausgelassen wurde

CSI-Backends haben keine von Cinder verwaltete Replikation.

Warum die Lösung nicht beeinträchtigt ist

failover_host antwortet 400 'no replication target configured'. Die Redundanz ist die des Speicher-Backends selbst, konfiguriert außerhalb der Cinder-API.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Barbican-Schlüssel pro verschlüsseltem Volume

Übernommen von Verschlüsselte Longhorn-Volumes

Warum es ausgelassen wurde

Die Verschlüsselung übernimmt die StorageClass, daher benötigt der Pfad von Cinder keinen Key Manager.

Warum die Lösung nicht beeinträchtigt ist

Verschlüsselte Volume-Typen funktionieren weiterhin; eine feste Schlüssel-ID wird gespeichert und in den 3.64-Ansichten ausgeblendet.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

RPC-Casts und Scheduling nach Statistiken pro Pool

Warum es ausgelassen wurde

Die API speichert den Übergangsstatus und die Worker fragen die Datenbank ab; CSI-Treiber melden keine Kapazität, daher gibt es einen Pool pro Backend und AZ.

Warum die Lösung nicht beeinträchtigt ist

Volume-Zustände und API-Antworten bleiben unverändert; unterbrochene Operationen werden beim nächsten Durchlauf fortgesetzt, daher liefert workers/cleanup leere Listen.

Quelle: openkeel-cinder/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

Active-Active-Cluster und os-hosts

Übernommen von Kubernetes Leases

Warum es ausgelassen wurde

Jeder Worker hält einen Kubernetes-Lease, daher gibt es die Active-Active-Cluster von Cinder nicht.

Warum die Lösung nicht beeinträchtigt ist

Die Listen für Cluster und os-hosts sind leer, Schreibzugriffe antworten 501; die Hochverfügbarkeit ergibt sich aus der Lease-Übernahme.

Quelle: openkeel-cinder/docs/CONFORMANCE.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

Cinder-Interaktionen

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

Diagramm openkeel-cinder.svg Vollbild
Die 10 Interaktionen des Modells
VonNachProtokollWas
SkylineCinder APIREST-APIaggregated lists
Nova APICinder APIREST-APIvolume attach
Cinder APINova APIREST-APIvolume events
Cinder APIGlanceREST-APIvolume from image
Cinder APICinder volume driverRabbitMQRPC create/attach
Cinder volume driverCSI driver (Longhorn)Kubernetes-APIPVC (Block), VolumeSnapshot
Cinder volume driverKubeVirtKubernetes-APIvolume hotplug
Heat engineCinder APIREST-APIOS::Cinder::*
EC2 APICinder APIREST-APIvolumes, snapshots
Zun computeCinder APIREST-APIattachments → kubernetes_pvc

Spezifikationen