禁用 kubectl config view --flatten 发生的上下文切换

Disabling context-switching that happens with kubectl config view --flatten

我有一个用于 start/stop 虚拟机的命令行实用程序,我正在扩展它以管理 Kubernetes 集群。它可以保存当前的 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 使用了错误的命令吗?是否有一个合并选项不会对活动上下文进行任何更改?

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

2。安装 kubectx

第二个选项会让你的生活更轻松,当然对于这两种解决方案,你都必须在 KUBECONFIG

中设置你的配置文件

为什么 kubectl 会这样。

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

因此,说 kubectl "switches active context" 并不完全准确。它将上下文 保存到您指向 的位置,并从您指向 的位置读取 [可能是另一个] 上下文 current kubectl 运行 的 current-context 是根据其命令行参数、kubeconfig 文件的内容及其列出的顺序设置的在 $KUBECONFIG 变量中。

现在回到问题。

问:

Is there a way to prevent the active context from switching unless I want it to? and is there a merging option that makes no changes to the active context?

答:

无法阻止 "active context" 切换,因为存储在默认和其他 kubeconfig 文件中的 current-context 被分配为 "active" 用于 current 运行 每次 kubectl 启动。此外,kubectl 不应被视为纯文本解析和合并工具。

谈到您所描述的特定情况下的 默认 配置,要重新使用以前使用过的或首选的上下文或您认为 "is current" 的上下文,您应该列出具有该上下文的 kubeconfig 文件 第一个 $KUBECONFIG 变量中:

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

注意。如果kubeconfig文件的none包含not emptycurrent-context值,会出现错误:error: current-context is not set .

请参阅Organizing Cluster Access Using kubeconfig Files