OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Componentes · Almacenamiento

Manila

Shares NFS multi-tenant: un gateway NFS-Ganesha por red de share, dentro de la red del tenant.

Go NFS-Ganeshaopenkeel-manila

El módulo

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

Extracto de openkeel-manila/README.md (en inglés).

API REST

258 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.

  • 132Implementado
  • 126No implementado

Cómo se prueba la compatibilidad

Los escenarios grabados de Manila en Python se reproducen en orden contra el servicio Go, se ejercita el contrato de Neutron y se montaron recursos compartidos de tenant en un clúster de laboratorio.

Replay de los intercambios grabados

Replay E2E de los escenarios grabados

283 intercambios de 29 escenarios ordenados, con tres back ends y el Neutron simulado del adaptador, dan el mismo estado, las mismas cabeceras y el mismo cuerpo.

Ejecución

go test -tags e2e ./test/e2e/; E2E_STRICT=1 se supera con test/e2e/known-differences.txt.

Último resultado 279 / 283 idénticos, con las 4 diferencias explicadas (dos errores de Python no reproducidos).

Fuente: openkeel-manila/docs/CONFORMANCE.md

Contrato de cliente

Flujos de cliente

Los flujos grabados de python-manilaclient/OSC, Manila CSI, Skyline y manila-ui funcionan sin cambios en sus microversiones.

Ejecución

Sus flujos grabados forman parte del replay.

Último resultado Se reproducen de forma idéntica.

Fuente: openkeel-manila/docs/CONFORMANCE.md

Contrato de cliente

Contrato de Neutron

Las seis peticiones a Neutron que envía Manila (extensiones, redes, subredes, creación, listado y eliminación de puertos) coinciden con las llamadas grabadas.

Ejecución

Ejercitado por el replay contra un port en Go del Neutron simulado del adaptador.

Fuente: openkeel-manila/docs/CONFORMANCE.md

De extremo a extremo en un laboratorio

Recurso compartido de tenant en un clúster de laboratorio

Un miembro del proyecto crea una share network y un recurso compartido; un cliente lo monta por NFSv4.1 a través de OVN, los demás son rechazados; la eliminación lo limpia todo.

Ejecución

scripts/manila-test.sh en el perfil openkeel-lab manila-dataplane (kind, dos chassis OVN).

Último resultado Validado en un clúster (2026-11-02) para el attachment openkeel-ovn; kube-ovn y multus no validados.

Fuente: openkeel-manila/docs/CONFORMANCE.md

Excluido del rewrite

Manila conserva su API y su scheduler, pero sirve recursos compartidos NFS desde pasarelas NFS-Ganesha sobre volúmenes CSI de bloque, lo que elimina los drivers de fabricante, el bus RPC, CIFS y la reversión in situ.

Asumido por la plataforma Cloud Native

Drivers de recursos compartidos de fabricantes

Asumido por NFS-Ganesha sobre CSI (Longhorn)

Por qué se excluyó

Un único back end multi-tenant (DHSS=True): una pasarela Ganesha por red de recursos compartidos, conectada a la red del tenant mediante un puerto de Neutron, con un volumen Longhorn por recurso compartido.

Por qué la solución no se ve afectada

Manila CSI, manilaclient, Skyline y manila-ui reproducen sus flujos de forma idéntica; el aislamiento entre tenants procede de Neutron y de las listas de acceso por exportación.

Fuente: openkeel-manila/docs/CONFORMANCE.md

Mecánica interna simplificada

RPC de RabbitMQ y bloqueos locales del host

Asumido por Kubernetes Leases

Por qué se excluyó

Los casts pasan a ser tareas en base de datos reservadas con un lease; los informes de capacidades son filas; una réplica de manila-share por back end mantiene un Lease de Kubernetes.

Por qué la solución no se ve afectada

Sin RabbitMQ para Manila, y las tareas de los workers caídos se retoman. Los servicios Manila en Python no pueden funcionar junto a los de Go: la migración es un cambio de una sola vez.

Fuente: openkeel-manila/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Recursos compartidos CIFS y reversión in situ a un snapshot

Asumido por CSI

Por qué se excluyó

El back end ganesha solo sirve NFS, y CSI no puede sustituir un volumen in situ.

Por qué la solución no se ve afectada

CIFS se rechaza y revert_to_snapshot_support se notifica como False; se pueden seguir creando nuevos recursos compartidos a partir de snapshots.

Fuente: openkeel-manila/docs/CONFORMANCE.md

Aquí solo figura lo que se excluyó por diseño; el trabajo aún no realizado está en los Known gaps del docs/CONFORMANCE.md del módulo. Todos los módulos

Interacciones Manila

Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.

Diagrama openkeel-manila.svg Pantalla completa
Las 2 interacciones del modelo
DeAProtocoloQué
Manila APIManila share driverRabbitMQRPC create/extend
Manila share driverCSI driver (Longhorn)API de KubernetesPVC (RWX filesystem)

Especificaciones