OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken

Komponenten · Compute und Kapazität

Masakari

Hochverfügbarkeit von Instanzen; Knotenzustand über Node Healthcheck und Self Node Remediation.

Go Medik8sopenkeel-masakari

Das Modul

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

Auszug aus openkeel-masakari/README.md (auf Englisch).

REST-API

21 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.

  • 21Implementiert

Wie die Kompatibilität getestet wird

Die aufgezeichneten Szenarien von Python-Masakari werden gegen den Go-Dienst wiedergegeben, die Recovery-Engine wird mit den Nova-Aufrufen von Python verglichen, und die Nebenläufigkeit wird auf Galera getestet.

Replay aufgezeichneter Austausche

E2E-Replay der aufgezeichneten Szenarien

Die 201 Austausche aus 23 geordneten Szenarien liefern mit demselben Fake-Nova und denselben periodischen Tasks dieselben Antworten wie Python.

Ausführung

make e2e, auf go-mysql-server und auf MariaDB 11.4 (E2E_MYSQL_DSN); make e2e-strict besteht.

Letztes Ergebnis 195 / 201 auf beiden Engines; 6 bewusste Unterschiede, aufgeführt in test/e2e/known-differences.txt.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Client-Vertrag

Engine gegen aufgezeichnete Nova-Aufrufe

Die Wiederherstellungsabläufe für Hosts und Instanzen senden Nova dieselben Änderungen pro Server, Dienst und Aggregat wie die Python-Engine.

Ausführung

internal/engine/engine_test.go auf nova-calls_stable-2026.2.json (143 Anfragen).

Letztes Ergebnis Identische Änderungen pro Server, Dienst und Aggregat; die Anzahl der GET-Polling-Anfragen wird nicht verglichen.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Unit- und Golden Tests

Unit- und Policy-Tests

API-Routing, Microversions, Validierungsmeldungen und die 24 Policy-Regeln für zwei Personas verhalten sich wie in Python.

Ausführung

make test, mit client-go-Fakes für die Kubernetes-Integration.

Letztes Ergebnis Bestanden.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Nebenläufigkeit auf Galera

Nebenläufigkeit auf MariaDB Galera

Eindeutige Namen und doppelte Benachrichtigungen halten über drei Knoten, und Engines auf drei Knoten evakuieren einen Host nur einmal.

Ausführung

make galera-test auf einem Cluster mit 3 Knoten.

Letztes Ergebnis Bestanden: Segmente und Hosts mit gleichem Namen 1 × 201, 17 × 409; doppelte Benachrichtigungen 1 × 202, 23 × 409.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Tempest

Funktionstests auf einem bereitgestellten Cluster

Masakari-Funktionstests (openstacksdk) und Tempest-ähnliche Tests gegen einen bereitgestellten Dienst.

Ausführung

Erfordern einen bereitgestellten Cluster.

Letztes Ergebnis Nicht ausgeführt.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Masakari behält seine API und Recovery-Workflows, erkennt Host-Ausfälle aber mit Medik8s statt masakari-monitors und ersetzt RPC, taskflow und tooz durch Datenbank-Claims.

Von der Cloud-Native-Plattform übernommen

Host-Monitor von masakari-monitors

Übernommen von Medik8s

Warum es ausgelassen wurde

Kubernetes erkennt fehlerhafte Knoten bereits: Ein NodeHealthCheck pro Segment, mit Self Node Remediation oder Fence Agents Remediation, isoliert den Knoten.

Warum die Lösung nicht beeinträchtigt ist

Die Engine löst dieselbe COMPUTE_HOST-Benachrichtigung aus, sobald der Knoten isoliert ist, sodass die Evakuierung wie bisher funktioniert. Die Instanz- und Prozessmonitore sind noch nicht ersetzt.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

oslo.messaging-RPC und tooz-Koordination

Übernommen von Kubernetes Leases

Warum es ausgelassen wurde

Die API fügt die Benachrichtigungszeile ein, und Engine-Repliken beanspruchen sie per Compare-and-Swap; Duplikate und Arbeit pro Host werden über Datenbankzeilen serialisiert, die über Galera-Knoten hinweg funktionieren.

Warum die Lösung nicht beeinträchtigt ist

Kein RabbitMQ erforderlich und kein Cast kann verloren gehen; der Galera-Test liefert genau ein 202 für 24 identische gleichzeitige Berichte.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

Taskflow-Logbook und benutzerdefinierte Recovery-Flows

Warum es ausgelassen wurde

Der Fortschritt ist eine Tabelle der einzigen Datenbank statt einer zweiten taskflow-Datenbank; Go kennt kein Laden von Plugins, daher sind die Standard-Flow-Listen fest eingebaut.

Warum die Lösung nicht beeinträchtigt ist

recovery_workflow_details liefert dieselbe Fortschrittsliste. Benutzerdefinierte Task-Listen und stevedore-Tasks von Drittanbietern werden nicht unterstützt.

Quelle: openkeel-masakari/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

WSGI-Serveroptionen, Healthcheck, osapi_v1-Filter

Übernommen von Kubernetes probes

Warum es ausgelassen wurde

Ein Go-HTTP-Server ersetzt den WSGI-Stack, Kubernetes verwaltet Prozesse und Probes, und die osapi_v1-Optionen sind upstream veraltet.

Warum die Lösung nicht beeinträchtigt ist

Die API und ihre microversions 1.0 bis 1.3 bleiben unverändert.

Quelle: openkeel-masakari/config/dropped-options.md

Hier ist nur aufgeführt, was bewusst ausgelassen wurde; noch nicht erledigte Arbeit steht in den Known gaps der docs/CONFORMANCE.md des Moduls. Alle Module

Masakari-Interaktionen

Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.

Diagramm openkeel-masakari.svg Vollbild
Die 4 Interaktionen des Modells
VonNachProtokollWas
Masakari engine + monitorsNova APIREST-APIserver state, host disable
Masakari APIMasakari engine + monitorsRabbitMQRPC notification
Masakari engine + monitorsMedik8s NHC + SNRKubernetes-APINodeHealthCheck, remediation status
Masakari engine + monitorsKubeVirtKubernetes-APIVMI delete, live migration

Spezifikationen