Update cluster API Reference
const url = 'https://api.kupe.cloud/api/v1/tenants/acme/clusters/production';const options = { method: 'PATCH', headers: { 'If-Match': '294810', Authorization: '<Authorization>', 'Content-Type': 'application/json' }, body: '{"alerts":{"additionalProperty":"example"},"highAvailability":true,"resources":{"cpu":"4","memory":"16Gi","storage":"100Gi"},"version":"1.33"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.kupe.cloud/api/v1/tenants/acme/clusters/production \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --header 'If-Match: 294810' \ --data '{ "alerts": { "additionalProperty": "example" }, "highAvailability": true, "resources": { "cpu": "4", "memory": "16Gi", "storage": "100Gi" }, "version": "1.33" }'Update mutable fields on a managed cluster. At least one field must be provided.
Changing version triggers a rolling Kubernetes upgrade. Changing resources adjusts the resource allocation for the cluster. Both operations are applied asynchronously.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Tenant name
Cluster name
Header Parameters
Section titled “ Header Parameters ”ETag for optimistic locking
Request Body
Section titled “ Request Body ”Fields to update (at least one required)
object
Updated alert configuration
object
HighAvailability is a create-time-only setting in v1. Both directions of the toggle are rejected on PATCH: false -> true is rejected with HA_ENABLE_ON_EXISTING_UNSUPPORTED; true -> false is rejected with HA_DISABLE_UNSUPPORTED. Tenants who want HA on an existing cluster recreate it as HA (blue-green swap).
Example
trueUpdated resource allocations
object
Example
4Example
16GiExample
100GiTarget Kubernetes version for upgrade
Example
1.33Responses
Section titled “ Responses ”Updated cluster
object
object
Deprecated: always equal to name (the CRD has no display name; the cluster name is the identifier).
object
object
object
HAConfigured is true once the operator has confirmed both 3/3 apiserver replicas AND 3/3 deployed-etcd replicas are Ready for the first time. Etcd readiness is required because in the OSS deployed-etcd path etcd runs in its own StatefulSet — quorum loss with healthy apiserver pods would block writes, so HA is not “operationally ready” until both tiers report 3/3.
HAEnabledAt is the moment HAConfigured first became true and acts as the billing anchor. Stamped once, never updated, never cleared (v1 has no HA->single transition).
HAEtcdReplicasDesired is the target HA etcd replica count (3 when HA is enabled, 0 otherwise).
HAEtcdReplicasReady is the count of deployed-etcd replicas currently Ready. Exposed separately from HAReplicasReady because in the OSS deployed-etcd path the etcd StatefulSet is independent of the apiserver StatefulSet, and etcd quorum loss with healthy CP can leave the cluster unable to serve writes.
HAPhase is the consumer-friendly HA rollup. One of pending, ha-healthy, ha-degraded, ha-unavailable. Empty for non-HA clusters.
HAReplicasDesired is the target HA replica count (3 when HA is enabled, 0 otherwise).
HAReplicasReady is the count of HA control-plane (apiserver) replicas currently Ready.
object
Warnings is an array of structured advisory messages. Always present (empty array when none). Populated today only by CREATE when a non-blocking advisory applies (e.g. HA_K8S_VERSION_RETIRING when HA is enabled on the oldest supported k8s minor). Each entry shares the same shape as a structured error envelope.
object
Example
{ "createdAt": "2026-02-01T14:00:00Z", "displayName": "production", "highAvailability": true, "name": "production", "resourceVersion": "294810", "resources": { "cpu": "4", "memory": "16Gi", "storage": "100Gi" }, "status": { "endpoint": "https://production.acme.clusters.kupe.cloud", "haConfigured": true, "haEnabledAt": "2026-05-25T14:32:11Z", "haEtcdReplicasDesired": 3, "haEtcdReplicasReady": 3, "haPhase": "ha-healthy", "haReplicasDesired": 3, "haReplicasReady": 3, "kubernetesVersion": "v1.32.3", "phase": "Running" }, "type": "shared", "version": "1.32", "warnings": [ { "code": "HA_K8S_VERSION_RETIRING", "field": "spec.highAvailability", "message": "Cluster's Kubernetes version (1.33) is approaching end-of-life on the current vCluster chart. Plan an upgrade before enabling HA.", "severity": "warning" } ]}Headers
Section titled “ Headers ”New resource version
Validation error
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Missing or invalid authentication
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Admin access required
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Cluster not found
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}ETag mismatch
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Rate limit exceeded
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}