Merging kubeconfig Files

Apr 25, 2025

3 min read

When working with multiple Kubernetes or OpenShift clusters, you’ll often have multiple kubeconfig files. Kubernetes provides tools to merge these configurations into a single file.

Prerequisites

  • Access to the Kubernetes or OpenShift clusters you want to manage

  • Existing kubeconfig files for each cluster

  • kubectl or oc command-line tools installed

Step-by-Step Merge Process

1. Backup Existing Configuration

Before merging, create a backup of your existing kubeconfig file to ensure you can revert to the original configuration if needed.

cp ~/.kube/config ~/.kube/config.backup

2. Set the KUBECONFIG Environment Variable

The KUBECONFIG environment variable allows you to specify multiple kubeconfig files. These files will be merged automatically by kubectl.

export KUBECONFIG=~/.kube/config:/path/to/second-kubeconfig

You can add as many kubeconfig files as needed, separating them with colons (on Linux/macOS) or semicolons (on Windows).

3. Merge the Files

Use the kubectl config view command with the --merge and --flatten options to merge the configurations into a single file.

kubectl config view --merge --flatten > ~/.kube/merged_kubeconfig

4. Replace the Original Configuration

Move the merged configuration to the default location.

mv ~/.kube/merged_kubeconfig ~/.kube/config

5. Verify the Merged Configuration

Ensure that the merged configuration works correctly by exploring and managing your contexts:

Listing Available Contexts

To view all available contexts in your merged configuration:

kubectl config get-contexts

This command displays a table with all contexts in your kubeconfig file, including: - The current active context (marked with an asterisk *) - Context names - Cluster names - Authentication users - Namespaces (if specified)

For a more detailed view of your entire kubeconfig:

kubectl config view

Checking the Current Context

To see which context is currently active:

kubectl config current-context

Switching Between Contexts

To switch to a different context:

kubectl config use-context <context-name>