The problem
Kubernetes is powerful. The default interface to it is not.
You juggle kubectl get, kubectl describe, kubectl logs, and kubectl exec. You switch terminals, copy Pod names, paste them into the next command, get a new Pod name after a restart, start over.
It works. But it does not scale well with how fast things change in a live cluster.
Enter k9s
k9s is a terminal-based UI that sits on top of your cluster and lets you navigate, inspect, and manage resources in real time — without typing a full kubectl command for every action.
Think of it as a live dashboard in your terminal. Resources update automatically. You navigate with keyboard shortcuts. Logs, shell access, and resource editing are one keypress away.
It still uses your kubeconfig and RBAC. If kubectl cannot list Pods in a namespace, k9s cannot either.
Installation
Via Homebrew (macOS/Linux):
brew install k9s
Via package manager (Linux):
# Debian/Ubuntu (when available in your repos)
sudo apt install k9s
# Arch
sudo pacman -S k9s
Via binary (all platforms):
Download from github.com/derailed/k9s/releases.
Pair k9s with fast context switching — kubectx and kubens get you to the right cluster and namespace; k9s is where you live once you are there.
Starting k9s
# Connect to your current context
k9s
# Connect to a specific namespace
k9s -n monitoring
# Connect to a specific context
k9s --context production-cluster
# Read-only mode (safe for production browsing)
k9s --readonly
Essential keyboard shortcuts
Once inside k9s, everything is keyboard-driven:
| Key | Action |
|---|---|
:pod | Navigate to Pods view |
:deploy | Navigate to Deployments |
:svc | Navigate to Services |
:ns | Navigate to Namespaces |
l | View logs for selected resource |
s | Shell into selected Pod |
d | Describe selected resource |
e | Edit resource (opens in $EDITOR) |
ctrl+d | Delete selected resource |
? | Show all shortcuts |
/ | Filter resources by name |
esc | Go back / cancel |
Press ? early. k9s has more bindings than this table; the built-in help is the source of truth for your version.
The features that change how you work
Live log streaming. Select any Pod, press l, and logs stream in real time. Press w to wrap long lines. Press f for fullscreen. No more copy-pasting Pod names.
Shell access. Press s on any Pod for an interactive shell. k9s picks the container automatically when there is only one.
Port forwarding. Press shift+f on a Service or Pod to set up port forwarding without remembering the syntax.
Resource filtering. Type / and filter any list by name instantly.
Multi-namespace view. Switch namespaces with :ns or launch with -A for all namespaces.
Pulse view. Type :pulse for a live overview of cluster health — nodes, Pods, CPU, memory at a glance.
Read-only mode for production
When browsing a production cluster, start k9s with:
k9s --readonly
This disables write operations. You can look at everything, change nothing. Good habit — especially when muscle memory reaches for ctrl+d or e.
Why k9s sticks
Most tools in the Kubernetes ecosystem require you to remember syntax. k9s requires you to remember about a dozen shortcuts — and then you navigate by instinct.
It is the difference between driving a car you know and reading the manual every time you want to change gear.
For engineers returning to Kubernetes after a break, k9s is one of the fastest ways to rebuild muscle memory. The cluster is live in front of you. You see Pods start, crash, and restart in real time. Context comes back quickly.
When you need ownership trees or YAML spelunking, kubectl tree and plain kubectl essentials still belong in the toolkit. k9s is the daily driver; kubectl is the precision tool.
Summary
| Install | brew install k9s |
| Best for | Daily cluster navigation, debugging, log tailing |
| Killer features | Live updates, one-key log/shell access, port forwarding |
| Pro tip | Use --readonly on production clusters |
| GitHub | github.com/derailed/k9s |
If you only install one tool from this series — make it k9s.