The Complete K9s Cheatsheet
K9s is a powerful terminal-based UI for managing Kubernetes clusters. This comprehensive cheatsheet covers everything you need to know for efficient cluster navigation and management.
Getting Started
Installation Options
# Go
go install github.com/derailed/k9s@latest
# Homebrew (macOS/Linux)
brew install derailed/k9s/k9s
# MacPorts (macOS)
sudo port install k9s
# Snap (Linux)
sudo snap install k9s
# Pacman (Arch Linux)
pacman -S k9s
# Scoop (Windows)
scoop install k9s
# Chocolatey (Windows)
choco install k9s
Launching K9s
# Use default kubeconfig
k9s
# Use specific kubeconfig
k9s --kubeconfig /path/to/kubeconfig
# Use specific context
k9s --context production-cluster
# Start in specific namespace
k9s --namespace kube-system
# Launch in readonly mode
k9s --readonly
# Run without splash screen
k9s --headless
# Check configuration info
k9s info
Essential Workflows
Getting to Resources (Start Here!)
Step 1: Navigate to resource type
:pod          # List all pods
:deploy       # List deployments  
:svc          # List services
:ns           # List namespaces
:node         # List nodes
:pvc          # List persistent volume claims
:secret       # List secrets
:cm           # List configmaps
Step 2: Filter if needed
/<filter>     # Filter by name (regex)
/!<filter>    # Exclude filter
/-l app=web   # Filter by label
/-f nginx     # Fuzzy search
Step 3: Perform action
- Use arrow keys or 
j/k to select 
- Press action key (see operations below)
 
Common Management Workflows
Scaling Deployments
- Type 
:deploy to list deployments 
- Use 
j/k to select deployment 
- Press 
s to scale 
- Enter desired replica count
 
- Press Enter to apply
 
Viewing Pod Logs
- Type 
:pod to list pods 
- Select pod with 
j/k 
- Press 
l to view logs 
- Use 
w to toggle line wrap 
- Press 
0 to tail from beginning 
Accessing Pod Shell
- Type 
:pod to list pods 
- Select running pod
 
- Press 
s to shell into pod 
- If multi-container, select container
 
Managing Secrets
- Type 
:secret to list secrets 
- Select secret
 
- Press 
x to decode and view contents 
- Press 
Esc to return to list 
Port Forwarding
- Type 
:pod to list pods 
- Select pod
 
- Press 
Shift+f to open port-forward menu 
- Configure local and remote ports
 
- Connection runs in background
 
Core Navigation
Universal Navigation Keys
| Key | Action | 
|---|
j / k | Move down / up | 
h / l | Move left / right | 
Ctrl+f / Ctrl+b | Page down / up | 
g / G | Go to top / bottom | 
Enter | Select item | 
Esc | Back to previous view | 
:q or Ctrl+c | Quit k9s | 
Resource Listing Commands
| Command | Description | 
|---|
:<resource> | List any Kubernetes resource | 
:<resource> <namespace> | List resources in specific namespace | 
:aliases or Ctrl+a | Show all available aliases | 
:crd | List custom resource definitions | 
:apiservices | List API services | 
:events or :ev | View cluster events (great for troubleshooting) | 
Context and Namespace Management
| Command | Description | 
|---|
:ctx | List and select contexts | 
:ctx <context> | Switch to specific context | 
:namespace | Select namespace interactively | 
0-9 | Quick switch to favourite namespaces | 
u | Mark current namespace as favourite (adds +) | 
Filtering and Search
| Filter | Description | Example | 
|---|
/<pattern> | Regex filter | /nginx | 
/!<pattern> | Inverse regex filter | /!kube-system | 
/-l <selector> | Filter by labels | /-l app=web,env=prod | 
/-f <term> | Fuzzy match | /-f web | 
Resource Operations
View and Inspection
| Key | Action | Notes | 
|---|
y | View YAML | Full resource definition | 
d | Describe resource | Detailed info + events | 
v | View resource | Formatted display | 
e | Edit resource | Opens in editor | 
Enter | Drill into resource | Navigate to related resources | 
Logs and Debugging
| Key | Action | Notes | 
|---|
l | View logs | For pods/containers | 
w | Toggle line wrap | In log view | 
0 | Show all logs | From beginning | 
1-9 | Show last N logs | e.g., 3 = last 300 lines | 
f | Follow logs | Real-time streaming | 
s | Shell into container | Interactive shell | 
Resource Management
| Key | Action | Prerequisites | 
|---|
s | Scale resource | Must be in :deploy, :sts, etc. | 
r | Restart/reload | Deployments, daemonsets | 
Ctrl+l | Rollback | Deployments with history | 
Ctrl+d | Delete (with confirmation) | Any resource | 
Ctrl+k | Kill (force delete) | Any resource | 
Multi-select Operations
| Key | Action | 
|---|
Space | Select/deselect item | 
Ctrl+d | Delete all selected | 
Ctrl+a | Select all visible | 
Column Management
| Key | Action | 
|---|
Ctrl+w | Toggle wide columns | 
Ctrl+e | Hide/show header | 
f | Fullscreen mode | 
Ctrl+s | Save output to file | 
Column Sorting
| Shortcut | Sort By | 
|---|
Shift+c | CPU usage | 
Shift+m | Memory usage | 
Shift+s | Status | 
Shift+p | Namespace | 
Shift+n | Name | 
Shift+o | Node | 
Shift+i | IP address | 
Shift+a | Age | 
Shift+t | Restart count | 
Shift+r | Pod readiness | 
Auto-refresh and State
| Key | Action | 
|---|
r | Toggle auto-refresh | 
Ctrl+r | Manual refresh | 
Ctrl+z | Toggle error state display | 
Special Views and Features
XRay View (Resource Relationships)
View dependencies and relationships between resources:
:xray deploy webapp    # Show deployment relationships
:xray pod nginx-123    # Show pod relationships
Pulse View (Cluster Dashboard)
General cluster health and information:
:pulse
Directory View (Local Filesystem)
Browse and manage local files:
:dir /tmp                    # Browse /tmp directory
:dir /tmp/k9s-screens-root  # Common location for saved files
Helm Integration
Manage Helm releases:
:helm                 # List all Helm releases
:helm kube-system     # List releases in specific namespace
Advanced Features
Port Forwarding Workflow
- Navigate to pods: 
:pod 
- Select target pod
 
- Press 
Shift+f for port-forward menu 
- Configure ports (local:remote)
 
- Establish connection
 
- Use 
pf alias to manage active forwards 
Benchmarking (HTTP Load Testing)
- Set up port forwarding to your service
 
- Press 
Ctrl+b to start HTTP benchmark 
- Results saved to 
/tmp for analysis 
- Configure via 
$HOME/.k9s/bench-<context>.yml 
Secret Management Workflow
- Navigate to secrets: 
:secret 
- Select secret to examine
 
- Press 
x to decode and view contents 
- Press 
Esc to return to secret list 
- Use 
y to view full YAML including encoded data 
Understanding the Display
Resource Status Indicators
● Green: Healthy/Running 
● Yellow: Warning/Pending 
● Red: Error/Failed 
+ after namespace: Favourite namespace 
* after namespace: Default namespace 
CPU and Memory Metrics
%CPU/R: Percentage of requested CPU 
%CPU/L: Percentage of CPU limit 
%MEM/R: Percentage of requested memory 
%MEM/L: Percentage of memory limit 
CPU/A: Allocatable CPU 
Container Status
READY: Running containers / total containers 
PROBES(L:R): Liveness and Readiness probe status 
RESTARTS: Container restart count 
Configuration and Customisation
Configuration Files
K9s stores configuration in $HOME/.k9s/ or $XDG_CONFIG_HOME/k9s/:
| File | Purpose | 
|---|
config.yml | Main k9s configuration | 
views.yml | Custom column views | 
alias.yml | Custom resource aliases | 
hotkey.yml | Custom keyboard shortcuts | 
plugin.yml | Plugin management | 
skins/ | Custom colour schemes | 
Sample Configuration
# ~/.k9s/config.yml
k9s:
  refreshRate: 2
  maxConnRetry: 5
  readOnly: false
  noExitOnCtrlC: false
  ui:
    enableMouse: false
    headless: false
    logoless: false
  skipLatestRevCheck: false
  disablePodCounting: false
  shellPod:
    image: busybox:1.35.0
    namespace: default
    limits:
      cpu: 100m
      memory: 100Mi
  logger:
    tail: 1000
    buffer: 5000
    sinceSeconds: -1
Custom Views with JQ Support
# ~/.k9s/views.yml  
k9s:
  views:
    v1/pods:
      sortColumn: AGE:desc
      columns:
        - AGE
        - NAMESPACE
        - NAME
        - STATUS
        - IMG:.spec.containers[0].image|split(":")|.[0]
        - VERSION:.spec.containers[0].image|split(":")|.[-1]
Environment Variables
| Variable | Purpose | 
|---|
K9S_SKIN | Set skin theme | 
KUBECONFIG | Specify kubeconfig paths | 
K9S_CONFIG_DIR | Override config directory | 
Troubleshooting Workflows
Pod Not Starting
:pod → find problem pod 
d to describe (check events) 
:events to see cluster events 
y to examine YAML configuration 
l to check container logs if available 
Service Not Accessible
:svc → find service 
d to describe service 
Enter to drill into endpoints 
:pod → verify pod labels match service selector 
- Use port-forward to test connectivity
 
Resource Quotas/Limits
:ns → select namespace 
- Look for quota indicators in display
 
:resourcequota or :limitrange to check limits 
:node to check cluster capacity 
:node → check node resources 
- Sort by CPU/Memory with 
Shift+c / Shift+m 
:pod → identify resource-heavy pods 
- Use 
:top pod or :top node for detailed metrics 
Plugin System
K9s supports plugins for extended functionality. Popular plugins include:
kube-score: Security and best practice scoring 
kubectl-df-pv: Disk usage for persistent volumes 
kubectl-neat: Clean YAML output 
stern: Advanced log tailing 
Plugin repository: https://github.com/derailed/k9s/tree/master/plugins
Common Gotchas and Tips
Workflow Tips
- Always start with resource type: 
:pod, :deploy, etc. 
- Use fuzzy search: 
/-f is often faster than exact matches 
- Favourite your namespaces: Press 
u for quick access 
- Save before copying: Use 
Ctrl+s then browse with :dir /tmp 
- Multi-cluster setup: Use 
$KUBECONFIG with multiple paths 
- Reduce refresh rate in busy clusters
 
- Use readonly mode (
--readonly) for investigation 
- Filter early to reduce data processing
 
- Close unused views to free memory
 
Common Issues
- “Permission denied”: Check RBAC permissions
 
- “Connection refused”: Verify cluster connectivity
 
- “Resource not found”: Check if CRDs are installed
 
- Editing reverted: Scale down operator/controller first
 
Keyboard Shortcuts Summary Card
| Action | Key | Context | 
|---|
| Navigate | j/k | Any view | 
| Select | Enter | Any list | 
| Filter | /pattern | Any list | 
| Back | Esc | Any view | 
| Describe | d | Resource selected | 
| YAML | y | Resource selected | 
| Edit | e | Resource selected | 
| Logs | l | Pod/container | 
| Shell | s | Pod | 
| Scale | s | Deployment/StatefulSet | 
| Delete | Ctrl+d | Any resource | 
| Port Forward | Shift+f | Pod | 
| Full Screen | f | Any view | 
| Wide View | Ctrl+w | Any list | 
| Save | Ctrl+s | Any view | 
This cheatsheet reflects k9s v0.50+ features. For the latest updates, check the official k9s repository.