For the complete documentation index, see llms.txt. This page is also available as Markdown.

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
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
201

Created — provisioning is asynchronous.

application/json
apiVersionstring · enumRequiredPossible values:
kindstring · enumRequiredPossible values:
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
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
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
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?