Need help with sample-cli-plugin?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

201 Stars 88 Forks Apache License 2.0 512 Commits 1 Opened issues


Sample kubectl plugin

Services available


Need anything else?

Contributors list


This repository implements a single kubectl plugin for switching the namespace that the current KUBECONFIG context points to. In order to remain as indestructive as possible, no existing contexts are modified.

Note: go-get or vendor this package as

This particular example demonstrates how to perform basic operations such as:

  • How to create a new custom command that follows kubectl patterns
  • How to obtain a user's KUBECONFIG settings and modify them
  • How to make general use of the provided "cli-runtime" set of helpers for kubectl and third-party plugins

It makes use of the genericclioptions in to generate a set of configuration flags which are in turn used to generate a raw representation of the user's KUBECONFIG, as well as to obtain configuration which can be used with RESTClients when sending requests to a kubernetes api server.


The sample cli plugin uses the client-go library to patch an existing KUBECONFIG file in a user's environment in order to update context information to point the client to a new or existing namespace.

In order to be as non-destructive as possible, no existing contexts are modified in any way. Rather, the current context is examined, and matched against existing contexts to find a context containing the same "AuthInfo" and "Cluster" information, but with the newly desired namespace requested by the user.


This is an example of how to build a kubectl plugin using the same set of tools and helpers available to kubectl.


# assumes you have a working KUBECONFIG
$ GO111MODULE="on" go build cmd/kubectl-ns.go
# place the built binary somewhere in your PATH
$ cp ./kubectl-ns /usr/local/bin

you can now begin using this plugin as a regular kubectl command:

update your configuration to point to "new-namespace"

$ kubectl ns new-namespace

any kubectl commands you perform from now on will use "new-namespace"

$ kubectl get pod NAME READY STATUS RESTARTS AGE new-namespace-pod 1/1 Running 0 1h

list all of the namespace in use by contexts in your KUBECONFIG

$ kubectl ns --list

show the namespace that the currently set context in your KUBECONFIG points to

$ kubectl ns

Use Cases

This plugin can be used as a developer tool, in order to quickly view or change the current namespace that kubectl points to.

It can also be used as a means of showcasing usage of the cli-runtime set of utilities to aid in third-party plugin development.


You can "uninstall" this plugin from kubectl by simply removing it from your PATH:

$ rm /usr/local/bin/kubectl-ns


HEAD of this repository will match HEAD of and

Where does it come from?

is synced from Code changes are made in that location, merged into and later synced here.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.