Before and after
apiVersion: apps/v1
kind: Deployment
metadata:
name: shop-web
namespace: shop
spec:
replicas: 3
selector: { matchLabels: { app: shop-web } }
template:
metadata: { labels: { app: shop-web } }
spec:
containers:
- name: web
image: registry.k8s.io/e2e-test-images/agnhost:2.47
ports: [{ containerPort: 8080 }]
---
apiVersion: v1
kind: Service
metadata:
name: shop-web
namespace: shop
spec:
selector: { app: shop-web }
ports: [{ port: 80, targetPort: 8080 }]
---
apiVersion: networking.k8s.io/v1
The app's five objects, as its team wrote them.
Taken in the helm-catalog organization on 2026-10-26, showing the shop-web base with its dev and prod variants, and the label and five replicas prod sets.
Each variant holds 6 Units in ConfigHub: the app's 5 objects and its namespace.
- ConfigHub lists what the app needs from a platform: an ingress controller, cert-manager and a Prometheus operator.
- The platform check confirms shop-platform provides all three, and warns about the one thing it cannot see, the letsencrypt ClusterIssuer.
- Dev and prod are variants of one base, and prod's changes are listed in one place.
What you work out today, and what happens here instead
| Today | Here instead |
|---|---|
| The Ingress names the nginx class, and nothing in the files says the cluster must run an ingress controller. | cub app check lists an ingress controller as a need, and the platform check confirms shop-platform carries one. |
| The Certificate needs cert-manager, and a ClusterIssuer called letsencrypt that none of these files creates. | cub app check lists cert-manager, and the platform check warns that ClusterIssuer/letsencrypt must already exist on the cluster. |
| The ServiceMonitor only works if the Prometheus operator's CRDs are installed. | cub app check lists a Prometheus operator, and the platform check finds kube-prometheus-stack in shop-platform. |
| The namespace shop must already exist. | Both checks name it, before anything is applied. |
ConfigHub keeps configuration as plain objects, with a history of every change. A base holds what every environment shares, and a variant is one environment's copy that stays linked to its base and lists what it changes.
Show me the details (for experienced users)