Die Cloud-native Sprache
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: dieselbe Sprache wie die Plattform
OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken
Das Projekt
Über die Funktionsgleichheit hinaus: Tooling, Sicherheit und Benutzerfreundlichkeit.
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: dieselbe Sprache wie die Plattform
client-go, Helm SDK, OVSDB, Prometheus, OIDC: native Bibliotheken, keine Brücken
Starke Typisierung, Fehler werden beim Kompilieren erkannt, schnellerer Code als Python
Ein statisches Binary pro Dienst, schnelle Kompilierung, Multi-Architektur
Ein Executable, rootless, ohne Shell und ohne Quellcode, auf Distroless statt Ubuntu
Kein Interpreter und kein eventlet (Startzeit und Speicher im Workspace nicht gemessen)
Drei Werkzeuge, die OpenStack in dieser Form nicht bietet, in Go geschrieben wie die Dienste und mit jeder OpenKeel-Version ausgeliefert.
ok ist der Befehl openstack, neu geschrieben in Go: eine einzige statische Binärdatei, ohne Python, virtualenv oder zu installierende Plugins.
export OS_CLOUD=openkeel
ok server list -f jsonMehr erfahrenokadm installiert OpenKeel auf einem Kubernetes-Cluster mit einem Befehl pro Schritt des Lebenszyklus, im Lab- oder Produktionsmodus.
okadm plan prüft die Voraussetzungen (Version, Knotenrollen, Operatoren, StorageClass, Domain) und nennt für jede die Abhilfe; drei Replikateokadm plan --mode production
okadm install --mode lab \
--create-kind --ingress --demoMehr erfahrenDer Configurator ist eine Webkonsole, die okadm standardmäßig installiert, um die Bereitstellung der OpenKeel-Module vorzubereiten und visuell zu verfolgen.
okadm install -f und die Knoten-Labels oder setzt die Labels selbst| Modul | Python | Go | Änderung |
|---|---|---|---|
| Placement | 10,287 | 10,256 | 0% |
| Nova | 150,846 | 20,534 | −86% |
| Zun | 30,938 | 13,947 | −55% |
| Masakari | 10,835 | 9,347 | −14% |
| Cinder | 255,934 | 17,400 | −93% |
| Glance | 31,279 | 14,372 | −54% |
| Manila | 135,162 | 18,285 | −86% |
| Neutron | 127,623 | 25,947 | −80% |
| Octavia (OVN) | 5,778 | 9,042 | +56% |
| Neutron-FWaaS | 8,085 | 9,643 | +19% |
| Neutron-VPNaaS | 6,449 | 11,190 | +74% |
| OVN-BGP-Agent | 8,448 | 5,074 | −40% |
| Keystone | 50,584 | 21,015 | −58% |
| Barbican | 18,688 | 12,851 | −31% |
| Designate | 23,671 | 15,367 | −35% |
| CloudKitty | 15,020 | 12,042 | −20% |
| EC2-API | 11,570 | 16,272 | +41% |
| Skyline | 18,723 | 8,590 | −54% |
| ok (CLI) | 88,122 | 59,156 | −33% |
| Total | 1,008,042 | 310,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.
| OpenStack (Python) | OpenKeel (Go) | |
|---|---|---|
| Dateien | oslo.config-INI, dazu api-paste.ini, rootwrap.conf und seine Filter, logging.conf, Policy | Eine config.yaml pro Prozess, aus einer ConfigMap gemountet |
| Secrets | Passwörter in connection und transport_url | *_file-Felder werden aus gemounteten Secrets gelesen, nie im YAML |
| Prozess | bind_host, workers, log_file, use_syslog, debug | Von Kubernetes übernommen; ein einziges default.log_level |
| Treiber | Optionen aller ausgelieferten Treiber (libvirt, VMware, Arrays, ML2…) | Nur die Optionen der gewählten Bausteine (KubeVirt, CSI, OVN) |
| Validierung | Eine separate Prüfung mit dem Werkzeug oslo-config-validator | Strikte Dekodierung: Bei einem unbekannten Schlüssel oder einem Wert außerhalb des zulässigen Bereichs verweigert der Prozess den Start |
| Änderung | Dateien auf jedem Host bearbeiten, neu starten | Neuer 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.
| Modul | Beibehalten | Entfernt |
|---|---|---|
| Placement | 7 | 101 |
| Nova | 122 | 1,015 |
| Zun | 63 | 300 |
| Masakari | 35 | 235 |
| Cinder | 49 | 1,411 |
| Glance | 66 | 472 |
| Manila | 82 | 905 |
| Neutron | 82 | 443 |
| Keystone | 100 | 313 |
| Barbican | 72 | 200 |
| Designate | 84 | 300 |
| CloudKitty | 50 | 271 |
| EC2-API | 16 | 151 |
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).
Anmeldung an der Konsole über einen OIDC-Identitätsanbieter: Föderation, SSO, mit JWKS validierte Tokens.
Datenbankpasswörter, RabbitMQ-Konten und Dienstschlüssel werden als rotierende Komponenten verwaltet und lassen sich ohne manuellen Aufwand erneuern.
EC2-Zugangsdaten (Access/Secret) in der Konsole erstellen und verwalten, um auf S3-Speicher zuzugreifen.