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

Componentes · Cómputo y capacidad

Masakari

Alta disponibilidad de instancias; estado de los nodos mediante Node Healthcheck y Self Node Remediation.

Go Medik8sopenkeel-masakari

El módulo

OpenKeel implementation in Go of OpenStack Masakari, the instance high-availability service (masakari-api, masakari-engine, masakari-manage), 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-masakari
  • Binaries (one image):
    • masakari-api: the instance-ha API v1, microversions 1.0–1.3 (port 15868; health and metrics on 9090);
    • masakari-engine: claims new notifications and runs the recovery workflows (host evacuation by segment recovery method, instance restart, compute-service disable) through Nova (openkeel-nova), runs the periodic tasks on the Lease holder and, in a cluster, the Medik8s/KubeVirt integration below;
    • masakari-manage: db sync, db version, db purge.
  • Kubernetes-native HA (internal/kube, [references/backends/masakari-kubevirt.md] of the skill and openkeel-docs/NODE-PLACEMENT.md § 5.6 of the workspace): one Medik8s NodeHealthCheck per segment detects and fences failed nodes (Self Node Remediation, OutOfServiceTaint); the engine reports the host failure only once the node is fenced and evacuates its VMs per segment policy; it live-migrates the VMs of degraded or drained nodes before they fail, and mirrors segments and reserved hosts on node labels and taints.
  • 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-masakari/README.md (en inglés).

API REST

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

  • 21Implementado

Cómo se prueba la compatibilidad

Los escenarios grabados de Masakari en Python se reproducen contra el servicio Go, el motor de recuperación se compara con las llamadas a Nova que hacía Python y la concurrencia se prueba en Galera.

Replay de los intercambios grabados

Replay E2E de los escenarios grabados

Los 201 intercambios de 23 escenarios ordenados, con el mismo Nova simulado y las mismas tareas periódicas, dan las mismas respuestas que Python.

Ejecución

make e2e, en go-mysql-server y en MariaDB 11.4 (E2E_MYSQL_DSN); make e2e-strict se supera.

Último resultado 195 / 201 en ambos motores; 6 diferencias deliberadas enumeradas en test/e2e/known-differences.txt.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Contrato de cliente

Motor frente a las llamadas grabadas a Nova

Los flujos de recuperación de hosts e instancias envían a Nova las mismas mutaciones, por servidor, servicio y agregado, que el motor de Python.

Ejecución

internal/engine/engine_test.go sobre nova-calls_stable-2026.2.json (143 peticiones).

Último resultado Mutaciones idénticas por servidor, servicio y agregado; no se comparan los recuentos de sondeo GET.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Tests unitarios y golden tests

Tests unitarios y de políticas

El enrutamiento de la API, las microversiones, los mensajes de validación y las 24 reglas de políticas para dos personas se comportan como en Python.

Ejecución

make test, con simulaciones de client-go para la integración con Kubernetes.

Último resultado Superado.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Concurrencia en Galera

Concurrencia en MariaDB Galera

Los nombres únicos y las notificaciones duplicadas se mantienen a través de tres nodos, y los motores en tres nodos evacuan un host una sola vez.

Ejecución

make galera-test en un clúster de 3 nodos.

Último resultado Superado: segmentos y hosts con el mismo nombre 1 × 201, 17 × 409; notificaciones duplicadas 1 × 202, 23 × 409.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Tempest

Tests funcionales en un clúster desplegado

Tests funcionales de Masakari (openstacksdk) y tests de tipo Tempest contra un servicio desplegado.

Ejecución

Requieren un clúster desplegado.

Último resultado No ejecutado.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Excluido del rewrite

Masakari conserva su API y sus flujos de recuperación, pero detecta los fallos de host con Medik8s en lugar de masakari-monitors y sustituye RPC, taskflow y tooz por reservas en base de datos.

Asumido por la plataforma Cloud Native

Monitor de hosts masakari-monitors

Asumido por Medik8s

Por qué se excluyó

Kubernetes ya detecta los nodos con fallos: un NodeHealthCheck por segmento, con Self Node Remediation o Fence Agents Remediation, aísla el nodo.

Por qué la solución no se ve afectada

El motor emite la misma notificación COMPUTE_HOST una vez aislado el nodo, por lo que la evacuación funciona como antes. Los monitores de instancias y de procesos aún no se han sustituido.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Mecánica interna simplificada

RPC de oslo.messaging y coordinación tooz

Asumido por Kubernetes Leases

Por qué se excluyó

La API inserta la fila de notificación y las réplicas del motor la reservan mediante compare-and-swap; los duplicados y el trabajo por host se serializan con filas de base de datos que funcionan entre nodos Galera.

Por qué la solución no se ve afectada

No se necesita RabbitMQ y no puede perderse ningún cast; la prueba de Galera da exactamente un 202 para 24 informes idénticos concurrentes.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Mecánica interna simplificada

Logbook de taskflow y flujos de recuperación personalizados

Por qué se excluyó

El progreso es una tabla de la base de datos única en lugar de una segunda base de datos de taskflow; Go no carga plugins, por lo que las listas de flujos por defecto están integradas.

Por qué la solución no se ve afectada

recovery_workflow_details devuelve la misma lista de progreso. No se admiten listas de tareas personalizadas ni tareas stevedore de terceros.

Fuente: openkeel-masakari/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Opciones del servidor WSGI, healthcheck, filtros osapi_v1

Asumido por Kubernetes probes

Por qué se excluyó

Un servidor HTTP en Go sustituye la pila WSGI, Kubernetes gestiona los procesos y las probes, y las opciones osapi_v1 están obsoletas en upstream.

Por qué la solución no se ve afectada

La API y sus microversions 1.0 a 1.3 no cambian.

Fuente: openkeel-masakari/config/dropped-options.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 Masakari

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

Diagrama openkeel-masakari.svg Pantalla completa
Las 4 interacciones del modelo
DeAProtocoloQué
Masakari engine + monitorsNova APIAPI RESTserver state, host disable
Masakari APIMasakari engine + monitorsRabbitMQRPC notification
Masakari engine + monitorsMedik8s NHC + SNRAPI de KubernetesNodeHealthCheck, remediation status
Masakari engine + monitorsKubeVirtAPI de KubernetesVMI delete, live migration

Especificaciones