Multi-Cluster
Cluster Concept
Each cluster and layer combination gets:
app-of-apps/values-{clusterName}-{layerName}.yaml- enabler file that controls which tools are enabled (lives in the client repo)values/{cluster}/- cluster-specific configuration overrides
All clusters share the same charts in charts/ and the same external chart references in app-of-apps/values-base.yaml.
Scenarios
Single Cluster (e.g. Local Development)
For local development with minikube, KIND, k3d, etc. or any single cluster setup, all platform services and applications run in one cluster.
app-of-apps/
values-base.yaml # app definitions (all disabled by default)
values-dev-platform.yaml # enables platform tools for dev cluster
values-dev-webshop.yaml # enables developer applications for dev cluster
values/
defaults/platform/ # shared defaults for all clusters
dev/platform/ # dev cluster tool overrides
dev/applications/ # dev cluster application overrides
Platform + Application Clusters
A typical production setup separates platform services from application workloads:
- Shared cluster - hosts shared tools (ArgoCD, Grafana, Keycloak, etc.)
- Application clusters - host business applications (dev, test, prod)
app-of-apps/
values-base.yaml # app definitions (all disabled by default)
values-shared-platform.yaml # enables tools on shared cluster
values-dev-platform.yaml # enables apps in dev
values-test-platform.yaml # enables apps in test
values-prod-platform.yaml # enables apps in prod
values/
defaults/platform/ # shared defaults
shared/platform/ # shared cluster config
dev/platform/ # dev cluster config
test/platform/ # test cluster config
prod/platform/ # prod cluster config
Cluster Naming Convention
Cluster names follow the pattern: [environment]-[type]-[provider]-[region]
Examples: prod-app-aws-frankfurt, dev-shared-onprem-one, acc-app-gcp-groningen
Deploying All Clusters
All clusters and layers are declared in kuberise.yaml. A single kr up handles init and deploy for every cluster in parallel:
client:
repoURL: https://github.com/org/client-webshop.git
kuberise:
repoURL: https://github.com/kuberise/kuberise.io.git
targetRevision: 0.4.0
clusters:
shared:
context: k3d-shared
domain: shared.kuberise.dev
layers:
- name: platform
repoURL: kuberise
dev:
context: k3d-dev
domain: dev.kuberise.dev
layers:
- name: platform
repoURL: kuberise
- name: webshop
# From the client repo root
kr up
To target a single cluster: kr up --cluster dev. To deploy without re-running init: kr deploy.
Multiple layers can be deployed to the same cluster by listing them under layers:. Each layer gets its own app-of-apps ArgoCD Application. The enabler file naming convention is values-{clusterName}-{layerName}.yaml.