我正在使用kops在AWS中创建/管理kubernetes集群。
我创建了一个试验/中间实例来访问所有集群。
我注意到,即使我们创建了多个SSH会话(使用同一用户),并且如果我将上下文更改为cluster-a,它也会在其他会话中更改为cluster-a。
问题是,如果我们想同时管理不同的集群,则每次都需要切换上下文。如果有两个以上的人正在使用该实例,则很难维持上下文切换。
可能会出现这样的问题,为什么我们要使用多个集群,而实际上是有多个并行开发的流和模块,并且都同时进行测试。
有什么方法可以不必切换上下文并且kops
/ kubectl
可以自动理解集群上下文吗?
示例:如果我正在从directory-a
执行命令,那么它将自动理解群集a.k8s.local
。只是考虑到这一点,任何其他解决方案都受到欢迎。
最后的解决方案是为所有集群创建单独的试验实例,我试图避免这些实例不能提供太多价值,而只会增加成本。
答案 0 :(得分:2)
我正使用您正在寻找的解决方案:当我位于特定目录中时,我可以管理特定集群。
首先,让我解释一下为什么即使在不同的SSH会话上也不能同时在多个群集上工作。
当您执行kubectl config use-context
切换当前上下文时,实际上是在current-context: your-context
中修改~/.kube/config
。因此,如果您的一个团队成员正在切换上下文,那么这也适用于您的其他团队成员,尤其是当他们连接到同一用户时。
现在,以下步骤可以帮助您解决此问题:
在kubeconfig文件旁边,创建一个.envrc
文件:
path_add KUBECONFIG kubeconfig
direnv allow
KUBECONFIG
环境变量(echo $KUBECONFIG
)的内容。它看起来应该像/path/to/dir-a/kubeconfig:/home/user/.kube/config
~/.kube/config
拆分为位于以下文件夹中的多个kubeconfig
文件:dir-a/kubeconfig
,dir-b/kubeconfig
,依此类推。您也可以进入dir-a并执行kops export kubecfg your-cluster-name
。kubectl config view --minify
dir-b
并从第2步开始重复您还可以在.envrc
中设置其他环境变量,以帮助您管理这些不同的集群(可能是不同的kops状态存储)。