For those managing OpenShift clusters, the oc
tool manages all the OpenShift resources with handy commands for OpenShift and Kubernetes. The OpenShift Client CLI (oc) project is built on top of kubectl
adding built-in features to simplify interactions with an OpenShift cluster.
Much like the kubectl
, the oc
cli tool provides a feature to Extend the OpenShift CLI with plug-ins. The oc plugins
feature is a client-side feature to faciliate interactions with extensions commands; found in the current user’s path. There is an ecosystem of plugins through the community and the Krew Plugin List.
These plugins include:
- cost accessess Kubernetes cost allocation metrics
- outdated displays all out-of-date images running in a Kubernetes cluster
- pod-lens shows pod-related resource information
- k9s is a terminal based UI to interact with your Kubernetes clusters.
- sample-cli-plugin which is a simple example to show how to switch namespaces in k8s. I’m not entirely certain that this works with OpenShift.
These plugins have a wide range of support and code. Some of the plugins are based on python, others are based on go and bash
.
oc
expands the plugin search path pkg/cli/kubectlwrappers/wrappers.go
in plugin.ValidPluginFilenamePrefixes = []string{"oc", "kubectl"}
so whole new OpenShift specific plugins are supported. The OpenShift team has also released a number of plugins:
- oc-mirror manages OpenShift release, operator catalog, helm charts, and associated container images for mirror registries that support OpenShift environments
- oc-compliance facilitates using the OpenShift Compliance operator.
Many of these extensions/plugins are installed using krew
; krew is a plugin manager for kubectl. Some users create a directory .kube/plugins
and install their plugins in that folder. The plugins folder is then added to the user’s path.
Creating your own Extension
- Check to see if any plugins exist:
$ oc plugin list
The following compatible plugins are available:
/Users/user/.kube/plugins/oc-test
If none exist, it’ll prompt you that none are found in the path, and you can install from krew
.
- Create a new file
oc-test
#! /usr/bin/env bash
echo "Execution Time: $(date)"
echo ""
ps -Sf
echo ""
echo "Arguments: $@"
echo "Environment Variables: "
env
echo ""
oc version --client
- Add the file to the path.
export PATH=~/.kube/plugins:$PATH
- Execute the
oc plugin test
(note the oc is stripped off)
Execution Time: Wed Mar 30 11:22:19 EDT 2022
UID PID PPID C STIME TTY TIME CMD
501 3239 3232 0 15Mar22 ttys000 0:01.39 -zsh
501 80267 3239 0 17Mar22 ttys000 0:00.03 tmux
501 54273 11494 0 Tue10AM ttys001 0:00.90 /bin/zsh -l
501 80319 80269 0 17Mar22 ttys002 0:00.30 -zsh
501 2430 2429 0 15Mar22 ttys003 0:03.17 -zsh
501 78925 2430 0 11:22AM ttys003 0:00.09 bash /Users/user/.kube/plugins/oc-test test
501 80353 80269 0 17Mar22 ttys004 0:02.07 -zsh
501 91444 11494 0 18Mar22 ttys005 0:01.55 /bin/zsh -l
Arguments: test
Environment Variables:
SHELL=/bin/zsh
TERM=xterm-256color
ZSH=/Users/user/.oh-my-zsh
USER=user
PATH=/Users/user/.kube/plugins:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin
PWD=/Users/user/Downloads
LANG=en_US.UTF-8
HOME=/Users/user
LESS=-R
LOGNAME=user
SECURITYSESSIONID=user
_=/usr/bin/env
Client Version: 4.10.6
For the above, a simple plugin demonstration is shown.