Using OpenShift Plugin for oc

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:

  1. cost accessess Kubernetes cost allocation metrics
  2. outdated displays all out-of-date images running in a Kubernetes cluster
  3. pod-lens shows pod-related resource information
  4. k9s is a terminal based UI to interact with your Kubernetes clusters.
  5. 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:

  1. oc-mirror manages OpenShift release, operator catalog, helm charts, and associated container images for mirror registries that support OpenShift environments
  2. 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

  1. 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.

  1. 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
  1. Add the file to the path.
export PATH=~/.kube/plugins:$PATH
  1. 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.

Reference

  1. Getting started with the OpenShift CLI
  2. Extending the OpenShift CLI with plug-ins
  3. https://cloud.redhat.com/blog/augmenting-openshift-cli-with-plugins
  4. https://cloudcult.dev/tcpdump-for-openshift-workloads/

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.