OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent

Deployment

okadm: deployment plug and play

Un cluster OpenKeel di produzione o di laboratorio con un solo comando.

Iniziare con un laboratorio

Se non è configurato alcun cluster, okadm propone di creare un cluster kind. Con --ingress, la console Skyline è servita su skyline.127.0.0.1.nip.io. Con --demo, crea anche il dominio e il progetto demo, pronti da esplorare: una rete e il suo router, una VM dietro un load balancer, un container, IP flottanti e, se CloudKitty è installato, dati tariffati di esempio.

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

ok e okadm: due comandi, due compiti

ok: il client OpenStack

  • I comandi di python-openstackclient 10.3.1 e dei suoi plugin
  • Stessi argomenti, formati di output, messaggi di errore e codici di uscita
  • Legge clouds.yaml, OS_* e --os-* come l'originale
export OS_CLOUD=openkeel
ok server list
ok loadbalancer create ...

okadm: il ciclo di vita

  • plan, install, upgrade, status, uninstall
  • client-go e SDK Helm integrati: non servono né kubectl né helm
  • Manifest delle release integrato, aggiornamento componente per componente
okadm plan --mode lab
okadm install --mode lab \
  --create-kind --ingress --demo

okadm install: i parametri

Le opzioni di okadm install e il loro ruolo. okadm upgrade accetta le stesse per ciò che fa (versione, componenti, valori, --grafana, --ingress); il cluster si sceglie come fa kubectl (--kubeconfig, $KUBECONFIG, --context, account in-cluster).

ParametroPredefinitoRuolo
--modeproductionproduction (3 nodi o più, etichette di ruolo, tre repliche, autoscaling) o lab (un nodo o più, una replica, volumi piccoli, backend sostitutivi)
--versionl'ultima del manifestVersione di OpenKeel da installare (okadm versions le elenca)
--componentstutti tranne gli opzionaliComponenti da installare, con le dipendenze aggiunte (nova porta Keystone, Placement, Glance, Neutron, Cinder); opzionali: Ironic, ovn-bgp-agent, CloudKitty, Magnum e, in produzione, Designate
--no-configurator—Esclude openkeel-configurator, altrimenti installato con OpenKeel in entrambe le modalità
--domainlab: openkeel.example.comDominio DNS pubblico delle API e della console; obbligatorio in produzione
--storage-classproduzione: longhorn; lab: quella predefinita del clusterStorageClass a blocchi dei database e dei volumi
-f, --values—File di valori, ripetibile (struttura del chart ombrello, una sezione per componente): prevale su tutti i valori predefiniti
--create-kind—Lab senza cluster: crea il cluster kind openkeel senza chiedere (--kind-name per rinominarlo)
--install-prerequisitesattivo quando okadm crea il cluster, e in produzioneInstalla gli operatori che mancano al cluster; =false si limita a verificarli
--ingress—Pubblica le API e la console Skyline: in lab, Traefik su 127.0.0.1:80/443 e *.127.0.0.1.nip.io (--ingress-http-port, --ingress-https-port, --ingress-listen-address); in produzione, l'IngressClass del cluster (--ingress-class), con Traefik installato se non ce n'è nessuna
--grafana—Stack di osservabilità: Prometheus Operator, Loki, Alloy, Grafana e le dashboard OpenKeel; mantenuto dalle esecuzioni successive
--ceph-s3—Rook, un cluster Ceph e il suo gateway RGW (API S3 e Swift) autenticati da Keystone
--demo—Crea il dominio e il progetto demo con una VM, un load balancer e un container (sotto); --demo-external-network (predefinito public) indica la rete del suo router e dei suoi IP flottanti
--no-default-flavors, --no-default-share-type—Niente flavor da m1.tiny a m1.xlarge né tipo di share Manila default
--no-base-image, --no-public-network—Lab: niente immagine Alpine in Glance né rete esterna condivisa public (203.0.113.0/24)
--timeout15mQuanto può attendere al massimo ogni passo
--dry-run—Mostra i passi e genera ogni chart, senza cambiare nulla
--progressautolive (il passo in corso ridisegnato con il suo stato) o plain (una riga ogni 30 s, per la CI)
--chartil chart integrato in okadmChart ombrello locale, per provare una modifica di chart senza ricompilare okadm

okadm plan esegue gli stessi controlli senza scrivere nulla; okadm status, okadm access (URL, account, port-forward), okadm upgrade e okadm uninstall seguono l'installazione.

okadm install: le fasi

Ogni passaggio è idempotente: rieseguire okadm install non cambia nulla se tutto è già a posto, e riprende un'installazione interrotta.

  1. 1

    okadm plan

    Verifica la versione di Kubernetes, i nodi, gli operator e la StorageClass; mostra il comando che risolve ogni lacuna

  2. 2

    cluster kind

    In laboratorio senza cluster: creato tramite la libreria kind, porte 80 e 443 con --ingress

  3. 3

    Operator

    Installa i prerequisiti mancanti, attende i CRD e i Deployment

  4. 4

    Chart Helm

    Umbrella chart integrato e suddiviso: prima openkeel-infra, poi una release per componente

  5. 5

    Dati

    MariaDB Galera in TLS, RabbitMQ e vhost; database, account e secret per componente; la CA interna e i certificati

  6. 6

    Componenti

    release openkeel-* nell'ordine delle dipendenze, migrazioni di schema

  7. 7

    Flavor e immagine

    da m1.tiny a m1.xlarge; immagine cloud-init Alpine 3.24 in Glance

  8. 8

    Accesso

    URL della console Skyline, Keystone, account admin, clouds.yaml esportato

Cosa costruisce okadm, in produzione e in lab

I passi automatizzati di okadm install, in ordine. Ognuno attende ciò che crea (CRD Established, Deployment Available, release Helm e i loro Job di migrazione) ed è unchanged quando il cluster è già conforme.

PassoProduzioneLaboratorio
ClusterIl cluster esistente: 3 nodi Ready o più, etichette di ruolo rafforzate (control plane, compute, container, rete, storage), zone verificateCreato con la libreria kind se non ce n'è uno (--create-kind): un nodo, kindnet, local-path; con --ingress, le porte 80 e 443 inoltrate; le immagini OpenKeel del motore di container locale caricate nel nodo
OperatorInstallati se mancano: cert-manager, operatori MariaDB e RabbitMQ, KubeVirt e CDI (senza emulazione), metrics-server (certificati dei kubelet verificati), Traefik dietro un LoadBalancer quando nessuna IngressClass è utilizzabileIdem, più PowerDNS ed ExternalDNS; KubeVirt emula senza /dev/kvm; metrics-server con --kubelet-insecure-tls; Traefik su hostPort
Namespace, Multus, CRDNamespace openkeel (Pod Security baseline imposto, restricted come avviso), plugin Multus thick, CRD OpenKeelTenant e OpenKeelCustomerIdem, più l'attachment segnaposto openkeel-ovn (il lab non ha Kube-OVN)
Osservabilità (--grafana)Prometheus Operator, Loki su S3, Alloy, Grafana, prima dei servizi dati i cui monitor hanno bisogno delle loro CRDLo stesso stack con una replica ciascuno
Servizi datiopenkeel-infra: MariaDB Galera e RabbitMQ in TLS (dimensioni dei chart, 3 repliche), un database, account e secret per componente, la CA interna; l'operatore di topologia di RabbitMQ configurato per fidarsene; ogni oggetto atteso fino a ReadyUna replica, MariaDB 5 GiB, RabbitMQ 2 GiB; le correzioni di NetworkPolicy del lab per kindnet
Integrazione con la piattaforma—StorageProfile di CDI per local-path, CA del proxy di upload di CDI per Glance, database OVN Northbound e Southbound (ovn-central) per Neutron
ComponentiUna release Helm per componente, in ordine di dipendenza, valori predefiniti dei chart (3 repliche, autoscaling), posizionamento sui nodi tramite etichette di ruolo; openkeel-configuratorOgni replica a 1, niente autoscaling, volumi ReadWriteOnce di al massimo 5 GiB, backend sostitutivi (driver dummy di Manila, Zun su runc senza Kata, Nova emulato)
Contenuto del catalogoFlavor da m1.tiny a m1.xlarge; tipo di share Manila defaultIdem, più l'immagine Alpine 3.24.3 cloud-init (verificata con SHA-512) e la rete esterna condivisa public (203.0.113.0/24)
Object storage (--ceph-s3)Rook, Ceph e RGW (S3 e Swift) autenticati da Keystone: 3 monitor, pool replicati 3 volte su host diversi, 2 gatewayLo stesso con un monitor, una replica e un gateway, l'OSD su un dispositivo loop del nodo kind
Pubblicazione (--ingress)Ingress delle API sull'IngressClass del cluster, <servizio>.<dominio>Traefik, skyline.127.0.0.1.nip.io e le API su *.127.0.0.1.nip.io
Demo (--demo)Il progetto demo sulla rete esterna indicata da --demo-external-networkIl progetto demo su public; con CloudKitty, dati tariffati di esempio
RiepilogoOgni passo eseguito, invariato o fallito con la sua causa; obiettivo, modalità e componenti registrati nella ConfigMap openkeel-okadm-state; un'esecuzione interrotta riprende da dove si era fermataIdem

Operator e prerequisiti

Installati da okadm in laboratorio; in produzione, okadm plan li verifica e mostra il comando per la versione testata.

  • cert-managerv1.21.3
  • Operator MariaDB26.10.2
  • Operator RabbitMQ Clusterv2.23.2
  • Operator 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

Produzione: verificata da okadm plan

  • Kube-OVN ≥ 1.16
  • Longhorn (CSI a blocchi e RWX)
  • Medik8s ≥ 0.12
  • Rook-Ceph per S3 e Swift
  • KubeVirt ≥ 1.9, CDI ≥ 1.66
  • Operatori MariaDB e RabbitMQ
  • cert-manager ≥ 1.16 (PKI interna)

Dopo l'installazione: pronto per i test

Flavor creati per impostazione predefinita (hw_rng:allowed e resources:DISK_GB=0, i dischi root sono PVC) e un'immagine cloud-init Alpine 3.24.3 registrata in Glance, verificata con SHA-512.

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

Console: skyline.127.0.0.1.nip.io con --ingress, altrimenti kubectl port-forward svc/openkeel-skyline-api 9998. Account admin, progetto admin, dominio Default; password nel secret openkeel-keystone-admin.

La modalità demo: okadm install --demo

--demo conclude l'installazione con un progetto completo da esplorare in Skyline e con le CLI. Richiede Keystone, Glance, Cinder, Neutron, ovn-octavia-provider, Nova e Zun; ciò che esiste già con il suo nome viene mantenuto, quindi rieseguirlo completa una demo interrotta.

RisorsaCosa crea okadm
Dominio demoTramite l'OpenKeelCustomer demo (riconciliato da keystone-customers): il dominio, il suo manager e il progetto
Utente demoManager del dominio e del progetto, con la password dell'utente admin (secret openkeel-keystone-admin); admin riceve il ruolo admin nel progetto
Progetto demoIl suo gruppo di sicurezza predefinito apre ICMP, SSH e HTTP
Retedemo-net e demo-subnet (192.168.0.0/24, DHCP), router demo-router verso la rete esterna
VM demo-vmFlavor m1.tiny, l'immagine base Alpine, un volume dati da 20 GB demo-vm-data, l'utente alpine (password alpine) creato da cloud-init per la console e SSH, un IP flottante
Load balancer demo-lbLoad balancer OVN, TCP 80, la VM come membro, un IP flottante sul suo VIP
Container nginxContainer Zun con un volume da 1 GB su /data
Dati tariffati (con CloudKitty)Un frame al giorno dal primo giorno del mese scorso a ieri, una VM eliminata il mese scorso, IP flottanti, l'immagine: la pagina FinOps / GreenOps di Skyline mostra entrambi i mesi; poi il progetto viene tariffato ogni ora

In un lab, gli IP flottanti vengono da TEST-NET-3 (203.0.113.0/24), indirizzi di documentazione mai instradati, e l'OVN del lab non ha piano dati: la VM si avvia (emulata) e la sua console funziona, ma nulla può raggiungerla via rete.