docs / working with resources
Workloads & debugging
Klustr gives every workload the live operations you'd otherwise reach for kubectl
to do — logs, exec, port-forward, events — plus a few that are normally awkward,
like a root node shell and in-place pod resize. All of them respect a context's
read-only mode.
Logs
Open a pod (or a workload) and switch to the Logs tab for a streaming, stern-style view:
- Multi-pod streaming with a distinct ANSI color per pod.
- Follow mode, log-level highlighting, regex filtering.
- On a pod, a Tail picker starts the stream from the last 200, 1,000 or 10,000 lines, or from the whole log.
- Save the current buffer to a file.
In aggregated mode the stream spans the pods across every active context.
Exec
The Exec tab opens an interactive shell into any container using WebSocket, with SPDY fallback when the opening request is rejected for a supported compatibility reason. Pick the container if the pod has more than one.
Fallback also supports roles that allow create on pods/exec but reject the
WebSocket get request. A command is never retried after the connection upgrades;
if the session disconnects, start another shell explicitly.
Copy and paste follow the terminal conventions in
Terminal → Copy and paste: ⌘C / ⌘V on macOS,
Ctrl+Shift+C / Ctrl+Shift+V or the right-click menu on Linux and Windows.
Debug (shell-less containers)
Distroless and hardened images ship no shell, so Exec has nothing to run. Switch
the Exec tab's mode picker to debug and Klustr injects an ephemeral debug
container — the same thing kubectl debug does — then opens a shell in it. Pick
the target container, an image (netshoot, busybox, alpine or your own) and
press Start debug.
The debug container joins the target's process namespace and the pod's network
namespace, so you see the target's processes and can reach whatever it can reach
— curl, dig and tcpdump from netshoot all run against the target's network.
Reading the target's filesystem through /proc/1/root additionally needs the
SYS_PTRACE capability, which the checkbox adds. It is off by default because
that capability also exposes the target process's memory, and the PodSecurity
baseline policy rejects pods that add it.
Ephemeral containers cannot be removed once added; the debug container lingers until the pod restarts. Reattach re-enters the existing one instead of injecting another.
Port-forwarding
Start a forward from a pod or service. Klustr suggests a free local port, keeps a persistent indicator in the header while forwards are active, and lets you click-to-open an HTTP forward in your browser. Active forwards are listed in the header indicator and can be stopped individually.
Port-forwarding also prefers WebSocket and falls back to SPDY for compatible
upgrade rejections, including roles that grant only create on pods/portforward.
Stopping a forward or disconnecting its context closes its connection and local port,
including connections still waiting for a server or proxy response.
Node shell
From a node, Node shell gives you a root shell on that node. It works by
launching a temporary privileged nsenter pod, attaching to it over exec, and
removing the pod when the session ends — no SSH, nothing pre-installed on the node.
Treat this like kubectl debug node/...: it is a powerful, explicitly
user-initiated action that runs with node-level privileges.
Cordon, uncordon & drain
A node offers one-click cordon / uncordon, and a drain that evicts pods
through the Eviction API with live progress. The drain is PDB-aware and skips
DaemonSet and mirror pods, matching kubectl drain semantics.
Events
The Events tab on a resource shows the core Events filtered to that object, so
you see exactly what the control plane has said about it. It refreshes every 15
seconds while open, and Refresh reloads it right away.
Event messages can be selected and copied here, in the Events view and in the overview feeds; each message also has a copy button that shows on hover. The rest of a resource's detail tabs is selectable the same way.
Pod diagnosis
When a pod is unhealthy, Klustr surfaces a diagnosis card explaining why — for
common states like CrashLoopBackOff or OOMKilled — so you don't have to
reverse-engineer it from raw status fields.
Editing and rolling out
- YAML edit — a Monaco editor with a server-side dry-run diff shown before apply.
- Scale / restart / pause-resume — replica controls, one-click rolling restart, inline pause/resume, and inline HPA min/max editing.
- In-place pod resize — change a running container's CPU / memory requests and
limits via the
pods/resizesubresource, with no pod recreation; the live resize status (Deferred / Infeasible) is shown. - Rollout history & rollback — a side-by-side template diff across revisions and one-click revert for Deployments, StatefulSets and DaemonSets.