禁用 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
会这样。
- 实际上没有系统范围的
current-context
值。您可能在 $KUBECONFIG
变量指定的 kubeconfig 文件或使用参数 --kubeconfig=
指定的其他文件中有多个 current-context
值。
- 当
$KUBECONFIG
变量为空且未提供参数 --kubeconfig=
时,kubectl
使用默认的 kubeconfig 文件 ~/.kube/config
。
- 每次启动
kubectl
时,它都会从 kubeconfig 文件中读取并合并值,以构建其针对 current 运行 的配置。
- 合并 kubeconfig 文件时,在有冲突的值中,第一个 文件中的值获胜。
- 当您使用命令将
kubectl
指向 use-context
时
KUBECONFIG=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
.
我有一个用于 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
会这样。
- 实际上没有系统范围的
current-context
值。您可能在$KUBECONFIG
变量指定的 kubeconfig 文件或使用参数--kubeconfig=
指定的其他文件中有多个current-context
值。 - 当
$KUBECONFIG
变量为空且未提供参数--kubeconfig=
时,kubectl
使用默认的 kubeconfig 文件~/.kube/config
。 - 每次启动
kubectl
时,它都会从 kubeconfig 文件中读取并合并值,以构建其针对 current 运行 的配置。 - 合并 kubeconfig 文件时,在有冲突的值中,第一个 文件中的值获胜。
- 当您使用命令将
kubectl
指向use-context
时KUBECONFIG=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
.