What problem are you facing?
The local end-to-end test added in #365 brings the full path up on two kind clusters with no cloud and no GPU, and it proves an engine's ResourceClaim binds and its pod schedules onto a workload node. But that workload cluster has a single node, so the test can't exercise the fleet scheduler's placement decisions — with one candidate node there is nothing to choose between.
Placement is what decides where a replica lands on a real fleet: CEL capacity matching against a node's declared device capacity, modelplane.ai/pool selection, and nodeSelector handling. Today that logic is unverified end to end, and the multi-node, multi-GPU fleets that would exercise it are exactly what the local test is designed to avoid needing.
How could Modelplane help solve your problem?
Suggested by @haarchri in the #365 review (#365 (comment)): add KWOK (Kubernetes WithOut Kubelet) nodes to the workload cluster. KWOK marks pods scheduled onto its fake nodes as Ready without a real kubelet, so we can cheaply stand up several nodes with different pool labels and declared capacities, force the scheduler to choose among them, and assert a replica lands on the intended node — still cloud- and GPU-free.
Open questions / trade-offs for the follow-up:
- KWOK pods reach Ready without running anything, so this covers placement, not serving. The real workload node (with the mock engine) would keep carrying the served replica; the KWOK nodes would be additional placement candidates.
- DRA interaction: the
dra-example-driver publishes ResourceSlices per node via its kubelet plugin, which KWOK nodes won't run. We'd need to confirm whether a claim: DRA engine can bind on a KWOK node (publish ResourceSlices for the fake nodes, or assert placement via pool/nodeSelector without DRA on those nodes).
Follow-up to the local e2e test added in #365.
What problem are you facing?
The local end-to-end test added in #365 brings the full path up on two
kindclusters with no cloud and no GPU, and it proves an engine'sResourceClaimbinds and its pod schedules onto a workload node. But that workload cluster has a single node, so the test can't exercise the fleet scheduler's placement decisions — with one candidate node there is nothing to choose between.Placement is what decides where a replica lands on a real fleet: CEL capacity matching against a node's declared device capacity,
modelplane.ai/poolselection, and nodeSelector handling. Today that logic is unverified end to end, and the multi-node, multi-GPU fleets that would exercise it are exactly what the local test is designed to avoid needing.How could Modelplane help solve your problem?
Suggested by @haarchri in the #365 review (#365 (comment)): add KWOK (Kubernetes WithOut Kubelet) nodes to the workload cluster. KWOK marks pods scheduled onto its fake nodes as Ready without a real kubelet, so we can cheaply stand up several nodes with different pool labels and declared capacities, force the scheduler to choose among them, and assert a replica lands on the intended node — still cloud- and GPU-free.
Open questions / trade-offs for the follow-up:
dra-example-driverpublishesResourceSlices per node via its kubelet plugin, which KWOK nodes won't run. We'd need to confirm whether aclaim: DRAengine can bind on a KWOK node (publishResourceSlices for the fake nodes, or assert placement via pool/nodeSelector without DRA on those nodes).Follow-up to the local e2e test added in #365.