This is a scheduler plugin that hooks into the Kubernetes Scheduling Framework's Score extension point to re-rank nodes based on live GPU telemetry (utilization, free memory, ECC errors, and NVLink topology).
This project is currently at Phase 4, featuring a fully wired score plugin, telemetry store, and a kind cluster integration.
We have implemented the following components:
pkg/telemetry/:GPUStatsProviderinterface with a Fake implementation for testing and NVML stubs.pkg/scoring/: Pure scoring engine evaluating utilization, memory, ECC errors, and topology fit.pkg/store/: Thread-safe in-memoryTelemetryStoreused to cache node telemetry.pkg/plugin/: TheGPUScorePluginintegrating with the Kubernetes Scheduling Framework (ScoreandNormalizeScoreextensions).cmd/scheduler/: A standalone demo executable to validate the wiring and scoring logic.kind/: Configurations and manifests for deploying and testing the plugin on a localkindcluster.scripts/: Automation scripts for testing and deploying tokind.
Because this project is built using Go, you will need Go installed.
To run the standalone demo (which demonstrates the scoring logic and wiring without needing a Kubernetes cluster):
go run ./cmd/scheduler/To compile and ensure there are no build errors across the project:
go build ./...To run standard Go static analysis:
go vet ./...To run all unit and integration tests (including the race detector):
go test -race -v ./...You can test the plugin behavior in a simulated kind cluster. See the kind README for full instructions, or use the provided scripts:
- Windows:
.\scripts\phase4-deploy.ps1 - Linux/Mac:
./scripts/phase4-deploy.sh
Detailed documentation for each phase and architectural decisions can be found in the docs/ directory.
- PRD.md: Product Requirements Document
- TRD.md: Technical Requirements Document
- docs/phase4.md: Phase 4 Architecture & Integration Details