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

Das Projekt

Verbesserungen

Über die Funktionsgleichheit hinaus: Tooling, Sicherheit und Benutzerfreundlichkeit.

Go: die Cloud-native Sprache

Die Cloud-native Sprache

Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: dieselbe Sprache wie die Plattform

Integriertes Ökosystem

client-go, Helm SDK, OVSDB, Prometheus, OIDC: native Bibliotheken, keine Brücken

Typisiert und kompiliert

Starke Typisierung, Fehler werden beim Kompilieren erkannt, schnellerer Code als Python

Schnelle Builds

Ein statisches Binary pro Dienst, schnelle Kompilierung, Multi-Architektur

Minimale Container

Ein Executable, rootless, ohne Shell und ohne Quellcode, auf Distroless statt Ubuntu

Schlank zur Laufzeit

Kein Interpreter und kein eventlet (Startzeit und Speicher im Workspace nicht gemessen)

Werkzeuge: skripten, bereitstellen, steuern

Drei Werkzeuge, die OpenStack in dieser Form nicht bietet, in Go geschrieben wie die Dienste und mit jeder OpenKeel-Version ausgeliefert.

ok

Die OpenStack-CLI, in Go

ok ist der Befehl openstack, neu geschrieben in Go: eine einzige statische Binärdatei, ohne Python, virtualenv oder zu installierende Plugins.

  • Alle 1.325 Befehle von python-openstackclient 10.3.1 und seinen Plugins, jeder per differenziellem Replay gegen die Python-CLI geprüft
  • Gleiche Argumente, Ausgabeformate, Fehlermeldungen und Exit-Codes: bestehende Skripte laufen weiter
  • Liest clouds.yaml, OS_* und --os-* wie das Original; Binärdateien für Linux, macOS und Windows sowie ein Distroless-Image
export OS_CLOUD=openkeel
ok server list -f json
Mehr erfahren
okadm

Plug-and-play-Bereitstellung, Lab oder Produktion

okadm installiert OpenKeel auf einem Kubernetes-Cluster mit einem Befehl pro Schritt des Lebenszyklus, im Lab- oder Produktionsmodus.

  • Lab: ohne Cluster legt es einen kind-Cluster an, installiert die Lab-Operatoren und je ein Replikat pro Dienst; --ingress fügt den öffentlichen Zugangspunkt hinzu
  • Produktion: okadm plan prüft die Voraussetzungen (Version, Knotenrollen, Operatoren, StorageClass, Domain) und nennt für jede die Abhilfe; drei Replikate
  • Idempotente Installation, die dort weitermacht, wo sie stehen blieb, Upgrade Komponente für Komponente, Status, Deinstallation; client-go und das Helm-SDK integriert
okadm plan --mode production
okadm install --mode lab \
  --create-kind --ingress --demo
Mehr erfahren
Configurator

Die Bereitstellung grafisch steuern

Der Configurator ist eine Webkonsole, die okadm standardmäßig installiert, um die Bereitstellung der OpenKeel-Module vorzubereiten und visuell zu verfolgen.

  • Rollen der Knoten (Control Plane, Compute, Netzwerk, Speicher, Container, Provisionierung) und Platzierung jeder Komponente per Drag-and-drop in einer Topologieansicht nach Verfügbarkeitszone
  • Parameter jedes Dienstes: aktiviert, Replikate, Autoscaling, Ressourcen, freies YAML; Prüfung von Quorum, Anti-Affinität und Mindestzahl je Rolle
  • Visuelle Verfolgung: Verteilung der Komponenten auf die Knoten, Zustand der Pods (bereit, Neustarts) und die Logs jedes Dienstes, zusammengeführt und durchsuchbar
  • Erzeugt die Values für okadm install -f und die Knoten-Labels oder setzt die Labels selbst
Die Tour ansehen

Weniger Code, dieselben Garantien

  • 1,008 kPython-Zeilen in den 19 Originalmodulen
  • 310 kGo-Zeilen in den OpenKeel-Modulen
  • −69%Code, ohne Tests
ModulPythonGoÄnderung
Placement10,28710,2560%
Nova150,84620,534−86%
Zun30,93813,947−55%
Masakari10,8359,347−14%
Cinder255,93417,400−93%
Glance31,27914,372−54%
Manila135,16218,285−86%
Neutron127,62325,947−80%
Octavia (OVN)5,7789,042+56%
Neutron-FWaaS8,0859,643+19%
Neutron-VPNaaS6,44911,190+74%
OVN-BGP-Agent8,4485,074−40%
Keystone50,58421,015−58%
Barbican18,68812,851−31%
Designate23,67115,367−35%
CloudKitty15,02012,042−20%
EC2-API11,57016,272+41%
Skyline18,7238,590−54%
ok (CLI)88,12259,156−33%
Total1,008,042310,330−69%

Nicht leere Zeilen ohne Kommentare, ohne Tests, gezählt bei der Generierung der Website. Auf der Python-Seite wird nur das Dienstpaket gezählt: oslo, neutron-lib, keystonemiddleware und os-brick nicht, während ihre Entsprechungen in jedem Go-Modul enthalten sind. Durch Kubernetes ersetzte Treiber und Agenten entfallen; kleine Module, die früher an Neutron oder Nova angehängt waren, wachsen, weil sie zu eigenständigen Diensten werden.

Konfiguration: von oslo.config zu YAML

OpenStack (Python)OpenKeel (Go)
Dateienoslo.config-INI, dazu api-paste.ini, rootwrap.conf und seine Filter, logging.conf, PolicyEine config.yaml pro Prozess, aus einer ConfigMap gemountet
SecretsPasswörter in connection und transport_url*_file-Felder werden aus gemounteten Secrets gelesen, nie im YAML
Prozessbind_host, workers, log_file, use_syslog, debugVon Kubernetes übernommen; ein einziges default.log_level
TreiberOptionen aller ausgelieferten Treiber (libvirt, VMware, Arrays, ML2…)Nur die Optionen der gewählten Bausteine (KubeVirt, CSI, OVN)
ValidierungEine separate Prüfung mit dem Werkzeug oslo-config-validatorStrikte Dekodierung: Bei einem unbekannten Schlüssel oder einem Wert außerhalb des zulässigen Bereichs verweigert der Prozess den Start
ÄnderungDateien auf jedem Host bearbeiten, neu startenNeuer ConfigMap-Hash, Rolling Restart; Log-Level über SIGHUP

Gleiche Namen: Gruppen, Optionen und Standardwerte des Originals; OPENKEEL_<GROUP>_<OPTION> überschreibt einen Wert für einen einzelnen Pod.

Weniger Optionen: nur das Wesentliche behalten

ModulBeibehaltenEntfernt
Placement7101
Nova1221,015
Zun63300
Masakari35235
Cinder491,411
Glance66472
Manila82905
Neutron82443
Keystone100313
Barbican72200
Designate84300
CloudKitty50271
EC2-API16151
  • 828beibehaltene Optionen von 6,945, in 13 Modulen
  • 88%der oslo-Optionen entfernt

Zahlen aus der Datei config/dropped-options.md jedes Moduls; jede entfernte Option ist dort mit ihrer Begründung aufgeführt. Entfernt: veraltete Optionen, nicht ausgelieferte Treiber, eventlet und Dateisperren, von Kubernetes übernommene Prozessoptionen. Beibehalten: alles, was die API, die Daten oder die Limits verändert (Quotas, Allocation Ratios, Token-Lebensdauer, enforce_scope).

Sicherheit und Benutzerfreundlichkeit

Skyline-OIDC

Anmeldung an der Konsole über einen OIDC-Identitätsanbieter: Föderation, SSO, mit JWKS validierte Tokens.

Rotierende interne Secrets

Datenbankpasswörter, RabbitMQ-Konten und Dienstschlüssel werden als rotierende Komponenten verwaltet und lassen sich ohne manuellen Aufwand erneuern.

EC2-Zugangsdaten in Skyline

EC2-Zugangsdaten (Access/Secret) in der Konsole erstellen und verwalten, um auf S3-Speicher zuzugreifen.