Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
applejag/kubectl-klock: A kubectl plugin to render watch output in a more readable fashion

applejag/kubectl-klock: A kubectl plugin to render watch output in a more readable fashion

17 hours ago

kubectl-klock

!demonstration animation

Latest Release</a> REUSE status</a>

A kubectl plugin to render the kubectl get pods --watch output in a much more readable fashion.

Think of it as running watch kubectl get pods, but instead of polling, it uses the regular watch feature to stream updates as soon as they occur.

Installation

Krew

krew status</a>

kubectl krew install klock

Snap

klock</a>

sudo snap install klock

Scoop

!Scoop

scoop bucket add applejag https://github.com/applejag/applejag-bucket
scoop install applejag/kubectl-klock

Nix

Packaging status</a>

nix-shell -p kubectl-klock

Pre-built binaries

You can download pre-built binaries from the latest GitHub release:

Download the one that fits your OS and architecture, extract the tarball/zip file, and move the kubectl-klock binary to somewhere in your PATH. For example:

tar -xzf kubectl-klock_linux_amd64.tar.gz
sudo mv ./kubectl-klock /usr/local/bin

From source

Requires Go 1.21 (or later).

go install github.com/applejag/kubectl-klock@latest

Usage

Supports a wide range of flags

kubectl klock <resource> [name(s)] [flags]

Examples

# Watch all pods
kubectl klock pods

Watch all pods with more information (such as node name)

kubectl klock pods -o wide

Watch a specific pod

kubectl klock pods my-pod-7d68885db5-6dfst

Watch a subset of pods, filtering on labels

kubectl klock pods --selector app=my-app kubectl klock pods -l app=my-app

Watch all pods in all namespaces

kubectl klock pods --all-namespaces kubectl klock pods -A

Watch other resource types

kubectl klock cronjobs kubectl klock deployments kubectl klock statefulsets kubectl klock nodes

Watch all pods, but restart the watch when your ~/.kube/config file changes,

such as when using "kubectl config use-context NAME"

kubectl klock pods --watch-kubeconfig kubectl klock pods -W

There's also some hotkeys available:

→/l/pgdn next page      /        filter by text                  ctrl+c quit
  ←/h/pgup prev page      enter    close the filter input field    ?/esc  close help
  g/home   go to start    esc      clear the applied filter        d      show all deleted
  G/end    go to end      ↓/ctrl+n show next suggestion            f      toggle fullscreen
                          ↑/ctrl+p show previous suggestion
                          tab      accept a suggestion

Features

  • Pagination, for when the terminal window gets too small (height-wise)
  • Same output format as kubectl get
  • Watch arbitrary resources, just like kubectl get [name]
  • Filter results
  • Auto updating age column.
  • Colors on statuses (e.g Running) and fractions (e.g 1/1) to make
them stand out more.
  • Restart watch when kubeconfig file changes (flag: --watch-kubeconfig, -W),
such as when changed by
kubectx.
  • Shows deleted table rows for a short duration,
controllable via the --hide-deleted=10s flag and KLOCK_HIDE_DELETED=10s environment variable. Can be disabled to always show deleted rows by setting --hide-deleted=false

Environment variables

Command-line flags can be controlled via environment variables:

export KLOCK_ALL_NAMESPACES="true"                     # --all-namespaces
export KLOCK_FIELD_SELECTOR="status.phase!=Succeeded"  # --field-separator
export KLOCK_HIDE_DELETED="false"                      # --hide-deleted
export KLOCK_LABEL_COLUMNS="app.kubernetes.io/name"    # --label-columns
export KLOCK_OUTPUT="wide"                             # --output
export KLOCK_SELECTOR="team!=frontend"                 # --selector
export KLOCK_WATCH_KUBECONFIG="true"                   # --watch-kubeconfig

The command-line flags have precedence over the environment variables. So if you set KLOCK_ALL_NAMESPACES=true then you can revert the value by passing the flag --all-namespaces=false

Color themes

Klock uses kubecolor's coloring logic and behavior when coloring its output. See:

[!NOTE]
If you have a light background, then switch kubectl-klock to use the light
theme by setting the KUBECOLOR_PRESET=light
environment variable:
>
> export KUBECOLOR_PRESET="light"
> kubectl klock --help >

Color settings that klock uses:

  • KUBECOLOR_THEME_BASE_DANGER for rows with errors
  • KUBECOLOR_THEME_BASE_MUTED for "No resources found"
  • KUBECOLOR_THEME_BASE_MUTED for deleted rows
  • KUBECOLOR_THEME_BASE_MUTED for status line
  • KUBECOLOR_THEME_BASE_SECONDARY for "FILTER:" prompt
  • KUBECOLOR_THEME_BASE_WARNING for "No resources visible" when filtering
  • KUBECOLOR_THEME_DATA_DURATIONFRESH for AGE: 12h when below threshold
  • KUBECOLOR_THEME_DATA_RATIO_EQUAL for READY: 1/1
  • KUBECOLOR_THEME_DATA_RATIO_UNEQUAL for READY: 0/1
  • KUBECOLOR_THEME_STATUS_ERROR for STATUS: CrashLoopBackOff
  • KUBECOLOR_THEME_STATUS_SUCCESS for STATUS: Running
  • KUBECOLOR_THEME_STATUS_WARNING for STATUS: Terminating
  • KUBECOLOR_THEME_TABLE_COLUMNS for table columns
  • KUBECOLOR_THEME_TABLE_HEADER for table header
You can configure these colors either via environment variables or via the ~/.kube/color.yaml config file

Completion

To get completion when writing kubectl klock, you need to add ./bin/kubectl_complete-klock to your PATH.

For example:

curl -sSfL https://github.com/applejag/kubectl-klock/raw/main/bin/kubectl_complete-klock -o ~/.local/bin/kubectl_complete-klock
chmod -v +x ~/.local/bin/kubectl_complete-klock
Chat with me