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

Using multiple kubernetes cluster at same time using kops

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

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

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

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

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

有什么方法可以不用切换上下文,kops/kubectl 可以自动理解集群上下文?

示例:如果我从 directory-a 执行命令,那么它会自动理解集群 a.k8s.local。想到这里,欢迎任何其他解决方案。

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

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

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

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

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

  • 安装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 状态存储)。