Kubernetes: Krew plugins manager, and useful kubectl plugins list

By | 10/01/2021
 

One of the most valuable features of the kubectl utility is its plugins.

Of course, there are things like Lens, widely used by developers who don’t like working in the terminal, or tools like k9s, but kubectl‘s plugins worth for a dedicated post.

So, in this post, we will install Krew – kubectl‘s plugins manager, and will take a look at the list of the plugins, that are used by me during work.

Krew – plugins manager for the kubectl

Recently, kubectl got its own plugins manager, Krew.

It has a plugins repository used to install and upgrade plugins.

On the Arch Linux krew can be installed from AUR:

Arch Linux:

[simterm]

$ yay -S krew

[/simterm]

Update its packages list:

[simterm]

$ kubectl krew update

[/simterm]

Look for a plugin, for example,  topology:

[simterm]

$ kubectl krew search topology
NAME      DESCRIPTION                                INSTALLED
topology  Explore region topology for nodes or pods  no

[/simterm]

Install it:

[simterm]

$ kubectl krew install topology
Updated the local copy of plugin index.
  Upgrades available for installed plugins:
    * rbac-tool v1.2.1 -> v1.3.0
Installing plugin: topology
Installed plugin: topology
\
 | Use this plugin:
 |      kubectl topology
 | Documentation:
 |      https://github.com/bmcustodio/kubectl-topology
/

[/simterm]

And check:

[simterm]

$ kubectl topology help
Provides insight into the topology of a Kubernetes cluster.

Usage:
  kubectl-topology [command]

Available Commands:
  help        Help about any command
  node        Provides insight into the distribution of nodes per region or zone.
  pod         Provides insight into the distribution of pods per region or zone.

[/simterm]

kubectl – useful plugins list

At the end of this post I’ll add a couple of links with a similar plugins list, and here below let’s take a look at the best, as for me, plugins that I’m using during work.

kubectl-topology

Let’s start from the kubectl-topology plugin that allows to display all cluster’s WorkerNodes, their regions, and pods located on each node:

kubectl-resources

The kubectl-resources plugin can display extended information about limits and resources used by pods on WorkerNodes.

Install with Go:

[simterm]

$ go get github.com/howardjohn/kubectl-resources

[/simterm]

kubectl-free

The kubectl-free plugin is similar to the free utility in Linux – it will display information about used and available resources on WorkerNodes.

Install it by downloading an archive from the release page, unzip, and copy to the /usr/local/bin:

[simterm]

$ cd /tmp/
$ wget https://github.com/makocchi-git/kubectl-free/releases/download/v0.2.0/kubectl-free_0.2.0_Linux_x86_64.zip
$ unzip kubectl-free_0.2.0_Linux_x86_64.zip
$ sudo cp kubectl-free_0.2.0_Linux_x86_64/kubectl-free /usr/local/bin/

[/simterm]

And run it:

kubecolor

kubecolor is very useful to make kubectl‘s output more readable by colonizing it.

Install with Go:

[simterm]

$ go install github.com/dty1er/kubecolor/cmd/kubecolor@latest

[/simterm]

Add an alias to the  ~/.bashrc:

alias kk="kubecolor"

And result:

kubectl-watch

An improved variant of the kubectl --watch. The project’s page is here>>>.

Install:

[simterm]

$ git clone https://github.com/lee0c/kubectl-watch.git
$ cd kubectl-watch
$ chmod +x kubectl-watch
$ sudo mv  kubectl-watch /usr/local/bin/

[/simterm]

Check:

[simterm]

$ kubectl plugin list
The following kubectl-compatible plugins are available:

/usr/local/bin/kubectl-watch
...

[/simterm]

And run:

kubectl-clogs

An advanced logs viewer. Similar to the kubectl logs -f, but can tail logs from all pods in a namespace. More details here>>>.

Install:

[simterm]

$ go install github.com/ivkalita/kubectl-clogs/cmd/kubectl-clogs@latest

[/simterm]

And check logs from the istio-system namespace:

kubectl-who-can

kubectl-who-can is used to display RBAC permissions and accesses.

Install with Krew:

[simterm]

$ kubectl krew install who-can

[/simterm]

And check who is able to delete pods in the default namespace:

kubectl-rolesum

kubectl-rolesum is also used to work with the Kubernetes RBAC to check permissions.

Install:

[simterm]

$ kubectl krew install rolesum

[/simterm]

And check permissions for the kiali-service-account ServiceAccount in the istio-system namespace:

ketall

ketall will display indeed all resources including Secrets, ServiceAccount, Roles, Binding and so on, and not only Pods, Services, Daemonsets, Deployments, and ReplicaSets, as it is when using the kubectl get all.

Install:

[simterm]

$ kubectl krew install get-all

[/simterm]

An example of the  kubectl get all command’s output:

And with the ketallkubectl get-all:

kubectl-status

kubectl-status can display extended information about pods’ statuses, nodes, deployments, services, and so on.

Install:

[simterm]

$ kubectl krew install status

[/simterm]

And check Kubernetes WorkerNodes status with the role: data-workers label set:

Pod-Dive

Pod-Dive will display information about a Kubernetes Pod – its WorkerNode, a namespace, containers in that pod, and other pods, that are running on the same WorkerNode.

Install:

[simterm]

$ kubectl krew install pod-dive

[/simterm]

And check a Pod:

kubectl-janitor

kubectl-janitor – a “cleaner” for a Kubernetes cluster. Can find problematic resources, such as unscheduled pods, failed jobs, volumes, etc.

Install:

[simterm]

$ kubectl krew install janitor

[/simterm]

And find all pods that are not scheduled to a WorkerNode:

kubectl-cf

And the last plugin for today  – kubectl-cf.

Actually, there are a lot of plugins to simply work with kubectl‘s contexts, but I’m using dedicated files for clusters instead of dedicated contexts:

[simterm]

$ ls -1 ~/.kube/ | grep kubeconfig
dev-1-18.kubeconfig
prod-1-18.kubeconfig
stage-1-18.kubeconfig
test-1-18.kubeconfig

[/simterm]

For a faster switch between them, we can use the kubectl-cf plugin, that will work via creating symlinks to the  ~/.kube/config file.

Pay attention, that all files must have the .kubeconfig extension.

Install it – clone its repository, build, and copy to the /usr/local/bin:

[simterm]

$ git clone https://github.com/spongeprojects/kubectl-cf.git
$ cd kubectl-cf/
$ go build -o kubectl-cf
$ sudo cp kubectl-cf /usr/local/bin/

[/simterm]

Useful links