Skip to main content Skip to content

Deployment spaces

Understand how ZopDay registers a Kubernetes cluster or Linux VM as a deployment space, keeps its status in step with discovery, and restores it after deregistration.

8 min read

A deployment space is a registered Kubernetes cluster (or, for VM deploys, a Linux VM) on a connected cloud account. It is ZopDay’s unit of “where things run”: environments bind to spaces, and deployments ship through them. Anything ZopDay runs on a cluster or VM goes through a space.

ZopDay Infrastructure page in List view: tiles counting resources, clusters, VMs and datastores, filters for provider, type, status and connections, and a table of clusters, VM pools and datastores with region, cost and status

Infrastructure, List view: the clusters and VMs your spaces point at, next to the datastores they connect to, with region, cost, and status.

Before you start

  • A cloud account connected in Settings → Cloud Accounts. See Cloud permissions for what each capability needs.
  • On AWS, cluster registration needs the account connected with ZopDay Provision access. WIF-Assume Role, IAM User (Static Keys) and Temporary Credentials accounts all qualify. See Cluster registration.
  • A role that includes the space:* policies you need (space:view, space:create, space:update, space:delete). See Provisioning overview.

How it works

A space is not the cluster itself. It is ZopDay’s pointer to the cluster, plus the kubeauth permission to talk to it. ZopDay never stores a long-lived kubeconfig; it mints a short-lived one per operation (see Kubeauth).

How spaces get created

Both paths produce the same kind of space.

Space status

There is no timed probe. The Infrastructure board keeps each cluster and VM space’s status in step with the resources ZopDay discovers on your cloud account, using the PATCH /spaces/{id}/status route. Only users with space:update trigger these updates; a read-only viewer never does.

ConditionStatus
The resource is present in discovery (and, for a cluster, passes a live reachability check)active
The resource is missing from two consecutive discovery reads of its own typeinactive

A new space has a 15-minute grace period after registration before it can be marked inactive. ZopDay also skips the check when a discovery read is incomplete, so a partial sync never deactivates spaces in bulk. A VM space reactivates as soon as it reappears in discovery. A cluster must also pass the live reachability check, because being present proves the cluster exists, not that ZopDay can reach it.

Status drives gating in the UI:

  • Inactive spaces are gated. Flows that need the cluster show a clear message instead of a raw SDK error.
  • Active deployments on an inactive space keep running. ZopDay can’t push new revisions until the space recovers.
  • Queued revisions stop after their retries run out. Once the space recovers, redeploy the service to ship a fresh revision.

Multi-cluster organisations

Most ZopDay organisations end up with several spaces. Common layouts:

  • Per-environment: one cluster per environment (prod, staging, dev). Highest isolation, highest cost.
  • Per-region: one cluster per region for latency or compliance. Often paired with a global ingress in front.
  • Per-team / per-product: one cluster per major team or product line. Useful when teams want full autonomy.
  • Shared dev + dedicated prod: a single shared dev cluster and dedicated prod clusters per environment. A common way to cut cost.

ZopDay doesn’t enforce any of these. The space picker in the environment wizard accepts any registered space, whichever environments already point at it.

Synthetic vs real spaces

Some parts of the UI need a “space-shaped” object that isn’t a real cluster, such as topology grouping and picker placeholders. These synthetic entries are filtered out of the autoscaler picker, the event-readiness picker, and any scaling-aware UI, which operate only on real, scalable clusters.

Add a space

  1. Connect the cloud account

    Connect the account that owns the cluster or VM in Settings → Cloud Accounts, with the permissions for the path you want. See Cloud permissions.

  2. Register or provision

    To use a cluster you already run, open Infrastructure, select the discovered cluster, and click Enable (Cluster registration). On AWS EKS, first grant ZopDay access to the cluster: in Settings → Cloud Accounts, open the account’s menu, choose Manage Clusters, and click Register on the cluster row. To create one, go to Infrastructure → Provision and choose Kubernetes Cluster or Virtual Machine (Provisioning overview).

  3. Confirm it on Infrastructure

    The new space appears on Infrastructure in the Graph and List views, and in the space picker when you create an environment.

Deregister a space

Deregistering a space (DELETE /spaces/{id}) removes ZopDay’s pointer to the cluster and also deregisters any child spaces under it. It leaves the cluster, its workloads, and ZopDay’s cluster access in place. The effects on dependent objects:

ObjectEffect
Environments bound to this spaceCan’t ship new deploys. An environment’s space is fixed, so re-register the cluster to recover.
Pending deployment revisionsFail instead of deploying
Active deployments (already deployed)Continue running on the cluster. ZopDay can’t push new revisions.
Kubeauth grantUnchanged. To revoke ZopDay’s cluster access, open the account’s menu in Settings → Cloud Accounts, choose Manage Clusters, and click Deregister (EKS), or remove the IAM or RBAC grant in your cloud.

To reverse a deregistration, re-register the cluster. ZopDay matches the registration to the same underlying cluster by its cloud identity, never by name, and restores the original id. Environments, deployments, attached registries, and custom domains keyed on that space line up again without re-binding.

Reference

Anatomy of a space

FieldWhat it is
idUUID. Stable across renames / re-registrations.
org_idThe organisation that owns the registration.
provideraws · gcp · azure
space_typekubernetes, or vm for the VM substrate.
cloud_account_idThe connected cloud account ZopDay authenticates against.
config JSONProvider-specific identifiers (cluster name, region, resource group on Azure, project on GCP).
statusactive · inactive, kept in step with discovery (see Space status).

Provider-specific config

The config JSON varies per provider because each cloud identifies clusters differently. These examples show the identifying fields; a space’s config can carry more, such as attached domains and registries.

AWS
{
"clusterName": "prod-eks-1",
"region": "us-east-1"
}
GCP
{
"clusterName": "prod-gke-1",
"region": "us-central1",
"projectId": "my-project"
}
Azure
{
"clusterName": "prod-aks-1",
"region": "eastus",
"resourceGroup": "rg-prod-eus"
}

You can’t edit these fields on an existing space, because they are the cluster’s identity rather than its config. To point at a different cluster, deregister and re-register.

Endpoints

Deployment catalogue operations (/spaces*):

Terminal window
GET /spaces List
POST /spaces Add; register an existing cluster
GET /spaces/{id} Get one
PATCH /spaces/{id}/status Update status (needs space:update)
DELETE /spaces/{id} Soft-delete (deregister)

Cluster-side operations that need a kubeconfig live under /space-discovery/*:

Terminal window
GET /space-discovery/{spaceID}/namespaces List existing namespaces on the cluster
POST /space-discovery/{spaceID}/namespaces Create a new namespace

Troubleshooting

A space shows Inactive

The resource was missing from two consecutive discovery reads of its type. Check that the cluster or VM still exists and that the cloud account can still reach it. The space turns active again once it reappears in discovery and, for a cluster, passes the reachability check.

Deploys stopped while the space was inactive

Running deployments keep running, but queued revisions stop after their retries run out. Once the space is active again, redeploy the service to ship a fresh revision.

An environment can't deploy after its cluster was deregistered

An environment’s space is fixed. Re-register the same cluster: ZopDay matches it by cloud identity, restores the original space id, and the environment can deploy again without re-binding.

Next steps

Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·