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

Composants · Stockage

Manila

Partages NFS multi-tenant : une passerelle NFS-Ganesha par réseau de partage, dans le réseau du tenant.

Go NFS-Ganeshaopenkeel-manila

Le module

OpenKeel implementation in Go of OpenStack Manila (manila-api, manila-scheduler, manila-share), 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: same routes, status codes, error bodies, microversions and policies. 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-manila
  • Binaries: manila-api (API on port 8786, health and metrics on 9090), manila-scheduler and manila-share (workers fed by the database task queue, no RabbitMQ), manila-ganesha-agent (side-car of the NFS-Ganesha gateway pods). Each process binary is the same program with another default -process.
  • Back end: multi-tenant (driver_handles_share_servers: true): one NFS-Ganesha gateway pod per share network subnet, attached to the tenant network through a Neutron port, Longhorn RWO volumes behind it, CSI snapshots (07 § 3.5; design in docs/CONFORMANCE.md D1)
  • 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-manila/README.md (en anglais).

API REST

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

  • 132Implémenté
  • 126Non implémenté

Comment la compatibilité est testée

Les scénarios enregistrés de Manila Python sont rejoués dans l'ordre contre le service Go, le contrat Neutron est exercé, et des partages de tenant ont été montés sur un cluster de lab.

Rejeu des échanges enregistrés

Rejeu E2E des scénarios enregistrés

283 échanges de 29 scénarios ordonnés, avec trois back ends et le faux Neutron de l'adaptateur, donnent le même statut, les mêmes en-têtes et le même corps.

Exécution

go test -tags e2e ./test/e2e/ ; E2E_STRICT=1 réussit avec test/e2e/known-differences.txt.

Dernier résultat 279 / 283 identiques, les 4 différences expliquées (deux bogues Python non reproduits).

Source : openkeel-manila/docs/CONFORMANCE.md

Contrat client

Flux clients

Les flux enregistrés de python-manilaclient/OSC, Manila CSI, Skyline et manila-ui fonctionnent sans modification à leurs microversions.

Exécution

Leurs flux enregistrés font partie du rejeu.

Dernier résultat Rejouent à l'identique.

Source : openkeel-manila/docs/CONFORMANCE.md

Contrat client

Contrat Neutron

Les six requêtes Neutron qu'envoie Manila (extensions, réseaux, sous-réseaux, création, listage et suppression de port) correspondent aux appels enregistrés.

Exécution

Exercé par le rejeu contre un portage Go du faux Neutron de l'adaptateur.

Source : openkeel-manila/docs/CONFORMANCE.md

De bout en bout sur un lab

Partage de tenant sur un cluster de lab

Un membre de projet crée un share network et un partage ; un client le monte en NFSv4.1 via OVN, les autres sont refusés ; la suppression nettoie tout.

Exécution

scripts/manila-test.sh sur le profil openkeel-lab manila-dataplane (kind, deux chassis OVN).

Dernier résultat Validé sur un cluster (2026-11-02) pour l'attachement openkeel-ovn ; kube-ovn et multus non validés.

Source : openkeel-manila/docs/CONFORMANCE.md

Écarté de la réécriture

Manila conserve son API et son scheduler mais sert les partages NFS depuis des passerelles NFS-Ganesha sur des volumes CSI en mode bloc, ce qui supprime les drivers constructeurs, le bus RPC, CIFS et le retour sur place.

Assuré par la plateforme Cloud Native

Drivers de partage constructeurs

Repris par NFS-Ganesha sur CSI (Longhorn)

Pourquoi c'est écarté

Un seul back end multi-tenant (DHSS=True) : une passerelle Ganesha par réseau de partage, rattachée au réseau du tenant par un port Neutron, avec un volume Longhorn par partage.

Pourquoi la solution n'est pas affectée

Manila CSI, manilaclient, Skyline et manila-ui rejouent leurs flux à l'identique ; l'isolation des tenants vient de Neutron et des listes d'accès par export.

Source : openkeel-manila/docs/CONFORMANCE.md

Mécanique interne simplifiée

RPC RabbitMQ et verrous locaux à l'hôte

Repris par Kubernetes Leases

Pourquoi c'est écarté

Les casts deviennent des tâches en base réservées par un bail ; les rapports de capacités sont des lignes ; une réplique manila-share par back end détient un Lease Kubernetes.

Pourquoi la solution n'est pas affectée

Pas de RabbitMQ pour Manila, et les tâches des workers tombés sont reprises. Les services Manila Python ne peuvent pas tourner à côté de ceux en Go : la migration est une bascule.

Source : openkeel-manila/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Partages CIFS et retour sur place à un snapshot

Repris par CSI

Pourquoi c'est écarté

Le back end ganesha ne sert que NFS, et CSI ne peut pas remplacer un volume sur place.

Pourquoi la solution n'est pas affectée

CIFS est refusé et revert_to_snapshot_support est signalé à False ; de nouveaux partages peuvent toujours être créés à partir de snapshots.

Source : openkeel-manila/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 Manila

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

Diagramme openkeel-manila.svg Plein écran
Les 2 interactions du modèle
DeVersProtocoleQuoi
Manila APIManila share driverRabbitMQRPC create/extend
Manila share driverCSI driver (Longhorn)API KubernetesPVC (RWX filesystem)

Spécifications