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:

KeyAction
:podNavigate to Pods view
:deployNavigate to Deployments
:svcNavigate to Services
:nsNavigate to Namespaces
lView logs for selected resource
sShell into selected Pod
dDescribe selected resource
eEdit resource (opens in $EDITOR)
ctrl+dDelete selected resource
?Show all shortcuts
/Filter resources by name
escGo 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

Installbrew install k9s
Best forDaily cluster navigation, debugging, log tailing
Killer featuresLive updates, one-key log/shell access, port forwarding
Pro tipUse --readonly on production clusters
GitHubgithub.com/derailed/k9s

If you only install one tool from this series — make it k9s.