Clusters

Create and manage workload Kubernetes clusters

List clusters

get

Returns all clusters in the namespace. The namespace is scoped to a single tenant ({du-name}-{keystone-domain}-{keystone-tenant}), so this effectively lists all clusters owned by that tenant.

Authorizations
AuthorizationstringRequired

Dex-issued JWT token.

Path parameters
namespacestringRequired

Tenant namespace. Pattern: {du-name}-{keystone-domain}-{keystone-tenant}

Example: pcd-default-service
Responses
chevron-right
200

OK

application/json
apiVersionstringOptionalExample: cluster.x-k8s.io/v1beta1
kindstringOptionalExample: ClusterList
get
/apis/cluster.x-k8s.io/v1beta1/namespaces/{namespace}/clusters

Create a cluster

post

Creates a new workload Kubernetes cluster using ClusterClass topology mode.

The cluster webhook automatically sets labels, clusterNetwork CIDRs, controlPlaneEndpoint, topology.class/classNamespace, do not include these in the request. Also it merges default for apiServerFlags, kubeadmConfigFiles, and customSecurityGroupRules with user provided values.

Class selection (resolved from variables, no need to set explicitly):

infrastructure.type

deploymentUnit.type

ClusterClass used

openstack (default)

saas (default)

openstack-default-v1

openstack

onprem

openstack-default-v1

byoh

any

byoh-default-v1

Node pool variables: workerNode can be set at two levels. Set it in spec.topology.variables as a cluster-wide default (applies to all pools), and/or in a pool's variables.overrides to override for that pool specifically. Pool-level overrides take precedence. In GET responses you will see the cluster-level workerNode variable alongside pool-level overrides — both are normal.

Authorizations
AuthorizationstringRequired

Dex-issued JWT token.

Path parameters
namespacestringRequired

Tenant namespace. Pattern: {du-name}-{keystone-domain}-{keystone-tenant}

Example: pcd-default-service
Body
apiVersionstring · enumRequiredPossible values:
kindstring · enumRequiredPossible values:
Responses
post
/apis/cluster.x-k8s.io/v1beta1/namespaces/{namespace}/clusters

Get a cluster

get

Returns the full Cluster object including status.

status.phase

Description

Provisioning

Control plane and/or workers are being created

Provisioned

Cluster is ready — control plane and all worker pools are up

Deleting

Delete is in progress

Failed

Provisioning failed — check status.failureMessage

Authorizations
AuthorizationstringRequired

Dex-issued JWT token.

Path parameters
namespacestringRequired

Tenant namespace. Pattern: {du-name}-{keystone-domain}-{keystone-tenant}

Example: pcd-default-service
namestringRequiredExample: dev-cluster
Responses
chevron-right
200

OK

application/json
apiVersionstring · enumRequiredPossible values:
kindstring · enumRequiredPossible values:
get
/apis/cluster.x-k8s.io/v1beta1/namespaces/{namespace}/clusters/{name}

Delete a cluster

delete

Deletes the cluster and all owned resources (control plane, workers, OpenStack infrastructure). Asynchronous — cluster transitions to status.phase == "Deleting" and is removed when complete. Typical deletion time is 2–5 minutes.

BYOH clusters: physical host nodes are not deprovisioned. The cluster label is removed from the hosts, which return to the unallocated pool and can be reused by another cluster.

Authorizations
AuthorizationstringRequired

Dex-issued JWT token.

Path parameters
namespacestringRequired

Tenant namespace. Pattern: {du-name}-{keystone-domain}-{keystone-tenant}

Example: pcd-default-service
namestringRequiredExample: dev-cluster
Responses
chevron-right
200

Deletion accepted. Returns the Cluster object with metadata.deletionTimestamp set. The cluster is fully removed once status.phase disappears (resource deleted).

application/json
apiVersionstring · enumRequiredPossible values:
kindstring · enumRequiredPossible values:
delete
/apis/cluster.x-k8s.io/v1beta1/namespaces/{namespace}/clusters/{name}

Update a cluster

patch

Two content types are supported depending on the operation:

application/json-patch+json — for node pool (MachineDeployment) operations. spec.topology.workers.machineDeployments is an array with no server-side name-keying for this patch type, so elements must be addressed by their zero-based index. Do a GET first to find the position of the pool you want to modify.

application/apply-patch+yaml (Server-Side Apply) — for named topology variables such as apiServerFlags .

Autoscaling: to enable, remove the replicas field (so the autoscaler controls it) and add both min/max annotations in the same request. To disable, restore a fixed replicas value and remove both annotations.

Do not patch spec.topology.version directly.

Authorizations
AuthorizationstringRequired

Dex-issued JWT token.

Path parameters
namespacestringRequired

Tenant namespace. Pattern: {du-name}-{keystone-domain}-{keystone-tenant}

Example: pcd-default-service
namestringRequiredExample: dev-cluster
Query parameters
fieldManagerstringOptional

Name of the field manager. Required when using application/apply-patch+yaml (Server-Side Apply) — any non-empty string is valid (e.g. kubectl, my-app). Not needed for application/json-patch+json.

Example: kubectl
Bodyobject[]
opstring · enumRequiredPossible values:
pathstringRequired
valueanyOptional
Responses
chevron-right
200

Patch applied — changes take effect asynchronously.

application/json
apiVersionstring · enumRequiredPossible values:
kindstring · enumRequiredPossible values:
patch
/apis/cluster.x-k8s.io/v1beta1/namespaces/{namespace}/clusters/{name}

Last updated

Was this helpful?