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

Komponenten · Dienste und Orchestrierung

CloudKitty

Bewertung (FinOps): aus Prometheus gesammelte Nutzung, bepreist durch hashmap-Regeln und CEL-Skripte, bewertete Historie in InfluxDB; zusammen mit openkeel-pricing (Kosten- und CO₂-Angebote) speist es die FinOps-/GreenOps-Seite von Skyline.

Go Prometheus, InfluxDBopenkeel-cloudkitty

Das Modul

OpenKeel implementation in Go of OpenStack CloudKitty, the rating service (cloudkitty-api and cloudkitty-processor), generated from the reverse-specification of branch stable/2026.2 (reverse-spec-cloudkitty/, files 00–07 and _rewrite/) by the generate-go-from-spec skill. It replaces the Python service without its clients noticing (python-cloudkittyclient, cloudkitty-dashboard): same routes (66 operations of v1, hashmap, pyscripts and v2), status codes, WSME and flask-restful error bodies, and policies.

What it does: the processor lists the scopes (Keystone projects with the rating role, Prometheus label values or a static list), collects their usage from Prometheus every period, prices it with the enabled rating modules (hashmap rules, CEL scripts in place of PyScripts), and stores the rated data in InfluxDB (1.x or 2.x); the API manages the rules and returns summaries, rated data frames and instant quotes.

OpenKeel decisions (details and reasons in docs/CONFORMANCE.md):

  • PyScripts are CEL expressions, evaluated per data point, never Python (exec); tools/pyscript2cel.py translates the scripts written in the documented pattern; skip_datapoints_expression is CEL too.
  • Collector: Prometheus only (kube-prometheus-stack); storage: InfluxDB only; no RabbitMQ: quotes are computed in the API, scope resets go to the processor through the database; one active processor elected with a Kubernetes Lease.
  • Fixed upstream defects: scoped deletes, unprotected GET /v2/rating/modules, quotes with a flat desc, InfluxQL built from escaped literals, no unverified Keystone call, reprocessing and reset windows. 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-cloudkitty
  • Binaries: cloudkitty-api (API on port 8889, health and metrics on 9090) and cloudkitty-processor (health on 9090)
  • 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-cloudkitty/README.md (auf Englisch).

REST-API

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

  • 66Implementiert

Wie die Kompatibilität getestet wird

Die drei gabbi-Suiten von CloudKitty werden gegen den Go-Dienst wiederholt, mit hashmap-Vektoren aus den Python-Tests und einem über den Ingress zurückgelesenen Lab-Deployment.

Replay aufgezeichneter Austausche

E2E-Wiederholung der gabbi-Suiten

223 Austausche aus 19 gabbi-Dateien (v1, hashmap, pyscripts, v2) liefern denselben Status und denselben Body.

Ausführung

make e2e, auch auf MariaDB 11.4 (E2E_MYSQL_DSN); der strikte Modus besteht mit den aufgeführten bekannten Unterschieden.

Letztes Ergebnis 153 / 223 identisch; die 70 anderen sind erklärt (Fakes der Python-Tests, Storage v1, CORS, abgelehnte Python-Skripte).

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Unit- und Golden Tests

hashmap-Vektoren

24 hashmap-Bewertungsvektoren, aufgezeichnet aus cloudkitty.tests.test_hashmap, ergeben auf die Ziffer denselben Preis; Dezimalzahlen gegen CPython geprüft.

Ausführung

go test ./... (19 Pakete).

Letztes Ergebnis 24 / 24 identisch.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

End-to-End in einem Lab

Lab-Deployment

Katalogtyp rating, Module, hashmap-Regeln, Angebote, ein abgelehntes Python-Skript und ein akzeptiertes CEL-Skript, Dataframes geschrieben und über /v2/summary zurückgelesen; der Processor bewertet ab Monatsbeginn.

Ausführung

okadm install --mode lab mit cloudkitty, Aufrufe über den Ingress mit einem Admin-Token; FinOps-/GreenOps-Seite von Skyline.

Letztes Ergebnis Bestanden, 0 Bewertungsfehler.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Client-Vertrag

Client-Erwartungen

python-cloudkittyclient, cloudkitty-dashboard und cloudkitty-tempest-plugin.

Ausführung

Noch nicht reverse-spezifiziert.

Letztes Ergebnis Nicht ausgeführt.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Im Rewrite ausgelassen

CloudKitty behält seine 66 API-Operationen und seine Bewertung; es sammelt nur aus Prometheus und speichert nur in InfluxDB, und PyScripts werden zu CEL-Ausdrücken.

Vereinfachte interne Mechanik

PyScripts (vom Dienst ausgeführtes Python)

Übernommen von CEL

Warum es ausgelassen wurde

Python von Betreibern mit exec auszuführen ist beliebiger Code im Dienst; CEL hat keine Anweisungen und kein I/O, mit Kosten- und Zeitgrenzen.

Warum die Lösung nicht beeinträchtigt ist

Gleiche Bewertung pro Datenpunkt; Skripte nach dem dokumentierten Muster übersetzt tools/pyscript2cel.py, die anderen werden neu geschrieben.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Gnocchi- und Aetos-Collectoren, Gnocchi-Fetcher

Übernommen von Prometheus

Warum es ausgelassen wurde

OpenKeel stellt kein Gnocchi bereit: Die Nutzung kommt aus Prometheus (kube-prometheus-stack, openstack-exporter).

Warum die Lösung nicht beeinträchtigt ist

Dieselben bewerteten Daten aus den Prometheus-Metriken; die Collectoren können bei Bedarf ergänzt werden.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Elasticsearch, OpenSearch, Loki und Storage v1

Übernommen von InfluxDB

Warum es ausgelassen wurde

Die bewertete Historie geht nach InfluxDB 1.x oder 2.x; die anderen Backends werden nicht bereitgestellt.

Warum die Lösung nicht beeinträchtigt ist

Zusammenfassungen und Dataframes wie mit Storage v2; die Upstream-Fehler beim Scope-Filter dieser Backends können nicht auftreten.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

RabbitMQ-RPC und tooz-Sperren

Übernommen von Kubernetes Leases

Warum es ausgelassen wurde

Angebote werden in der API mit demselben Bewertungscode berechnet; Scope-Resets gehen über die Datenbank an den Processor; ein einziger aktiver Processor hält ein Lease.

Warum die Lösung nicht beeinträchtigt ist

Gleiches API-Verhalten, eine Abhängigkeit weniger, korrekt auf mehreren Hosts.

Quelle: openkeel-cloudkitty/docs/CONFORMANCE.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

Spezifikationen