使用kops同时使用多个kubernetes集群

时间:2019-02-05 07:34:50

标签: kubernetes cluster-computing devops kubectl kops

我正在使用kops在AWS中创建/管理kubernetes集群。

我创建了一个试验/中间实例来访问所有集群。

我注意到,即使我们创建了多个SSH会话(使用同一用户),并且如果我将上下文更改为cluster-a,它也会在其他会话中更改为cluster-a。

问题是,如果我们想同时管理不同的集群,则每次都需要切换上下文。如果有两个以上的人正在使用该实例,则很难维持上下文切换。

可能会出现这样的问题,为什么我们要使用多个集群,而实际上是有多个并行开发的流和模块,并且都同时进行测试。

有什么方法可以不必切换上下文并且kops / kubectl可以自动理解集群上下文吗?

示例:如果我正在从directory-a执行命令,那么它将自动理解群集a.k8s.local。只是考虑到这一点,任何其他解决方案都受到欢迎。

最后的解决方案是为所有集群创建单独的试验实例,我试图避免这些实例不能提供太多价值,而只会增加成本。

1 个答案:

答案 0 :(得分:2)

我正使用您正在寻找的解决方案:当我位于特定目录中时,我可以管理特定集群。

首先,让我解释一下为什么即使在不同的SSH会话上也不能同时在多个群集上工作。

当您执行kubectl config use-context切换当前上下文时,实际上是在current-context: your-context中修改~/.kube/config。因此,如果您的一个团队成员正在切换上下文,那么这也适用于您的其他团队成员,尤其是当他们连接到同一用户时。

现在,以下步骤可以帮助您解决此问题:

  • 安装direnv。当您位于目录中时,此工具将允许您设置自定义环境变量。
  • 在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/kubeconfigdir-b/kubeconfig,依此类推。您也可以进入dir-a并执行kops export kubecfg your-cluster-name
  • 使用kubectl config view --minify
  • 检查当前上下文
  • 转到dir-b并从第2步开始重复

您还可以在.envrc中设置其他环境变量,以帮助您管理这些不同的集群(可能是不同的kops状态存储)。