| Cluster | The existing cluster: 3 Ready nodes or more, hardened role labels (control plane, compute, containers, network, storage), zones checked | Created with the kind library when there is none (--create-kind): one node, kindnet, local-path; with --ingress, ports 80 and 443 forwarded; the OpenKeel images of the local container engine loaded into the node |
| Operators | Installed when missing: cert-manager, MariaDB and RabbitMQ operators, KubeVirt and CDI (no emulation), metrics-server (kubelet certificates verified), Traefik behind a LoadBalancer when no IngressClass is usable | The same, plus PowerDNS and ExternalDNS; KubeVirt emulates without /dev/kvm; metrics-server with --kubelet-insecure-tls; Traefik on hostPorts |
| Namespace, Multus, CRDs | Namespace openkeel (Pod Security baseline enforced, restricted warned), Multus thick plugin, CRDs OpenKeelTenant and OpenKeelCustomer | The same, plus the openkeel-ovn placeholder attachment (the lab has no Kube-OVN) |
Observability (--grafana) | Prometheus Operator, Loki on S3, Alloy, Grafana, before the data services whose monitors need their CRDs | The same stack with one replica each |
| Data services | openkeel-infra: MariaDB Galera and RabbitMQ in TLS (chart sizes, 3 replicas), a database, accounts and secrets per component, the internal CA; RabbitMQ's topology operator made to trust it; every object waited for Ready | One replica, MariaDB 5 GiB, RabbitMQ 2 GiB; the lab's NetworkPolicy fixes for kindnet |
| Platform glue | — | CDI StorageProfile for local-path, CDI upload proxy CA for Glance, OVN Northbound and Southbound databases (ovn-central) for Neutron |
| Components | One Helm release per component, in dependency order, chart defaults (3 replicas, autoscaling), node placement by role labels; openkeel-configurator | Every replica at 1, no autoscaling, volumes ReadWriteOnce at most 5 GiB, fallback backends (Manila dummy driver, Zun on runc without Kata, Nova emulated) |
| Catalog content | Flavors m1.tiny to m1.xlarge; Manila share type default | The same, plus the Alpine 3.24.3 cloud-init image (checked with SHA-512) and the shared external network public (203.0.113.0/24) |
Object storage (--ceph-s3) | Rook, Ceph and RGW (S3 and Swift) authenticated by Keystone: 3 monitors, pools replicated 3 times across hosts, 2 gateways | The same with one monitor, one replica and one gateway, the OSD on a loop device of the kind node |
Publishing (--ingress) | Ingresses of the APIs on the cluster's IngressClass, <service>.<domain> | Traefik, skyline.127.0.0.1.nip.io and the APIs on *.127.0.0.1.nip.io |
Demo (--demo) | The demo project on the external network given by --demo-external-network | The demo project on public; with CloudKitty, sample rated data |
| Summary | Every step done, unchanged or failed with its cause; target, mode and components recorded in the ConfigMap openkeel-okadm-state; an interrupted run resumes where it stopped | The same |