kubernetes Kubectl如何同时使用不同的集群(上下文)

c9qzyr3d  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(4)|浏览(136)

在这种情况下,我有多个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变量。
有更好的建议吗?

b5lpy0ml

b5lpy0ml1#

标准Kubernetes客户端库支持$KUBECONFIG环境变量。这意味着几乎所有工具都支持它,包括Helm和任何本地构建的工具。您可以将其设置为特定于集群的配置的路径。由于它是一个环境变量,因此每个shell都有自己的副本。

export KUBECONFIG="$HOME/.kube/dc1-main.config"
kubectl get nodes

字符串
在shell点文件中,可以编写一个简单的shell函数来设置此

kubecfg() {
  export KUBECONFIG="$HOME/.kube/$1.config"
}


在我的使用中,每个kubeconfig文件中只有一个上下文(user/host/credentials),所以我几乎从不使用kubectl config系列命令。这意味着,无论您最初如何设置kubeconfig文件,您都需要为每个集群重复这些步骤,或者手动拆分现有的kubeconfig文件(它是YAML,所以它相当可行)。

# specifically for Amazon Elastic Kubernetes Service
kubecfg dc1-main
aws eks update-kubeconfig --name dc1-main ...
kubecfg dc2-main
aws eks update-kubeconfig --name dc2-main ...


想要编写配置的工具也会使用这个变量,对我来说,如果我想重新创建我的minikube环境,它通常会出现。你可能会发现chmod 0400 "$KUBECONFIG"在创建这些文件后保护它们很有用。

vuv7lop3

vuv7lop32#

不是最好的解决方案,但对我来说最快的解决方案之一是创建VM或远程示例(如免费的m2.micro AWS),并通过SSH\VM UI进行操作,具有多种配置。
不过,你可以看看这个THIS INSTRUCTION,在这里你可以在不同的shell会话中导出各种kubeconfig。

gudnpqoy

gudnpqoy3#

大卫迷宫的答案是基于kubectl的最佳实践
我推荐你用途:

在TUI中,你可以在单独的控制台会话中使用它,它会缓存kube的文件

k9s --context eks-1
k9s --context eks-2

字符串

oxalkeyp

oxalkeyp4#

我想加上我的快速解决方案作为答案。
创建两个别名如下解决了部分问题。

alias kdc1='kubectl --context="dc1-main"'
alias kdc2='kubectl --context="dc2-main"'

字符串
这给了我两个快速的命令来访问两个上下文。
但问题是如果我使用像helm这样的命令。

相关问题