Skip to content

GKE node pools don't scale up from zero nodes #306

Description

@pluna

What happened?

A GPU node pool with minNodeCount: 0 cannot cold-start. The model claims its GPU through a DRA ResourceClaim, which binds only against a ResourceSlice that the NVIDIA driver publishes per running GPU node. At zero nodes there are no slices, so the cluster autoscaler cannot tell that a new node would meet the claim, and refuses to create the first one. The deployment stays pending:

cannot allocate all claims

kubectl get resourceslices returns nothing while the pool sits at zero, and the L4 slices appear only once a node is running.

The limitation is known and worked around in the getting started examples, which pin minNodeCount: 1. Nothing enforces it: the schema accepts minNodeCount: 0 on a GPU pool with no validation (apis/inferenceclusters/definition.yaml), so anyone who sets it hits this.

How can we reproduce it?

  1. Apply a GPU InferenceCluster whose pool has minNodeCount: 0 and maxNodeCount > 0, on GKE with an L4 pool.

  2. Wait for the pool to idle to zero nodes.

  3. Apply the ModelDeployment and ModelService.

  4. The deployment stays pending. Check it:

    kubectl get resourceslices            # empty at zero nodes
    kubectl describe pod <model-pod>      # cannot allocate all claims

Workaround. Set minNodeCount: 1 on every GPU pool so a node, and its ResourceSlice, always exists.

What environment did it happen in?

  • Cloud and cluster: GKE
  • GPU: NVIDIA L4 (g2-standard)
  • Scheduling uses Kubernetes Dynamic Resource Allocation with the NVIDIA DRA driver
  • Scaling uses the GKE cluster autoscaler

Modelplane version: v0.1.0-rc.2

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions