Real-time terminal dashboard for Kubernetes node upgrades
Everything you need during a Kubernetes upgrade — one terminal.
Nodes, pods, PDB blockers, drain progress, events, and before/after comparison.
Why · Install · What you see · Platform support
Performing a multi-tenant cluster upgrade in production comes with a lot of mental overhead. I wanted one terminal view where I could see every node, what stage it's in, whether drains are moving, and which PDBs are blocking — and switch to pods, events, or kubectl describe without leaving the screen. Having everything in one place gives you peace of mind during an upgrade.
Before launching the TUI with kupgrade watch, you can run kupgrade snapshot to capture your cluster state. After the upgrade, run kupgrade report to see the diff — workloads, pods, PDBs, node versions. Did something new break, or was it already broken before you started?
# Homebrew
brew install sabirmohamed/tap/kupgrade# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/sabirmohamed/kupgrade/main/install.sh | bash# Go
go install github.com/sabirmohamed/kupgrade@latestBuild from source
git clone https://github.com/sabirmohamed/kupgrade
cd kupgrade
go build -o kupgrade ./cmd/kupgradeSingle binary on your laptop. No agents, no CRDs, no Helm charts, nothing deployed to the cluster. If you can run kubectl get nodes, you can run kupgrade — it uses read-only access to nodes, pods, events, and PDBs. Updates are real-time via Kubernetes informers, not polling.
snapshot → upgrade → watch → report
capture kick off upgrade observe compare
baseline (your CLI/Portal) live before/after
kupgrade snapshot # 1. capture baseline before upgrade
kupgrade watch # 2. watch the upgrade in real time
kupgrade report # 3. compare after upgrade
kupgrade report --format json # structured output for CI1. Pre-flight — PDB warning detected before upgrade starts
kupgrade watches your cluster and warns about PDBs that will block drains before you even begin.
2. Mid-upgrade — PDB blocker stalls the drain
When a PDB blocks a drain, kupgrade shows exactly which PDB, which node, and how long it's been stalled.
3. Progress — nodes completing after unblock
After fixing the blocker, drains resume and nodes start completing. Progress bar, elapsed time, and estimated remaining.
4. Almost there — 80% complete
5. Done — all nodes upgraded
Press 1-4 to switch to detail views.
Pods — problems first, then disrupted, then healthy. Surfaces restarts, probe failures, and pods that moved during the upgrade.
Drains — rescheduled pods with source and destination nodes.
Take a snapshot before the upgrade, compare after.
Before:
After:
The report compares workloads, PDBs, and node versions before and after. Exit code is 1 if new issues are found, 0 if clean — paste the output into Slack or pipe --format json into your CI pipeline.
| Resource | What kupgrade shows |
|---|---|
| Nodes | Stage transitions (Ready → Cordoned → Draining → Reimaging → Complete), surge nodes, version, CPU/MEM |
| Pods | Priority grouping (problems → disrupted → healthy), migrations, restarts, probe failures |
| PDBs | Flags PDBs that are actually blocking a drain, based on per-node eviction timing |
| Events | Severity-sorted, grouped by reason, with inline kubectl describe |
| Key | Action |
|---|---|
0-4 |
Switch screens (Dashboard, Nodes, Drains, Pods, Events) |
j/k or ↑/↓ |
Navigate |
d or Enter |
kubectl describe |
e |
Expand/collapse event group |
/ |
Search pods |
g / G |
Top / bottom |
? |
Help |
q |
Back / Quit |
Each cloud provider handles node upgrades differently. AKS reimages nodes in-place with the same name. EKS terminates and replaces them with new EC2 instances. GKE does rolling replacements one at a time. kupgrade detects your provider from node metadata and adapts — no flags, no config.
| Platform | Upgrade model | What kupgrade tracks |
|---|---|---|
| AKS | Reimage in-place | Surge nodes, reimage visibility, drain progress |
| EKS | Node replacement | Node replacement tracking, surge promotion |
| GKE | Rolling replacement | Rolling upgrade progress, one-at-a-time tracking |
| Other | Rolling upgrade | Standard cordon → drain → complete lifecycle |
Tested on real upgrades across all three providers, primarily focusing on AKS.
- Not a cluster browser — k9s does that
- Not an upgrade orchestrator — your provider handles that (AKS, EKS, GKE, kOps)
- Not a deprecation scanner — pluto and kubent cover that
- bubbletea, lipgloss, and bubbles for the terminal UI
- cobra and cli-runtime for kubectl-compatible CLI flags
- client-go informers for real-time watching (no polling)
- kubectl describe SDK for the detail overlay
- fuzzy for pod search
Apache 2.0 — See LICENSE








