Multi-Cluster

How Kuberise.io supports multiple clusters and environments.

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.