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.
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.