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

Despliegue

okadm: despliegue plug and play

Un clúster OpenKeel de producción o de laboratorio con un solo comando.

Empezar con un laboratorio

Si no hay ningún clúster configurado, okadm ofrece crear un clúster kind. Con --ingress, la consola Skyline se sirve en skyline.127.0.0.1.nip.io. Con --demo, crea además el dominio y el proyecto demo, listos para explorar: una red y su router, una VM detrás de un balanceador de carga, un contenedor, IP flotantes y, si CloudKitty está instalado, datos tarificados de ejemplo.

okadm plan    --mode lab
okadm install --mode lab --create-kind --ingress --demo
export OS_CLOUD=openkeel
ok server list

ok y okadm: dos comandos, dos funciones

ok: el cliente de OpenStack

  • Los comandos de python-openstackclient 10.3.1 y sus plugins
  • Mismos argumentos, formatos de salida, mensajes de error y códigos de salida
  • Lee clouds.yaml, OS_* y --os-* como el original
export OS_CLOUD=openkeel
ok server list
ok loadbalancer create ...

okadm: el ciclo de vida

  • plan, install, upgrade, status, uninstall
  • client-go y SDK de Helm integrados: no se necesitan ni kubectl ni helm
  • Manifiesto de versiones integrado, actualización componente por componente
okadm plan --mode lab
okadm install --mode lab \
  --create-kind --ingress --demo

okadm install: los parámetros

Las opciones de okadm install y su función. okadm upgrade admite las mismas para lo que hace (versión, componentes, valores, --grafana, --ingress); el clúster se elige como lo hace kubectl (--kubeconfig, $KUBECONFIG, --context, cuenta in-cluster).

ParámetroPor defectoFunción
--modeproductionproduction (3 nodos o más, etiquetas de rol, tres réplicas, autoscaling) o lab (un nodo o más, una réplica, volúmenes pequeños, backends de sustitución)
--versionla última del manifiestoVersión de OpenKeel que instalar (okadm versions las lista)
--componentstodos salvo los opcionalesComponentes que instalar, con sus dependencias añadidas (nova trae Keystone, Placement, Glance, Neutron, Cinder); opcionales: Ironic, ovn-bgp-agent, CloudKitty, Magnum y, en producción, Designate
--no-configurator—Deja fuera openkeel-configurator, instalado si no con OpenKeel en ambos modos
--domainlab: openkeel.example.comDominio DNS público de las API y de la consola; obligatorio en producción
--storage-classproducción: longhorn; lab: la del clúster por defectoStorageClass de bloques de las bases de datos y los volúmenes
-f, --values—Fichero de valores, repetible (estructura del chart paraguas, una sección por componente): prevalece sobre todos los valores por defecto
--create-kind—Lab sin clúster: crea el clúster kind openkeel sin preguntar (--kind-name para renombrarlo)
--install-prerequisitesactivo cuando okadm crea el clúster, y en producciónInstala los operadores que le faltan al clúster; =false solo los comprueba
--ingress—Publica las API y la consola Skyline: en lab, Traefik en 127.0.0.1:80/443 y *.127.0.0.1.nip.io (--ingress-http-port, --ingress-https-port, --ingress-listen-address); en producción, la IngressClass del clúster (--ingress-class), con Traefik instalado si no hay ninguna
--grafana—Pila de observabilidad: Prometheus Operator, Loki, Alloy, Grafana y los paneles de OpenKeel; se mantiene en las ejecuciones siguientes
--ceph-s3—Rook, un clúster Ceph y su pasarela RGW (API S3 y Swift) autenticados por Keystone
--demo—Crea el dominio y el proyecto demo con una VM, un balanceador de carga y un contenedor (abajo); --demo-external-network (por defecto public) indica la red de su router y sus IP flotantes
--no-default-flavors, --no-default-share-type—No crear los flavors m1.tiny a m1.xlarge ni el tipo de share de Manila default
--no-base-image, --no-public-network—Lab: no registrar la imagen Alpine en Glance ni crear la red externa compartida public (203.0.113.0/24)
--timeout15mCuánto puede esperar cada paso como máximo
--dry-run—Muestra los pasos y renderiza cada chart, sin cambiar nada
--progressautolive (el paso en curso redibujado con su estado) o plain (una línea cada 30 s, para CI)
--chartel chart integrado en okadmChart paraguas local, para probar un cambio de chart sin recompilar okadm

okadm plan hace las mismas comprobaciones sin escribir nada; okadm status, okadm access (URL, cuentas, port-forwards), okadm upgrade y okadm uninstall siguen a la instalación.

okadm install: los pasos

Cada paso es idempotente: volver a ejecutar okadm install no cambia nada si todo está en su sitio y reanuda una instalación interrumpida.

  1. 1

    okadm plan

    Comprueba la versión de Kubernetes, los nodos, los operadores y la StorageClass; muestra el comando que corrige cada carencia

  2. 2

    clúster kind

    En laboratorio sin clúster: creado mediante la biblioteca kind, puertos 80 y 443 con --ingress

  3. 3

    Operadores

    Instala los requisitos previos que faltan, espera a los CRD y a los Deployments

  4. 4

    Charts de Helm

    Umbrella chart integrado y dividido: primero openkeel-infra y luego una release por componente

  5. 5

    Datos

    MariaDB Galera en TLS, RabbitMQ y vhost; base, cuentas y secrets por componente; la CA interna y los certificados

  6. 6

    Componentes

    releases openkeel-* en orden de dependencias, migraciones de esquema

  7. 7

    Flavors e imagen

    m1.tiny a m1.xlarge; imagen cloud-init Alpine 3.24 en Glance

  8. 8

    Acceso

    URL de la consola Skyline, Keystone, cuenta de administrador, clouds.yaml exportado

Lo que construye okadm, en producción y en lab

Los pasos automatizados de okadm install, en orden. Cada uno espera a lo que crea (CRD Established, Deployments Available, releases de Helm y sus Jobs de migración) y queda unchanged cuando el clúster ya coincide.

PasoProducciónLaboratorio
ClústerEl clúster existente: 3 nodos Ready o más, etiquetas de rol reforzadas (control plane, compute, contenedores, red, almacenamiento), zonas comprobadasCreado con la biblioteca kind si no hay ninguno (--create-kind): un nodo, kindnet, local-path; con --ingress, los puertos 80 y 443 redirigidos; las imágenes OpenKeel del motor de contenedores local cargadas en el nodo
OperadoresInstalados si faltan: cert-manager, operadores de MariaDB y RabbitMQ, KubeVirt y CDI (sin emulación), metrics-server (certificados de los kubelets verificados), Traefik detrás de un LoadBalancer cuando no hay IngressClass utilizableIgual, más PowerDNS y ExternalDNS; KubeVirt emula sin /dev/kvm; metrics-server con --kubelet-insecure-tls; Traefik en hostPorts
Namespace, Multus, CRDNamespace openkeel (Pod Security baseline impuesto, restricted como aviso), plugin Multus thick, CRD OpenKeelTenant y OpenKeelCustomerIgual, más el adjunto provisional openkeel-ovn (el lab no tiene Kube-OVN)
Observabilidad (--grafana)Prometheus Operator, Loki sobre S3, Alloy, Grafana, antes de los servicios de datos cuyos monitores necesitan sus CRDLa misma pila con una réplica cada uno
Servicios de datosopenkeel-infra: MariaDB Galera y RabbitMQ en TLS (tamaños de los charts, 3 réplicas), una base, cuentas y secrets por componente, la CA interna; el operador de topología de RabbitMQ configurado para confiar en ella; cada objeto esperado hasta ReadyUna réplica, MariaDB 5 GiB, RabbitMQ 2 GiB; las correcciones de NetworkPolicy del lab para kindnet
Integración con la plataforma—StorageProfile de CDI para local-path, CA del proxy de subida de CDI para Glance, bases OVN Northbound y Southbound (ovn-central) para Neutron
ComponentesUna release de Helm por componente, en orden de dependencias, valores por defecto de los charts (3 réplicas, autoscaling), colocación en los nodos por etiquetas de rol; openkeel-configuratorCada réplica a 1, sin autoscaling, volúmenes ReadWriteOnce de 5 GiB como máximo, backends de sustitución (driver dummy de Manila, Zun sobre runc sin Kata, Nova emulado)
Contenido del catálogoFlavors m1.tiny a m1.xlarge; tipo de share de Manila defaultIgual, más la imagen Alpine 3.24.3 cloud-init (comprobada con SHA-512) y la red externa compartida public (203.0.113.0/24)
Almacenamiento de objetos (--ceph-s3)Rook, Ceph y RGW (S3 y Swift) autenticados por Keystone: 3 monitores, pools replicados 3 veces entre hosts, 2 pasarelasLo mismo con un monitor, una réplica y una pasarela, el OSD en un dispositivo loop del nodo kind
Publicación (--ingress)Ingresses de las API en la IngressClass del clúster, <servicio>.<dominio>Traefik, skyline.127.0.0.1.nip.io y las API en *.127.0.0.1.nip.io
Demo (--demo)El proyecto demo en la red externa indicada por --demo-external-networkEl proyecto demo en public; con CloudKitty, datos tarificados de ejemplo
ResumenCada paso hecho, sin cambios o fallido con su causa; objetivo, modo y componentes registrados en la ConfigMap openkeel-okadm-state; una ejecución interrumpida se reanuda donde se detuvoIgual

Operadores y requisitos previos

Instalados por okadm en laboratorio; en producción, okadm plan los comprueba y muestra el comando para la versión probada.

  • cert-managerv1.21.3
  • Operador de MariaDB26.10.2
  • Operador RabbitMQ Clusterv2.23.2
  • Operador Messaging Topologyv1.20.5
  • metrics-serverv0.9.0
  • Multus CNI (thick)v4.3.1
  • KubeVirtv1.9.1
  • CDIv1.66.1
  • Traefik (--ingress)chart 41.7.1

Producción: comprobado por okadm plan

  • Kube-OVN ≥ 1.16
  • Longhorn (CSI de bloque y RWX)
  • Medik8s ≥ 0.12
  • Rook-Ceph para S3 y Swift
  • KubeVirt ≥ 1.9, CDI ≥ 1.66
  • Operadores de MariaDB y RabbitMQ
  • cert-manager ≥ 1.16 (PKI interna)

Después de la instalación: listo para probar

Flavors creados por defecto (hw_rng:allowed y resources:DISK_GB=0, los discos raíz son PVC) y una imagen cloud-init Alpine 3.24.3 registrada en Glance, verificada con SHA-512.

NombrevCPURAMDisco
m1.tiny1512 MB1 GB
m1.small12 GB20 GB
m1.medium24 GB40 GB
m1.large48 GB80 GB
m1.xlarge816 GB160 GB

Consola: skyline.127.0.0.1.nip.io con --ingress; de lo contrario, kubectl port-forward svc/openkeel-skyline-api 9998. Cuenta admin, proyecto admin, dominio Default; contraseña en el secret openkeel-keystone-admin.

El modo demo: okadm install --demo

--demo termina la instalación con un proyecto completo para explorar en Skyline y con las CLI. Necesita Keystone, Glance, Cinder, Neutron, ovn-octavia-provider, Nova y Zun; lo que ya existe con su nombre se conserva, así que volver a ejecutarlo completa una demo interrumpida.

RecursoLo que crea okadm
Dominio demoMediante el OpenKeelCustomer demo (reconciliado por keystone-customers): el dominio, su manager y el proyecto
Usuario demoManager del dominio y del proyecto, con la contraseña del usuario admin (secret openkeel-keystone-admin); admin recibe el rol admin en el proyecto
Proyecto demoSu grupo de seguridad por defecto abre ICMP, SSH y HTTP
Reddemo-net y demo-subnet (192.168.0.0/24, DHCP), router demo-router hacia la red externa
VM demo-vmFlavor m1.tiny, la imagen base Alpine, un volumen de datos de 20 GB demo-vm-data, el usuario alpine (contraseña alpine) creado por cloud-init para la consola y SSH, una IP flotante
Balanceador demo-lbBalanceador OVN, TCP 80, la VM como miembro, una IP flotante en su VIP
Contenedor nginxContenedor Zun con un volumen de 1 GB en /data
Datos tarificados (con CloudKitty)Un frame por día desde el primer día del mes pasado hasta ayer, una VM borrada el mes pasado, IP flotantes, la imagen: la página FinOps / GreenOps de Skyline muestra los dos meses; después el proyecto se tarifica cada hora

En un lab, las IP flotantes salen de TEST-NET-3 (203.0.113.0/24), direcciones de documentación nunca enrutadas, y el OVN del lab no tiene plano de datos: la VM arranca (emulada) y su consola funciona, pero nada puede alcanzarla por la red.