OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Stockage

Cinder

Les volumes bloc sont des PVC d'une StorageClass CSI (Rook-Ceph, Longhorn, NetApp, Huawei Dorado, Pure Storage), avec snapshots CSI et sauvegardes cinder-backup.

Go Tout CSI blocopenkeel-cinder

Le module

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

Extrait de openkeel-cinder/README.md (en anglais).

API REST

218 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.

  • 147Implémenté
  • 25Partiel
  • 46Non implémenté

Comment la compatibilité est testée

Les échanges des tests fonctionnels de Cinder Python sont rejoués contre le service Go, le contrat d'attachement de Nova est testé, et la concurrence est vérifiée sur Galera.

Rejeu des échanges enregistrés

Rejeu E2E des tests fonctionnels

967 échanges de 196 tests fonctionnels Python donnent le même statut et le même corps, avec la fixture des tests fonctionnels émulée.

Exécution

make e2e, sur go-mysql-server et MariaDB 11.4 (E2E_MYSQL_DSN) ; E2E_STRICT=1 réussit avec test/e2e/known-differences.txt.

Dernier résultat 832 / 967 identiques (834 sur MariaDB) ; dans le périmètre seul, 832 / 854 (97.4 %), le reste étant groups et manage (hors périmètre).

Source : openkeel-cinder/docs/CONFORMANCE.md

Contrat client

Contrat d'attachement Nova

L'API des attachements en 3.44, la mise à jour et la suppression idempotentes, la règle du jeton de service et les statuts d'erreur que Nova interprète correspondent à ses attentes.

Exécution

TestNovaAttachmentFlow, tests du routeur et TestQuotaExceeded.

Dernier résultat Testé ; os-reimage et les événements externes Nova sont implémentés mais non rejoués contre Nova.

Source : openkeel-cinder/docs/CONFORMANCE.md

Tests unitaires et golden tests

Tests unitaires, de politique et de flux

Les personas de politique sur 161 des 167 règles par défaut, les vecteurs de quota et de transfert, les règles du routeur et le pilote CSI se comportent comme spécifié.

Exécution

go test ./... (13 packages), pilote CSI sur simulacres client-go.

Dernier résultat Tous réussis.

Source : openkeel-cinder/docs/CONFORMANCE.md

Concurrence sur Galera

Concurrence sur MariaDB Galera

Quota et réservation tiennent lorsque les créations arrivent simultanément par trois nœuds Galera.

Exécution

make galera-test sur un cluster à 3 nœuds : 30 créations pour un quota de 10, 9 os-reserve concurrents.

Dernier résultat Réussi, 3 exécutions sur 3 : exactement 10 × 202, 20 × 413, aucun 5xx ; un seul gagnant os-reserve.

Source : openkeel-cinder/docs/CONFORMANCE.md

Tempest

Tempest et rejeux de clients

Tempest tempest/api/volume, cinder-tempest-plugin et rejeux des appels de cinderclient, Nova et du store Glance.

Exécution

Nécessitent un cluster kind avec Keystone, Longhorn, CDI et KubeVirt ; aucune invocation client enregistrée n'existe.

Dernier résultat Non exécuté.

Source : openkeel-cinder/docs/CONFORMANCE.md

Écarté de la réécriture

Cinder conserve l'API de volumes mais délègue le chemin de données à CSI (Longhorn par défaut), ce qui supprime les drivers constructeurs, la migration et la réplication entre backends, ainsi que la topologie RPC.

Assuré par la plateforme Cloud Native

Drivers de volumes constructeurs et FC zone manager

Repris par CSI (Longhorn par défaut)

Pourquoi c'est écarté

Chaque backend est une StorageClass CSI avec snapshots CSI et hotplug KubeVirt ; les informations de connexion sont un kubernetes_pvc que consomme le Nova d'OpenKeel.

Pourquoi la solution n'est pas affectée

Nova, le store cinder de Glance, cinderclient et Skyline utilisent la même API. Tout stockage doté d'un driver CSI peut servir de backend.

Source : openkeel-cinder/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Migration de volumes entre backends

Repris par CSI

Pourquoi c'est écarté

La copie de données entre StorageClasses passe par retype avec la politique de migration on-demand.

Pourquoi la solution n'est pas affectée

os-migrate_volume répond 400 avec un message qui renvoie vers os-retype, qui déplace les données.

Source : openkeel-cinder/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Réplication Cinder et failover_host

Repris par CSI

Pourquoi c'est écarté

Les backends CSI n'ont pas de réplication gérée par Cinder.

Pourquoi la solution n'est pas affectée

failover_host répond 400 'no replication target configured'. La redondance est celle du backend de stockage, configurée hors de l'API Cinder.

Source : openkeel-cinder/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Clé Barbican par volume chiffré

Repris par Volumes chiffrés Longhorn

Pourquoi c'est écarté

Le chiffrement est assuré par la StorageClass : le chemin de Cinder n'a pas besoin de gestionnaire de clés.

Pourquoi la solution n'est pas affectée

Les types de volumes chiffrés fonctionnent toujours ; un identifiant de clé fixe est enregistré et masqué dans les vues 3.64.

Source : openkeel-cinder/docs/CONFORMANCE.md

Mécanique interne simplifiée

Casts RPC et ordonnancement sur les statistiques par pool

Pourquoi c'est écarté

L'API enregistre l'état transitoire et les workers interrogent la base ; les drivers CSI ne remontent pas de capacité, il y a donc un pool par backend et par AZ.

Pourquoi la solution n'est pas affectée

Les états des volumes et les réponses de l'API sont inchangés ; les opérations interrompues sont reprises au passage suivant, si bien que workers/cleanup renvoie des listes vides.

Source : openkeel-cinder/docs/CONFORMANCE.md

Mécanique interne simplifiée

Clusters actif-actif et os-hosts

Repris par Kubernetes Leases

Pourquoi c'est écarté

Chaque worker détient un Lease Kubernetes : les clusters actif-actif de Cinder n'existent donc pas.

Pourquoi la solution n'est pas affectée

Les listes de clusters et d'os-hosts sont vides et les écritures répondent 501 ; la haute disponibilité vient de la reprise du Lease.

Source : openkeel-cinder/docs/CONFORMANCE.md

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de Cinder

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-cinder.svg Plein écran
Les 10 interactions du modèle
DeVersProtocoleQuoi
SkylineCinder APIAPI RESTaggregated lists
Nova APICinder APIAPI RESTvolume attach
Cinder APINova APIAPI RESTvolume events
Cinder APIGlanceAPI RESTvolume from image
Cinder APICinder volume driverRabbitMQRPC create/attach
Cinder volume driverCSI driver (Longhorn)API KubernetesPVC (Block), VolumeSnapshot
Cinder volume driverKubeVirtAPI Kubernetesvolume hotplug
Heat engineCinder APIAPI RESTOS::Cinder::*
EC2 APICinder APIAPI RESTvolumes, snapshots
Zun computeCinder APIAPI RESTattachments → kubernetes_pvc

Spécifications