The Cloud Native language
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: the same language as the platform
OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent
The project
Beyond iso-functionality: tooling, security and ease of use.
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: the same language as the platform
client-go, Helm SDK, OVSDB, Prometheus, OIDC: native libraries, no bridges
Strong typing, errors caught at compile time, faster code than Python
One static binary per service, fast compilation, multi-architecture
One executable, rootless, no shell or sources, on distroless rather than Ubuntu
No interpreter and no eventlet (start-up time and memory not measured in the workspace)
Three tools that OpenStack does not have in this form, written in Go like the services and shipped with every OpenKeel release.
ok is the openstack command rewritten in Go: one static binary, with no Python, virtualenv or plugins to install.
export OS_CLOUD=openkeel
ok server list -f jsonLearn moreokadm installs OpenKeel on a Kubernetes cluster with one command per step of the life cycle, in lab or production mode.
okadm plan checks the prerequisites (version, node roles, operators, StorageClass, domain) and prints the fix for each; three replicasokadm plan --mode production
okadm install --mode lab \
--create-kind --ingress --demoLearn moreThe Configurator is a web console, installed by default by okadm, to prepare a deployment of the OpenKeel modules and follow it visually.
okadm install -f and the node labels, or labels the nodes itself| Module | Python | Go | Change |
|---|---|---|---|
| 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% |
Non-blank, non-comment lines, tests excluded, counted when the site is generated. On the Python side only the service package is counted: oslo, neutron-lib, keystonemiddleware and os-brick are not, while their equivalents live inside each Go module. Drivers and agents replaced by Kubernetes disappear; small modules once grafted onto Neutron or Nova grow, because they become standalone services.
| OpenStack (Python) | OpenKeel (Go) | |
|---|---|---|
| Files | oslo.config INI, plus api-paste.ini, rootwrap.conf and its filters, logging.conf, policy | One config.yaml per process, mounted from a ConfigMap |
| Secrets | Passwords inside connection and transport_url | *_file fields read from mounted Secrets, never in the YAML |
| Process | bind_host, workers, log_file, use_syslog, debug | Handled by Kubernetes; a single default.log_level |
| Drivers | Options of every shipped driver (libvirt, VMware, arrays, ML2…) | Only the options of the chosen building blocks (KubeVirt, CSI, OVN) |
| Validation | A separate check with the oslo-config-validator tool | Strict decoding: an unknown key or an out-of-range value, and the process refuses to start |
| Change | Edit the files on each host, restart | New ConfigMap hash, rolling restart; log level through SIGHUP |
Same names: groups, options and defaults of the original; OPENKEEL_<GROUP>_<OPTION> overrides a value for one pod.
| Module | Kept | Dropped |
|---|---|---|
| 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 |
Counts read from each module's config/dropped-options.md; every dropped option is listed there with its reason. Dropped: deprecated options, drivers not shipped, eventlet and file locks, process options taken over by Kubernetes. Kept: everything that changes the API, the data or the limits (quotas, allocation ratios, token lifetime, enforce_scope).
Console login through an OIDC identity provider: federation, SSO, tokens validated with JWKS.
Database passwords, RabbitMQ accounts and service keys managed as rotating components, renewable without manual work.
Create and manage EC2 credentials (access / secret) from the console, to reach S3 storage.