Useful Tools for Kubernetes
K9s
K9s provides a terminal UI to interact with your Kubernetes clusters. The aim of this project is to make it easier to navigate, observe and manage your applications in the wild. K9s continually watches Kubernetes for changes and offers subsequent commands to interact with your observed resources.
Installation
Via Homebrew or LinuxBrew for macOS and Linux
brew install derailed/k9s/k9s
PreFlight Checks (.bash_profile)
- K9s uses 256 colors terminal mode. On `Nix system make sure TERM is set accordingly.
export TERM=xterm-256color
- In order to issue manifest edit commands make sure your EDITOR env is set.
# Kubectl edit command will use this env var.
export EDITOR=my_fav_editor
# Should your editor deals with streamed vs on disk files differently, also set...
export K9S_EDITOR=my_fav_editor
The Command Line
# List all available CLI options
k9s help
# To get info about K9s runtime (logs, configs, etc..)
k9s info
# To run K9s in a given namespace
k9s -n mycoolns
# Start K9s in an existing KubeConfig context
k9s --context coolCtx
# Start K9s in readonly mode - with all modification commands disabled
k9s --readonly
Logs
k9s info
# Will produces something like this
# ____ __.________
# | |/ _/ __ \______
# | < \____ / ___/
# | | \ / /\___ \
# |____|__ \ /____//____ >
# \/ \/
#
# Configuration: /Users/fernand/.k9s/config.yml
# Logs: /var/folders/8c/hh6rqbgs5nx_c_8k9_17ghfh0000gn/T/k9s-fernand.log
# Screen Dumps: /var/folders/8c/hh6rqbgs5nx_c_8k9_17ghfh0000gn/T/k9s-screens-fernand
# To view k9s logs
tail -f /var/folders/8c/hh6rqbgs5nx_c_8k9_17ghfh0000gn/T/k9s-fernand.log
# Start K9s in debug mode
k9s -l debug
Key Bindings
Kubectx + Kubens
- kubectx: helps you switch between clusters back and forth:
- kubens: helps you switch between Kubernetes namespaces smoothly:
Installation
brew install kubectx
Kubectx
- Usage
USAGE:
kubectx : list the contexts
kubectx <NAME> : switch to context <NAME>
kubectx - : switch to the previous context
kubectx -c, --current : show the current context name
kubectx <NEW_NAME>=<NAME> : rename context <NAME> to <NEW_NAME>
kubectx <NEW_NAME>=. : rename current-context to <NEW_NAME>
kubectx -d <NAME> : delete context <NAME> ('.' for current-context)
(this command won't delete the user/cluster entry
that is used by the context)
kubectx -u, --unset : unset the current context
- Examples
$ kubectx minikube
Switched to context "minikube".
$ kubectx -
Switched to context "oregon".
$ kubectx -
Switched to context "minikube".
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "dublin" set.
Aliased "gke_ahmetb_europe-west1-b_dublin" as "dublin".
Kubens
- Usage
USAGE:
kubens : list the namespaces
kubens <NAME> : change the active namespace
kubens - : switch to the previous namespace
kubens -c, --current : show the current namespace
- Examples
$ kubens kube-system
Context "test" set.
Active namespace is "kube-system".
$ kubens -
Context "test" set.
Active namespace is "default".
kube-ps1
A script that lets you add the current Kubernetes context and namespace configured on kubectl to your Bash/Zsh prompt strings
Installation
$ brew update
$ brew install kube-ps1
Popeye
Popeye is a utility that scans live Kubernetes cluster and reports potential issues with deployed resources and configurations. https://github.com/derailed/popeye
Installation
brew install derailed/popeye/popeye
Command Line
# Dump version info
popeye version
# Popeye a cluster using your current kubeconfig environment.
popeye
# Popeye uses a spinach config file of course! aka spinachyaml!
popeye -f spinach.yml
# Popeye a cluster using a kubeconfig context.
popeye --context olive
# Stuck?
popeye help
Stern
Stern allows you to tail
multiple pods on Kubernetes and multiple containers within the pod. Each result is color coded for quicker debugging.
Installation
brew install stern
Usage
stern pod-query [flags]
Examples
Tail the gateway
container running inside of the envvars
pod on staging
stern envvars --context staging --container gateway
Tail the staging
namespace excluding logs from istio-proxy
container
stern -n staging --exclude-container istio-proxy .
Show auth activity from 15min ago with timestamps
stern auth -t --since 15m
Follow the development of some-new-feature
in minikube
stern some-new-feature --context minikube
View pods from another namespace
stern kubernetes-dashboard --namespace kube-system
Tail the pods filtered by run=nginx
label selector across all namespaces
stern --all-namespaces -l run=nginx
Follow the frontend
pods in canary release
stern frontend --selector release=canary
Pipe the log message to jq:
stern backend -o json | jq .
Only output the log message itself:
stern backend -o raw
Output using a custom template:
stern --template '{{.Message}} ({{.Namespace}}/{{.PodName}}/{{.ContainerName}})' backend
Output using a custom template with stern-provided colors:
stern --template '{{.Message}} ({{.Namespace}}/{{color .PodColor .PodName}}/{{color .ContainerColor .C
Lens
Lens is the only IDE you’ll ever need to take control of your Kubernetes clusters. It is a standalone application for MacOS, Windows and Linux operating systems. It is open source and free.