在这种情况下,我有多个Kubernetes集群,并希望同时在不同的集群上工作。(将保持为2个集群以使其简单)
如Kubernetes documentation中所述,我配置了两个集群(将称之为dc 1-main和dc 2-main)
我使用应用程序支持用户(例如appuser)登录kubectl所在的节点
在同一时间的两个会话管理服务器我登录与appuser。
在本例中,我想使用kubectl来管理每个会话上的一个上下文。
但是,如果我设置活动上下文如下,两个会话到服务器反映得到的变化,因为两者都引用相同的配置文件(其中有两个上下文)
kubectl config use-context dc1-main
字符串
或者文档中的另一个选项是将上下文与命令作为参数传递,这使得命令非常复杂。
kubectl --context="dc2-main" get nodes
型
我正在寻找一种简单的方法来快速更改此内容,以在不影响其他会话的情况下更改上下文。这很可能是一个环境变量。但不确定这是否是最简单的方法。
我浏览了kubectl项目GitHub,发现很久以前就有人要求修改类似的东西,并讨论了env变量。
有更好的建议吗?
4条答案
按热度按时间b5lpy0ml1#
标准Kubernetes客户端库支持
$KUBECONFIG
环境变量。这意味着几乎所有工具都支持它,包括Helm和任何本地构建的工具。您可以将其设置为特定于集群的配置的路径。由于它是一个环境变量,因此每个shell都有自己的副本。字符串
在shell点文件中,可以编写一个简单的shell函数来设置此
型
在我的使用中,每个kubeconfig文件中只有一个上下文(user/host/credentials),所以我几乎从不使用
kubectl config
系列命令。这意味着,无论您最初如何设置kubeconfig文件,您都需要为每个集群重复这些步骤,或者手动拆分现有的kubeconfig文件(它是YAML,所以它相当可行)。型
想要编写配置的工具也会使用这个变量,对我来说,如果我想重新创建我的minikube环境,它通常会出现。你可能会发现
chmod 0400 "$KUBECONFIG"
在创建这些文件后保护它们很有用。vuv7lop32#
不是最好的解决方案,但对我来说最快的解决方案之一是创建VM或远程示例(如免费的m2.micro AWS),并通过SSH\VM UI进行操作,具有多种配置。
不过,你可以看看这个THIS INSTRUCTION,在这里你可以在不同的shell会话中导出各种kubeconfig。
gudnpqoy3#
大卫迷宫的答案是基于kubectl的最佳实践
我推荐你用途:
在TUI中,你可以在单独的控制台会话中使用它,它会缓存kube的文件
字符串
oxalkeyp4#
我想加上我的快速解决方案作为答案。
创建两个别名如下解决了部分问题。
字符串
这给了我两个快速的命令来访问两个上下文。
但问题是如果我使用像helm这样的命令。