OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

El proyecto

Mejoras

Más allá de la isofuncionalidad: herramientas, seguridad y facilidad de uso.

Go: el lenguaje Cloud Native

El lenguaje Cloud Native

Kubernetes, etcd, containerd, Helm, Prometheus, KubeVirt: el mismo lenguaje que la plataforma

Ecosistema integrado

client-go, SDK de Helm, OVSDB, Prometheus, OIDC: bibliotecas nativas, sin pasarelas

Tipado y compilado

Tipado fuerte, errores detectados en compilación, código más rápido que Python

Compilaciones rápidas

Un binario estático por servicio, compilación rápida, multiarquitectura

Contenedores mínimos

Un ejecutable, rootless, sin shell ni código fuente, sobre distroless en lugar de Ubuntu

Ligero en ejecución

Sin intérprete ni eventlet (tiempo de arranque y memoria no medidos en el espacio de trabajo)

Herramientas: automatizar, desplegar, pilotar

Tres herramientas que OpenStack no ofrece de esta forma, escritas en Go como los servicios y entregadas con cada versión de OpenKeel.

ok

La CLI de OpenStack, en Go

ok es el comando openstack reescrito en Go: un único binario estático, sin Python, virtualenv ni plugins que instalar.

  • Los 1.325 comandos de python-openstackclient 10.3.1 y sus plugins, cada uno verificado frente a la CLI de Python por reproducción diferencial
  • Mismos argumentos, formatos de salida, mensajes de error y códigos de salida: los scripts existentes siguen funcionando
  • Lee clouds.yaml, OS_* y --os-* como el original; binarios para Linux, macOS y Windows, y una imagen distroless
export OS_CLOUD=openkeel
ok server list -f json
Más información
okadm

Despliegue plug and play, en lab o en producción

okadm instala OpenKeel en un clúster de Kubernetes con un comando por etapa del ciclo de vida, en modo lab o producción.

  • Lab: sin clúster, crea un clúster kind, instala los operadores de lab y una réplica de cada servicio; --ingress añade el punto de entrada público
  • Producción: okadm plan comprueba los requisitos previos (versión, roles de los nodos, operadores, StorageClass, dominio) e indica la corrección de cada uno; tres réplicas
  • Instalación idempotente que se reanuda donde se detuvo, actualización componente a componente, estado, desinstalación; client-go y el SDK de Helm integrados
okadm plan --mode production
okadm install --mode lab \
  --create-kind --ingress --demo
Más información
Configurator

Pilotar el despliegue de forma gráfica

El Configurator es una consola web, instalada por defecto por okadm, para preparar el despliegue de los módulos de OpenKeel y seguirlo visualmente.

  • Roles de los nodos (plano de control, cómputo, red, almacenamiento, contenedores, aprovisionamiento) y ubicación de cada componente, arrastrando y soltando en una vista de topología por zona de disponibilidad
  • Parámetros de cada servicio: activado, réplicas, autoescalado, recursos, YAML libre; comprobaciones de quórum, antiafinidad y mínimos por rol
  • Seguimiento visual: la distribución de los componentes en los nodos, el estado de los pods (listos, reinicios) y los registros de cada servicio, combinados y con búsqueda
  • Genera los valores de okadm install -f y las etiquetas de los nodos, o etiqueta él mismo los nodos
Ver la demostración

Menos código, las mismas garantías

  • 1,008 kLíneas de Python en los 19 módulos originales
  • 310 kLíneas de Go en los módulos de OpenKeel
  • −69%código, sin contar las pruebas
MóduloPythonGoCambio
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%
API EC211,57016,272+41%
Skyline18,7238,590−54%
ok (CLI)88,12259,156−33%
Total1,008,042310,330−69%

Líneas no vacías y sin comentarios, sin contar las pruebas, contadas al generar el sitio. En el lado de Python solo se cuenta el paquete del servicio: oslo, neutron-lib, keystonemiddleware y os-brick no se cuentan, mientras que sus equivalentes están dentro de cada módulo Go. Los drivers y agentes sustituidos por Kubernetes desaparecen; los pequeños módulos antes injertados en Neutron o Nova crecen, porque se convierten en servicios independientes.

Configuración: de oslo.config a YAML

OpenStack (Python)OpenKeel (Go)
ArchivosINI de oslo.config, más api-paste.ini, rootwrap.conf y sus filtros, logging.conf, policyUn config.yaml por proceso, montado desde un ConfigMap
SecretosContraseñas dentro de connection y transport_urlCampos *_file leídos de Secrets montados, nunca en el YAML
Procesobind_host, workers, log_file, use_syslog, debugGestionado por Kubernetes; un único default.log_level
DriversOpciones de todos los drivers incluidos (libvirt, VMware, cabinas, ML2…)Solo las opciones de los componentes elegidos (KubeVirt, CSI, OVN)
ValidaciónUna comprobación aparte con la herramienta oslo-config-validatorDecodificación estricta: ante una clave desconocida o un valor fuera de rango, el proceso se niega a arrancar
CambioEditar los archivos en cada host y reiniciarNuevo hash de ConfigMap, reinicio progresivo; nivel de log mediante SIGHUP

Mismos nombres: grupos, opciones y valores por defecto del original; OPENKEEL_<GROUP>_<OPTION> sobrescribe un valor para un único pod.

Menos opciones: conservar solo lo que importa

MóduloConservadasEliminadas
Placement7101
Nova1221,015
Zun63300
Masakari35235
Cinder491,411
Glance66472
Manila82905
Neutron82443
Keystone100313
Barbican72200
Designate84300
CloudKitty50271
API EC216151
  • 828opciones conservadas de 6,945, en 13 módulos
  • 88%de las opciones de oslo eliminadas

Cifras leídas del archivo config/dropped-options.md de cada módulo; cada opción eliminada figura allí con su motivo. Eliminadas: opciones obsoletas, drivers no incluidos, eventlet y bloqueos de archivo, opciones de proceso asumidas por Kubernetes. Conservadas: todo lo que modifica la API, los datos o los límites (cuotas, ratios de asignación, duración de los tokens, enforce_scope).

Seguridad y facilidad de uso

Skyline-OIDC

Inicio de sesión en la consola mediante un proveedor de identidad OIDC: federación, SSO, tokens validados con JWKS.

Secretos internos rotativos

Contraseñas de bases de datos, cuentas de RabbitMQ y claves de servicio gestionadas como componentes rotativos, renovables sin intervención manual.

Credenciales EC2 en Skyline

Crear y gestionar credenciales EC2 (access / secret) desde la consola para acceder al almacenamiento S3.