OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Déploiement

okadm : déployer en plug and play

Un cluster OpenKeel de production ou de lab en une commande.

Démarrer en lab

Sans cluster configuré, okadm propose de créer un cluster kind. Avec --ingress, la console Skyline est servie sur skyline.127.0.0.1.nip.io. Avec --demo, il crée aussi le domaine et le projet demo, prêts à explorer : un réseau et son routeur, une VM derrière un load balancer, un conteneur, des IP flottantes, et des données valorisées d'exemple quand CloudKitty est installé.

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

ok et okadm : deux commandes, deux métiers

ok : le client OpenStack

  • Commandes de python-openstackclient 10.3.1 et de ses plugins
  • Mêmes arguments, formats de sortie, messages d'erreur et codes retour
  • Lit clouds.yaml, OS_* et --os-* comme l'original
export OS_CLOUD=openkeel
ok server list
ok loadbalancer create ...

okadm : le cycle de vie

  • plan, install, upgrade, status, uninstall
  • client-go et SDK Helm intégrés : ni kubectl ni helm requis
  • Manifeste de release embarqué, upgrade composant par composant
okadm plan --mode lab
okadm install --mode lab \
  --create-kind --ingress --demo

okadm install : les paramètres

Les options d'okadm install et leur rôle. okadm upgrade prend les mêmes pour ce qu'il fait (version, composants, valeurs, --grafana, --ingress) ; le cluster est choisi comme le fait kubectl (--kubeconfig, $KUBECONFIG, --context, compte in-cluster).

ParamètrePar défautRôle
--modeproductionproduction (3 nœuds ou plus, labels de rôle, trois répliques, autoscaling) ou lab (un nœud ou plus, une réplique, petits volumes, backends de repli)
--versionla dernière du manifesteVersion d'OpenKeel à installer (okadm versions les liste)
--componentstous sauf les optionnelsComposants à installer, leurs dépendances ajoutées (nova amène Keystone, Placement, Glance, Neutron, Cinder) ; optionnels : Ironic, ovn-bgp-agent, CloudKitty, Magnum, et Designate en production
--no-configurator—Écarte openkeel-configurator, sinon installé avec OpenKeel dans les deux modes
--domainlab : openkeel.example.comDomaine DNS public des API et de la console ; obligatoire en production
--storage-classproduction : longhorn ; lab : celle par défaut du clusterStorageClass bloc des bases de données et des volumes
-f, --values—Fichier de valeurs, répétable (structure du chart parapluie, une section par composant) : l'emporte sur toutes les valeurs par défaut
--create-kind—Lab sans cluster : crée le cluster kind openkeel sans demander (--kind-name pour le renommer)
--install-prerequisitesactif quand okadm crée le cluster, et en productionInstalle les opérateurs qui manquent au cluster ; =false se contente de les vérifier
--ingress—Publie les API et la console Skyline : en lab, Traefik sur 127.0.0.1:80/443 et *.127.0.0.1.nip.io (--ingress-http-port, --ingress-https-port, --ingress-listen-address) ; en production, l'IngressClass du cluster (--ingress-class), Traefik installé s'il n'y en a pas
--grafana—Pile d'observabilité : Prometheus Operator, Loki, Alloy, Grafana et les tableaux de bord OpenKeel ; conservée par les exécutions suivantes
--ceph-s3—Rook, un cluster Ceph et sa passerelle RGW (API S3 et Swift) authentifiés par Keystone
--demo—Crée le domaine et le projet demo avec une VM, un load balancer et un conteneur (ci-dessous) ; --demo-external-network (par défaut public) désigne le réseau de son routeur et de ses IP flottantes
--no-default-flavors, --no-default-share-type—Ne pas créer les gabarits m1.tiny à m1.xlarge ni le type de partage Manila default
--no-base-image, --no-public-network—Lab : ne pas créer l'image Alpine dans Glance ni le réseau externe partagé public (203.0.113.0/24)
--timeout15mDurée d'attente maximale de chaque étape
--dry-run—Affiche les étapes et rend chaque chart, sans rien changer
--progressautolive (l'étape en cours redessinée avec son état) ou plain (une ligne toutes les 30 s, pour la CI)
--chartle chart intégré à okadmChart parapluie local, pour tester une modification de chart sans recompiler okadm

okadm plan fait les mêmes vérifications sans rien écrire ; okadm status, okadm access (URL, comptes, port-forwards), okadm upgrade et okadm uninstall suivent l'installation.

okadm install : les étapes

Chaque étape est idempotente : relancer okadm install ne change rien si tout est en place et reprend une installation interrompue.

  1. 1

    okadm plan

    Vérifie version Kubernetes, nœuds, opérateurs, StorageClass ; donne la commande de correction de chaque écart

  2. 2

    Cluster kind

    En lab sans cluster : créé via la bibliothèque kind, ports 80 et 443 avec --ingress

  3. 3

    Opérateurs

    Installe les prérequis manquants, attend CRD et Deployments

  4. 4

    Charts Helm

    Chart parapluie embarqué, découpé : openkeel-infra puis une release par composant

  5. 5

    Données

    MariaDB Galera en TLS, RabbitMQ et vhost ; base, comptes et secrets par composant ; la CA interne et les certificats

  6. 6

    Composants

    Releases openkeel-* dans l'ordre des dépendances, migrations de schéma

  7. 7

    Flavors et image

    m1.tiny à m1.xlarge ; image Alpine 3.24 cloud-init dans Glance

  8. 8

    Accès

    URL de la console Skyline, Keystone, compte admin, clouds.yaml exporté

Ce qu'okadm construit, en production et en lab

Les étapes automatisées d'okadm install, dans l'ordre. Chacune attend ce qu'elle crée (CRD Established, Deployments Available, releases Helm et leurs Jobs de migration) et est unchanged quand le cluster est déjà conforme.

ÉtapeProductionLab
ClusterLe cluster existant : 3 nœuds Ready ou plus, labels de rôle durcis (control plane, compute, conteneurs, réseau, stockage), zones vérifiéesCréé avec la bibliothèque kind s'il n'y en a pas (--create-kind) : un nœud, kindnet, local-path ; avec --ingress, les ports 80 et 443 redirigés ; les images OpenKeel du moteur de conteneurs local chargées dans le nœud
OpérateursInstallés s'ils manquent : cert-manager, opérateurs MariaDB et RabbitMQ, KubeVirt et CDI (sans émulation), metrics-server (certificats des kubelets vérifiés), Traefik derrière un LoadBalancer quand aucune IngressClass n'est utilisableIdem, plus PowerDNS et ExternalDNS ; KubeVirt émule sans /dev/kvm ; metrics-server avec --kubelet-insecure-tls ; Traefik sur des hostPorts
Namespace, Multus, CRDNamespace openkeel (Pod Security baseline imposé, restricted en avertissement), plugin Multus thick, CRD OpenKeelTenant et OpenKeelCustomerIdem, plus l'attachement factice openkeel-ovn (le lab n'a pas Kube-OVN)
Observabilité (--grafana)Prometheus Operator, Loki sur S3, Alloy, Grafana, avant les services de données dont les moniteurs ont besoin de leurs CRDLa même pile avec une réplique chacun
Services de donnéesopenkeel-infra : MariaDB Galera et RabbitMQ en TLS (tailles des charts, 3 répliques), une base, des comptes et des secrets par composant, la CA interne ; l'opérateur de topologie RabbitMQ configuré pour lui faire confiance ; chaque objet attendu ReadyUne réplique, MariaDB 5 Gio, RabbitMQ 2 Gio ; les correctifs de NetworkPolicy du lab pour kindnet
Raccords de plateforme—StorageProfile CDI pour local-path, CA du proxy d'upload CDI pour Glance, bases OVN Northbound et Southbound (ovn-central) pour Neutron
ComposantsUne release Helm par composant, dans l'ordre des dépendances, valeurs par défaut des charts (3 répliques, autoscaling), placement sur les nœuds par labels de rôle ; openkeel-configuratorChaque réplique à 1, pas d'autoscaling, volumes ReadWriteOnce de 5 Gio au plus, backends de repli (pilote dummy de Manila, Zun sur runc sans Kata, Nova émulé)
Contenu du catalogueGabarits m1.tiny à m1.xlarge ; type de partage Manila defaultIdem, plus l'image Alpine 3.24.3 cloud-init (vérifiée en SHA-512) et le réseau externe partagé public (203.0.113.0/24)
Stockage objet (--ceph-s3)Rook, Ceph et RGW (S3 et Swift) authentifiés par Keystone : 3 moniteurs, pools répliqués 3 fois sur des hôtes distincts, 2 passerellesLa même chose avec un moniteur, une réplique et une passerelle, l'OSD sur un périphérique loop du nœud kind
Publication (--ingress)Ingresses des API sur l'IngressClass du cluster, <service>.<domaine>Traefik, skyline.127.0.0.1.nip.io et les API sur *.127.0.0.1.nip.io
Démo (--demo)Le projet démo sur le réseau externe indiqué par --demo-external-networkLe projet démo sur public ; avec CloudKitty, des données valorisées d'exemple
BilanChaque étape faite, inchangée ou en échec avec sa cause ; cible, mode et composants enregistrés dans la ConfigMap openkeel-okadm-state ; une exécution interrompue reprend où elle s'est arrêtéeIdem

Opérateurs et prérequis

Installés par okadm en lab ; en production, okadm plan les vérifie et donne la commande de la version testée.

  • cert-managerv1.21.3
  • Opérateur MariaDB26.10.2
  • Opérateur RabbitMQ clusterv2.23.2
  • Opérateur 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

Production : vérifiés par okadm plan

  • Kube-OVN ≥ 1.16
  • Longhorn (CSI bloc et RWX)
  • Medik8s ≥ 0.12
  • Rook-Ceph pour S3 et Swift
  • KubeVirt ≥ 1.9, CDI ≥ 1.66
  • Opérateurs MariaDB et RabbitMQ
  • cert-manager ≥ 1.16 (PKI interne)

Après l'installation : prêt à tester

Flavors créés par défaut (hw_rng:allowed et resources:DISK_GB=0, les disques racine sont des PVC) et image Alpine 3.24.3 cloud-init enregistrée dans Glance, vérifiée par SHA-512.

NomvCPURAMDisque
m1.tiny1512 Mo1 Go
m1.small12 Go20 Go
m1.medium24 Go40 Go
m1.large48 Go80 Go
m1.xlarge816 Go160 Go

Console : skyline.127.0.0.1.nip.io avec --ingress, sinon kubectl port-forward svc/openkeel-skyline-api 9998. Compte admin, projet admin, domaine Default ; mot de passe dans le secret openkeel-keystone-admin.

Le mode démo : okadm install --demo

--demo termine l'installation par un projet complet à explorer dans Skyline et avec les CLI. Il demande Keystone, Glance, Cinder, Neutron, ovn-octavia-provider, Nova et Zun ; ce qui existe déjà sous son nom est gardé, si bien qu'une nouvelle exécution complète une démo interrompue.

RessourceCe qu'okadm crée
Domaine demoPar l'OpenKeelCustomer demo (réconcilié par keystone-customers) : le domaine, son manager et le projet
Utilisateur demoManager du domaine et du projet, avec le mot de passe de l'utilisateur admin (secret openkeel-keystone-admin) ; admin reçoit le rôle admin dans le projet
Projet demoSon groupe de sécurité par défaut ouvre ICMP, SSH et HTTP
Réseaudemo-net et demo-subnet (192.168.0.0/24, DHCP), routeur demo-router vers le réseau externe
VM demo-vmGabarit m1.tiny, l'image de base Alpine, un volume de données de 20 Go demo-vm-data, l'utilisateur alpine (mot de passe alpine) créé par cloud-init pour la console et SSH, une IP flottante
Load balancer demo-lbLoad balancer OVN, TCP 80, la VM comme membre, une IP flottante sur sa VIP
Conteneur nginxConteneur Zun avec un volume de 1 Go sur /data
Données valorisées (avec CloudKitty)Une trame par jour du premier jour du mois dernier à hier, une VM supprimée le mois dernier, des IP flottantes, l'image : la page FinOps / GreenOps de Skyline montre les deux mois ; puis le projet est valorisé chaque heure

En lab, les IP flottantes viennent de TEST-NET-3 (203.0.113.0/24), des adresses de documentation jamais routées, et l'OVN du lab n'a pas de plan de données : la VM démarre (émulée) et sa console fonctionne, mais rien ne peut la joindre par le réseau.