I volumi a blocchi sono PVC di una StorageClass CSI (Rook-Ceph, Longhorn, NetApp, Huawei Dorado, Pure Storage), con snapshot CSI e backup cinder-backup.
Go Qualsiasi CSI a blocchiopenkeel-cinder
Il modulo
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
Estratto da openkeel-cinder/README.md (in inglese).
API REST
218 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel.
Gli scambi dei test funzionali di Cinder Python vengono riprodotti sul servizio Go, il contratto degli attachment di Nova viene testato e la concorrenza viene verificata su Galera.
Replay degli scambi registrati
Replay E2E dei test funzionali
967 scambi di 196 test funzionali Python restituiscono lo stesso stato e lo stesso corpo, con la fixture dei test funzionali emulata.
Esecuzione
make e2e, su go-mysql-server e MariaDB 11.4 (E2E_MYSQL_DSN); E2E_STRICT=1 superato con test/e2e/known-differences.txt.
Ultimo risultato 832 / 967 identici (834 su MariaDB); nel solo ambito 832 / 854 (97.4 %), il resto essendo groups e manage (fuori ambito).
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Contratto client
Contratto degli attachment di Nova
L'API degli attachment in 3.44, l'aggiornamento e l'eliminazione idempotenti, la regola del token di servizio e gli stati di errore interpretati da Nova corrispondono alle sue aspettative.
Esecuzione
TestNovaAttachmentFlow, test del router e TestQuotaExceeded.
Ultimo risultato Testato; os-reimage e gli eventi esterni di Nova sono implementati ma non riprodotti su Nova.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Test unitari e golden test
Test unitari, di policy e di flusso
Le personas di policy su 161 delle 167 regole predefinite, i vettori di quota e di trasferimento, le regole del router e il driver CSI si comportano come specificato.
Esecuzione
go test ./... (13 pacchetti), driver CSI su simulatori client-go.
Ultimo risultato Tutti superati.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Concorrenza su Galera
Concorrenza su MariaDB Galera
Quota e prenotazione reggono quando le creazioni arrivano contemporaneamente da tre nodi Galera.
Esecuzione
make galera-test su un cluster a 3 nodi: 30 creazioni per una quota di 10, 9 os-reserve concorrenti.
Ultimo risultato Superato, 3 esecuzioni su 3: esattamente 10 × 202, 20 × 413, nessun 5xx; un solo vincitore di os-reserve.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Tempest
Tempest e replay dei client
Tempest tempest/api/volume, cinder-tempest-plugin e replay delle chiamate di cinderclient, Nova e dello store di Glance.
Esecuzione
Richiedono un cluster kind con Keystone, Longhorn, CDI e KubeVirt; non esistono invocazioni client registrate.
Ultimo risultato Non eseguito.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Escluso dal rewrite
Cinder mantiene l'API dei volumi ma delega il percorso dei dati a CSI (Longhorn per impostazione predefinita), eliminando i driver dei vendor, la migrazione e la replica tra backend e la topologia RPC.
Gestito dalla piattaforma Cloud Native
Driver di volume dei vendor e FC zone manager
Gestito da CSI (Longhorn per impostazione predefinita)
Perché è stato escluso
Ogni backend è una StorageClass CSI con snapshot CSI e hotplug KubeVirt; le informazioni di connessione sono un kubernetes_pvc utilizzato dal Nova di OpenKeel.
Perché la soluzione non ne risente
Nova, lo store cinder di Glance, cinderclient e Skyline usano la stessa API. Qualsiasi storage con un driver CSI può fungere da backend.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Gestito dalla piattaforma Cloud Native
Migrazione dei volumi tra backend
Gestito da CSI
Perché è stato escluso
La copia dei dati tra StorageClass avviene tramite retype con la policy di migrazione on-demand.
Perché la soluzione non ne risente
os-migrate_volume risponde 400 con un messaggio che rimanda a os-retype, che sposta i dati.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Gestito dalla piattaforma Cloud Native
Replica Cinder e failover_host
Gestito da CSI
Perché è stato escluso
I backend CSI non hanno una replica gestita da Cinder.
Perché la soluzione non ne risente
failover_host risponde 400 'no replication target configured'. La ridondanza è quella propria del backend di storage, configurata al di fuori dell'API Cinder.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Gestito dalla piattaforma Cloud Native
Chiave Barbican per volume cifrato
Gestito da Volumi cifrati Longhorn
Perché è stato escluso
La cifratura è svolta dalla StorageClass, quindi il percorso di Cinder non richiede un key manager.
Perché la soluzione non ne risente
I tipi di volume cifrati continuano a funzionare; viene registrato un ID di chiave fisso, nascosto nelle viste 3.64.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Meccanismi interni semplificati
Cast RPC e scheduling basato sulle statistiche per pool
Perché è stato escluso
L'API registra lo stato transitorio e i worker interrogano il database; i driver CSI non segnalano capacità, quindi c'è un pool per backend e AZ.
Perché la soluzione non ne risente
Gli stati dei volumi e le risposte dell'API restano invariati; le operazioni interrotte riprendono al passaggio successivo, quindi workers/cleanup restituisce elenchi vuoti.
Fonte: openkeel-cinder/docs/CONFORMANCE.md
Meccanismi interni semplificati
Cluster active-active e os-hosts
Gestito da Kubernetes Leases
Perché è stato escluso
Ogni worker detiene un Lease Kubernetes, quindi i cluster active-active di Cinder non esistono.
Perché la soluzione non ne risente
Gli elenchi di cluster e os-hosts sono vuoti e le scritture rispondono 501; l'alta disponibilità deriva dalla presa in carico del Lease.
Fonte: openkeel-cinder/docs/CONFORMANCE.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 Cinder
Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.