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.
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.
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.