禁用kubectl配置视图--flatten发生的上下文切换

时间:2019-08-12 14:56:38

标签: kubernetes kubectl

我有一个命令行实用程序来启动/停止扩展到管理Kubernetes集群的VM。它可以当前保存kubeconfig,以及将新配置合并到用户现有的~/.kube/config中-但是我正在使用的命令(来自How to merge kubectl config file with ~/.kube/config?)也会切换活动上下文:

KUBECONFIG=<temporary_path_to_newly_created_config>:~/.kube/config kubectl config view --flatten`

是否有一种方法可以阻止活动上下文切换,除非我希望这样做?我在kubectl config view --flatten上使用了错误的命令,是否有一个合并选项没有对活动上下文进行任何更改?

2 个答案:

答案 0 :(得分:0)

1。使用kubectl config use-context my-cluster-name

2。安装kubectx

第二个选项将使您的生活更加轻松,当然,对于两种解决方案,您都必须在KUBECONFIG中设置配置文件

答案 1 :(得分:0)

为什么kubectl会表现得如此。

  1. 实际上,没有系统范围的current-context值。在current-context变量中指定的kubeconfig文件中或在其他使用参数$KUBECONFIG指定的文件中,您可能有多个--kubeconfig=值。
  2. ~/.kube/config变量为空并且未提供参数kubectl时,存在$KUBECONFIG使用的默认kubeconfig文件--kubeconfig=
  3. 每次启动kubectl时,它都会从kubeconfig文件中读取并合并值,以为当前运行构建其配置。
  4. 在合并kubeconfig文件时,在相互冲突的值中,第一个文件中的一个将获胜。
  5. 使用命令将kubectl定向到use-contextKUBECONFIG=config1:config2 kubectl config use-context my_context, 它将上下文保存到$KUBECONFIG变量(config1)中 first 列出的文件中。

因此,说kubectl“切换活动上下文”并不完全准确。它将上下文保存到您指向的位置,并从您指向的位置读取[可能是另一个]上下文当前 current-context运行的kubectl是基于其命令行参数,kubeconfig文件的内容以及它们在$KUBECONFIG中列出的顺序设置的变量。

现在回到问题。

Q:

  

有没有办法防止活动上下文切换,除非我   想要吗?并且有一个合并选项,不会对   活动情境?

A:

由于在当前运行current-context被分配为“活动”,因此无法防止切换“活动上下文” >每次 kubectl启动。另外,kubectl不应被视为纯文本解析和合并工具。

在您描述的特定情况下谈论默认配置,要重用先前使用或首选的上下文,或者您认为“当前”的上下文,应列出带有以下内容的kubeconfig文件: $KUBECONFIG变量中该上下文第一个

KUBECONFIG=~/.kube/config:new_config_to_merge kubectl config view --flatten > ...

注意。如果kubeconfig文件中的包含不为空current-context值,则会出现错误:error: current-context is not set

请参阅Organizing Cluster Access Using kubeconfig Files