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