Wildfish logo
Wildfish logo


28 July 2023Dan Bate

Managing multiple Kubenetes clusters

  • k8senv
  • kubernetes
Managing multiple Kubenetes clusters

Kubernetes has become the de facto standard for container orchestration, making it easier to manage large-scale applications. However, managing multiple kubernetes clusters can be a daunting task, particularly if you are managing production and development environments. In this blog post, we'll introduce you to a tool that makes managing multiple kubernetes clusters a breeze: k8senv.

What is k8senv and why use it?

k8senv is a python package that helps you manage multiple kubernetes clusters within a single project. The tool stores cluster configurations inside a project's root directory and forces you to specify an environment when running kubectl commands, reducing the risk of running the wrong commands on the wrong cluster or namespace.

Instructions for using k8senv:

The tool can be installed via pip using:

$> pip install -e git@github.com:wildfish/k8senv.git

To setup the tool for a project run:

$> k8senv init

This will create a configuration file (.k8senv.yaml) in the working directory which is setup to manage 2 environments (prod and stage). Along with this it will create a .kube directory which is used to store the cluster configuration files for each project (the paths and environment names can all be changed using command line arguments).

Aswell as generating the config files for the tool, the gitignore file will also be updated to exclude the sensitive files from source control.

Once the tool is setup, a cluster configuration needs to be generated for each environment. To do this, create the cluster configuration based on your providers instructions, storing the output in a file called <env>.yaml in the .kube directory.

For example, using k3d, to save the cluster to the stage config run:

$> KUBECONFIG="./.kube/stage.yaml" k3d cluster create test


$> k3d kubeconfig get test > ./.kube/stage.yaml

How to run k8senv:

To run a command, where kubectl would normally be used, replace it with k8senv run <env> -- where env is the name of the environment. For example, to print the config for the stage environment run:

$> k8senv run stage -- config view

To view all pods in the prod environment run:

$> k8senv run prod -- get pod

The configs are normal kubernetes configs so anything you can do with kubectl can be done with k8senv. So to further configure the environment such as adding a namespace you can just run the same kubectl commands. For example:

$> k8senv -v run stage -- config set-context --current --namespace=stage-ns

Will set the namespace in the config to stage-ns.

The benefits of using the k8senv tool

k8senv is a really useful tool that can help you manage separate production and staging environments, keep cluster configurations organised, avoid misconfigurations and improve collaboration. If you're looking to streamline your kubernetes cluster management, give k8senv a try.

Looking for additional technical support? Raise an issue on the Github project and include the link.

You must accept cookies and allow javascript to view and post comments


Wildfish logo


We really are quite an approachable bunch! Simply give us a call or email. Alternatively if you’d prefer, drop into the office for a chat!