Skip to content

gpu — frontend: Pod ↔ GPU map view (cluster → node → GPU → MIG/slice → bound pods + filters + sparklines) #205

Description

@gnana997

Part of #202.

Context

The headline operator view. A fleet-wide table showing every GPU-bound pod across every cluster Periscope manages, with the topology hierarchy (Cluster → Node → PhysicalGPU → MIGSlice or TimeSlice → BoundPod). Click a row → live util sparkline + neighbor pods on the same device + K8s events + logs link.

Acceptance

  • New route at /clusters/<c>/gpu and a top-level /gpu for the fleet-wide view
  • Sidebar entry under "EKS" group, auto-detected by whether any node carries nvidia.com/gpu.product labels
  • Table: cluster · node · GPU index · model · MIG profile / time-slice / DRA · bound pod(s) · namespace · owner labels · current util
  • Filters: cluster, GPU model (A100/H100/L4), MIG profile, namespace, util threshold
  • Click row → detail pane with: live util sparkline (last 5min), neighbor pods on same device (for MIG / time-slice), K8s events, link to logs
  • Live SSE updates (allocation changes + metric refreshes)
  • Empty state when no GPU nodes detected — explain prerequisites + link to setup docs
  • No new audit verb — reads are not audited (CloudTrail covers IMDS reads if enabled)

Files this likely touches

  • New: web/src/pages/GPUMapPage.tsx
  • New: web/src/components/gpu/GPUMapTable.tsx, GPUDetailPane.tsx
  • New: web/src/hooks/useGPUMap.ts
  • New backend handler: /api/clusters/<c>/gpu/map

Dependencies

Blocks on:

Notes for contributors

  • Mirror the existing Karpenter dashboard pattern — same auto-detect-by-CRD-or-label, same resizable detail pane
  • Sparkline component already exists in the SPA for the Karpenter cost view; reuse
  • Time-slicing case: N pods share one device → render as a single row with all bound pods listed + per-pod util when DCGM_FI_PROF_GR_ENGINE_ACTIVE is available; otherwise "shared, util N% across M pods" honestly
  • MIG case: render each slice as a sub-row of the physical GPU

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions