Modelplane Modelplane docs

CoreWeaveCluster Custom Resource

This document is for an unreleased version of Modelplane.

This document applies to the Modelplane main branch and not to the latest release v0.7.

A CoreWeaveCluster provisions a CoreWeave Kubernetes Service (CKS) cluster in a dedicated VPC, with node pools for GPU inference and system workloads. CKS node pools are Kubernetes resources inside the cluster, so they’re created through the cluster’s own API once it’s running. It outputs a Secret containing a kubeconfig for the cluster, which authenticates with the CoreWeave API access token the CoreWeave ProviderConfig uses.

#Metadata

API version
infrastructure.modelplane.ai/v1alpha1
Kind
CoreWeaveCluster
Scope
Namespaced

#Example

Manifest
apiVersion: infrastructure.modelplane.ai/v1alpha1
kind: CoreWeaveCluster
metadata:
  name: inference-us-east-04
  namespace: platform
spec:
  zone: US-EAST-04A
  kubernetesVersion: "1.37"
  nodePools:
    - name: gpu-rtxp6000
      role: GPU
      instanceType: rtxp6000-8x
      nodeCount: 1
      maxNodeCount: 2
      gpu:
        acceleratorType: nvidia-rtx-pro-6000

#Spec

CoreWeaveClusterSpec defines the desired state of CoreWeaveCluster.

# credentials optional object

CoreWeave ProviderConfig or ClusterProviderConfig used to authenticate to the CoreWeave API. Its API access token also authenticates the kubeconfig this cluster outputs, so the kubeconfig Secret holds a copy of the org’s API token. Limit who can create CoreWeaveClusters, and who can read Secrets in their namespaces. Defaults to the ClusterProviderConfig named default.

# name optional string 1–253 chars default: default
# type optional enum: ProviderConfig | ClusterProviderConfig default: ClusterProviderConfig
# kubernetesVersion optional string default: 1.37

CKS Kubernetes minor version, in the form X.Y. CKS applies patch versions itself.

pattern: ^[0-9]+\.[0-9]+$

# nodePools required object[] 1–8 items
# gpu optional object

GPU configuration. Required when role is GPU.

# acceleratorType required string 1–63 chars

GPU accelerator type (e.g. nvidia-h100, nvidia-l40s). Used to label GPU nodes; the actual GPU and count are determined by the instance type.

# instanceType required string 1–63 chars

CKS instance type for the pool’s nodes (e.g. rtxp6000-8x, turin-gp). CKS can’t change an existing pool’s instance type; replace the pool with a new name instead.

# maxNodeCount optional integer 1–1000

Maximum number of nodes for autoscaling. When set, CKS’s managed cluster autoscaler scales the pool between minNodeCount (or nodeCount) and this, and owns the pool’s node count. Setting this on an existing pool with no nodes leaves it at zero (see minNodeCount). Omit for fixed-size pools.

# minNodeCount optional integer ≤ 1000

Minimum number of nodes for autoscaling. Defaults to nodeCount, or 1 if nodeCount is 0. Requires maxNodeCount. Keep it at 1 or higher: CKS’s cluster autoscaler can’t scale a pool whose devices bind through DRA up from zero nodes, so a pod scheduled to an empty pool waits forever.

# name required string 1–40 chars

Unique name for this node pool. Used as the name of the pool’s CKS NodePool.

pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$

# nodeCount optional integer ≤ 1000 default: 1

Number of nodes. Fixed unless maxNodeCount enables autoscaling, in which case it’s the initial count, and a new pool starts with at least one node even if this is 0, because CKS’s autoscaler can’t scale it up from zero (see minNodeCount).

# role required enum: GPU | CPU

Determines what workloads this pool runs. GPU pools host inference workloads and are tainted to exclude non-GPU pods. CPU pools host CPU inference workloads: a CPU instance type and the modelplane.ai/cpu label and taint.

# zone required string 1–32 chars

CoreWeave Availability Zone for the cluster (e.g. US-EAST-04A). Instance types vary by zone.

#Status

# cache optional object

Observed ModelCache RWX storage state.

# storageClassName optional string ≤ 253 chars

Name of the Modelplane-managed ReadWriteMany StorageClass composed on this cluster for ModelCache PVCs, a copy of CKS’s shared-vast class that deletes a volume when its claim is deleted.

# secrets optional object[]
# key required string ≤ 253 chars

Key within the Secret that holds the credential data.

# name required string ≤ 253 chars

Name of the Secret.

# type required enum: Kubeconfig

The type of credential this secret contains. Kubeconfig contains a kubeconfig file with the cluster endpoint and a CoreWeave API access token.