kubectx switched context in every terminal, not just this one
Routes kubectx global-context surprises. Use when switching context in one shell changes it for all shells and scripts. Not for switch failures or unknown names.
A kubeconfig holds exactly one current-context, so kubectx rewrites the shared file - every tab, script, and tool follows, including the shell where you were mid-incident on dev. That is by design, not a bug. For per-shell isolation use kubech (per-terminal contexts), or point KUBECONFIG at a per-shell copy of the config in the shells that must stay put.
The error
Switched to context "prod". (and every other shell now targets prod too)What to do
- Confirm the blast radius:
kubectl config current-contextin the other shell. Expected: It also prints the new context.
- Option A - per-shell isolation with kubech:
# install kubech, then per shell:
kubech [context]Expected: Only that shell switches.
- Option B - per-shell kubeconfig copy:
cp ~/.kube/config /tmp/kube-dev.yaml
export KUBECONFIG=/tmp/kube-dev.yaml
kubectx [context]Expected: Other shells keep the original context.
Verify isolation: run kubectl config current-context in both shells. Expected: Each prints its own context.
When this applies
- context changed for all terminals after one kubectx
- scripts that broke because an interactive shell switched context mid-run
- multi-cluster work where tabs must stay on different clusters
When it does NOT apply
- the switch itself failing
- wanting the global behavior (that is the default, nothing to fix)
Works with
kubectx (ahmetb/kubectx); kubech for the fix
CI job switched context and later steps hit the wrong cluster
Same shared-file cause. Give the job its own KUBECONFIG copy.
Why it happens
kubectl resolves one current-context per kubeconfig file, and every process reads the same file. kubectx edits that single field in place, so there is no such thing as a per-shell switch without a per-shell file.
Edge cases
- Tools that cache the context at startup (k9s, IDE plugins) may lag behind a switch - restart them.
- kubech-style isolation needs shell integration; plain ssh sessions still share the file.
Resolved from
gh:DevOpsHiveHQ/kubech - https://github.com/DevOpsHiveHQ/kubech