v0.2.0
Highlights
Pick your kernel's CPU/RAM per session (#41): the Connect Kernel dialog has a Resources picker — admin-curated presets (Medium/Large/XLarge…) plus an optional capped Custom row.
- k8s_per_user: applied as request=limit → Guaranteed QoS; the user gets exactly what they pick
- docker_per_user: applied as the container's CPU/memory limits
- Resize on connect: picking a different size restarts the kernel at the new size, with a warning showing the currently-running size
- Opt-in: feature is off until
kernel.resources.presetsis set in values.yaml — upgrading changes nothing
Library feedback (#33)
Failed library installs are no longer silent — and the experience is consistent across PySpark and Scala:
- A bad Maven coordinate now raises a toast naming the coordinate(s) that failed to resolve — on connect and on Manage Libraries → Apply & Restart — instead of a later cryptic
ClassNotFoundException. Detected from the kernel log (PySpark, JVM stderr) and the init-cell error (Scala/Almond), so neither kernel slips through. - A resolution failure shows a red Spark not ready badge (not a misleading green Connected), blocks Run / Run All, and offers a Fix libraries action. The kernel stays alive for a fast in-pod fix — no teardown.
- No more stuck Booting Spark… / starting badge after a failed or fixed library — the kernel returns to a usable state without a page reload.
Fixes
- Resources picker shows the running kernel's size immediately after connect/resize (k8s usage previously hid it until metrics-server scraped, ~15s)
- Docker resource-usage widget reads the live per-container CPU quota instead of static config
- Disconnect spinner could hang forever when the backend was unreachable — request now has a timeout
- Kernel pod termination grace cut 30s → 5s: resize/restart completes in ~12s instead of ~40s
- Spawn no longer re-reads pod sizes from the DB row mid-spawn (a concurrent destroy could race it and revert to defaults)
- Manage Libraries / Connect dialog no longer rescale or jump when a coordinate is pasted
Upgrade
# values.yaml — opt in by defining presets
kernel:
resources:
presets:
- { id: medium, label: "Medium", cpu: "1", memory: "2Gi" }
- { id: large, label: "Large", cpu: "2", memory: "4Gi" }
- { id: xlarge, label: "XLarge", cpu: "4", memory: "8Gi" }
defaultPreset: medium
allowCustom: true
custom: { maxCpu: "8", maxMemory: "16Gi" }DB migration is automatic (new columns on user_kernel_pods; legacy rows fall back to cluster defaults).