Il linguaggio Cloud Native
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: lo stesso linguaggio della piattaforma
OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent
Il progetto
Oltre l'isofunzionalità: strumenti, sicurezza e facilità d'uso.
Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: lo stesso linguaggio della piattaforma
client-go, SDK Helm, OVSDB, Prometheus, OIDC: librerie native, nessun bridge
Tipizzazione forte, errori rilevati in compilazione, codice più veloce di Python
Un binario statico per servizio, compilazione rapida, multiarchitettura
Un eseguibile, rootless, senza shell né sorgenti, su distroless anziché Ubuntu
Nessun interprete e nessun eventlet (tempo di avvio e memoria non misurati nel workspace)
Tre strumenti che OpenStack non offre in questa forma, scritti in Go come i servizi e forniti con ogni versione di OpenKeel.
ok è il comando openstack riscritto in Go: un unico binario statico, senza Python, virtualenv né plugin da installare.
export OS_CLOUD=openkeel
ok server list -f jsonPer saperne di piùokadm installa OpenKeel su un cluster Kubernetes con un comando per ogni fase del ciclo di vita, in modalità lab o produzione.
okadm plan verifica i prerequisiti (versione, ruoli dei nodi, operatori, StorageClass, dominio) e indica la correzione per ciascuno; tre replicheokadm plan --mode production
okadm install --mode lab \
--create-kind --ingress --demoPer saperne di piùIl Configurator è una console web, installata di default da okadm, per preparare il deployment dei moduli OpenKeel e seguirlo visivamente.
okadm install -f e le etichette dei nodi, oppure etichetta i nodi da sé| Modulo | Python | Go | Modifica |
|---|---|---|---|
| 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% |
| API EC2 | 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% |
Righe non vuote e non di commento, test esclusi, contate alla generazione del sito. Sul lato Python viene contato solo il pacchetto del servizio: oslo, neutron-lib, keystonemiddleware e os-brick no, mentre i loro equivalenti risiedono in ciascun modulo Go. I driver e gli agenti sostituiti da Kubernetes scompaiono; i piccoli moduli un tempo innestati su Neutron o Nova crescono, perché diventano servizi autonomi.
| OpenStack (Python) | OpenKeel (Go) | |
|---|---|---|
| File | INI oslo.config, più api-paste.ini, rootwrap.conf e i suoi filtri, logging.conf, policy | Un config.yaml per processo, montato da una ConfigMap |
| Secret | Password all'interno di connection e transport_url | Campi *_file letti da Secret montati, mai nello YAML |
| Processo | bind_host, workers, log_file, use_syslog, debug | Gestito da Kubernetes; un unico default.log_level |
| Driver | Opzioni di tutti i driver inclusi (libvirt, VMware, storage array, ML2…) | Solo le opzioni dei componenti scelti (KubeVirt, CSI, OVN) |
| Validazione | Un controllo separato con lo strumento oslo-config-validator | Decodifica rigorosa: con una chiave sconosciuta o un valore fuori intervallo, il processo rifiuta di avviarsi |
| Modifica | Modificare i file su ogni host, riavviare | Nuovo hash della ConfigMap, riavvio progressivo; livello di log tramite SIGHUP |
Stessi nomi: gruppi, opzioni e valori predefiniti dell'originale; OPENKEEL_<GROUP>_<OPTION> sovrascrive un valore per un singolo pod.
| Modulo | Mantenute | Rimosse |
|---|---|---|
| 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 |
| API EC2 | 16 | 151 |
Dati letti dal file config/dropped-options.md di ogni modulo; ogni opzione rimossa vi è elencata con la relativa motivazione. Rimosse: opzioni deprecate, driver non inclusi, eventlet e lock su file, opzioni di processo gestite da Kubernetes. Mantenute: tutto ciò che modifica l'API, i dati o i limiti (quote, allocation ratio, durata dei token, enforce_scope).
Accesso alla console tramite un identity provider OIDC: federazione, SSO, token validati con JWKS.
Password dei database, account RabbitMQ e chiavi di servizio gestiti come componenti a rotazione, rinnovabili senza interventi manuali.
Creare e gestire le credenziali EC2 (access / secret) dalla console, per accedere allo storage S3.