Gaps & capacity

How the environments differ, what is missing, and how much headroom is left.

Environment comparison

Differences between columns are where deployments break.

Propertydevstageproddatacenter
Runtimesdiffersdocker + systemd + nginxkubernetes + systemd + nginxkubernetes + systemd + nginxdocker + systemd
Kubernetesv1.28.15
Container runtimecontainerd://2.2.1
vCPUdiffers4288
Memory availablediffers13.7 / 15.6 GB6.6 / 7.8 GB27.9 / 31.3 GB26.5 / 31.3 GB
Disk availablediffers151.4 GB / 192.7 GB76.3 GB / 95.8 GB303.7 GB / 386.4 GB304.3 GB / 386.4 GB
Workloadsdiffers571228
Public hostnamesdiffers32140
Datastores reachablediffers808n/a
Datastores blockeddiffers3113n/a

5 architectural gaps

critical

Datastore connectivity

prod

prod cannot open connections to 3 shared datastore(s) on ogm-datacenter: milvus, mysql-n8n, postgres-n8n.

Why it matters — Any application deployed to prod that needs one of these will fail at startup or on its first query — and it will look like an application bug rather than a firewall rule.

What to do

ogm-datacenter publishes these ports through Docker, so plain 'ufw allow' does not apply. Add this environment's public IP to ALLOWED_SOURCES in the ogm-datacenter repository's scripts/setup-firewall.sh and re-run it, so the rule lands in the DOCKER-USER chain.

warning

Runtime parity

dev, stage, prod

Dev runs applications as plain Docker containers behind nginx, while Stage and Prod both run kubeadm Kubernetes. A deployment that works on Dev exercises none of the Kubernetes path it will hit next.

Why it matters — Anything Kubernetes-specific — manifests, probes, ingress rules, service accounts, image pull secrets, resource limits — is first tested in Stage. Failures that could have been caught locally surface one environment later, on shared infrastructure.

What to do

Install a single-node kubeadm cluster on Dev KVM4 at the same v1.28.x as Stage, or run k3s if the 4 vCPU / 16 GB budget is tight. Dev has 172 GB free and 14.8 GB of available memory, so it has the headroom. The Blueprint designer will then be able to generate identical manifests for all three environments instead of Compose for one and Kubernetes for the others.

warning

Datastore connectivity

dev

dev cannot open connections to 3 shared datastore(s) on ogm-datacenter: milvus, mysql-n8n, postgres-n8n.

Why it matters — Any application deployed to dev that needs one of these will fail at startup or on its first query — and it will look like an application bug rather than a firewall rule.

What to do

ogm-datacenter publishes these ports through Docker, so plain 'ufw allow' does not apply. Add this environment's public IP to ALLOWED_SOURCES in the ogm-datacenter repository's scripts/setup-firewall.sh and re-run it, so the rule lands in the DOCKER-USER chain.

warning

Datastore connectivity

stage

stage cannot open connections to 11 shared datastore(s) on ogm-datacenter: chromadb, elasticsearch, milvus, mongodb, mysql-n8n, neo4j, nfs, postgres-n8n, postgresql, qdrant, redis.

Why it matters — Any application deployed to stage that needs one of these will fail at startup or on its first query — and it will look like an application bug rather than a firewall rule.

What to do

ogm-datacenter publishes these ports through Docker, so plain 'ufw allow' does not apply. Add this environment's public IP to ALLOWED_SOURCES in the ogm-datacenter repository's scripts/setup-firewall.sh and re-run it, so the rule lands in the DOCKER-USER chain.

warning

Single-node cluster

prod

prod runs Kubernetes on a single node, which is both the control plane and the only worker.

Why it matters — There is nowhere to reschedule a workload. Losing the node loses the cluster, and control-plane maintenance is indistinguishable from an outage.

What to do

Add at least one worker node to KVM8's cluster so workloads survive control-plane trouble, and keep etcd backed up to ogm-datacenter.