We have a set of kubernetes yamls which is management by kustomize and they will be deployed to different clusters. Each cluster is slightly different which means every environment will have a sub directory (environ/<envname>) including some special kustomization overwrite.
We will manually deploy new version to different environments by command kubeclt apply -k environ/env. But sometimes we do stupid thing like this: kubectl apply -k environ/env1 to the cluster env2 . So is there some method to stop doing a kubectl apply to a wrong environment?
This is a community wiki answer. Feel free to expand it.
If you are aware that you made a mistake and want to cancel the command right away than there are some options for you:
$ kill -9 $! will kill the most recent process executed by the command ($! represents its process ID).
Suspend the current process by pressing Ctrl+z and then kill it using kill -9 %% or kill -9 %+. More details regarding this approach can be found here.
EDIT:
Including the solution proposed by VASャ from the comments:
I'd use shell scripts and different configs for each cluster, like that:
deploy-cluster1.shwhere I'd havekubectl --kubeconfig .kube/cluster1 apply -k environ/cluster1or even shorter:deploy.sh env1wheredeploy.shcontains:kubectl --kubeconfig .kube/$1 apply -k environ/$1
More details regarding that approach can be found here.
Recently I got a new solution here.
direnv which can change env after switch into different directories this force me to switch the KUBECONFIG env. Follow Mastering the KUBECONFIG file to get more details.