如何在gcloud和minikube之间切换kubectl集群

问题描述 投票:63回答:9

我让Kubernetes在两个不同的环境中运行良好,即在我的本地环境(运行minikube的MacBook)以及Google的Container Engine(GCE,Google Cloud上的Kubernetes)。我使用MacBook /本地环境开发和测试我的YAML文件,然后在完成后,在GCE上尝试它们。

目前我需要单独处理每个环境:我需要在本地环境中编辑YAML文件,并在准备好后,(git)将它们克隆到GCE环境,然后使用/部署它们。这是一个有点麻烦的过程。

理想情况下,我想使用我的Macbook中的kubectl轻松切换本地minikube或GCE Kubernetes环境,并轻松确定YAML文件的使用位置。有没有一种简单的方法来切换上下文来做到这一点?

kubernetes google-kubernetes-engine minikube
9个回答
134
投票

您可以从本地(minikube)切换到gcloud并返回:

kubectl config use-context CONTEXT_NAME

列出所有上下文:

kubectl config get-contexts

您可以为本地和云创建不同的环境,并将其放在单独的yaml文件中。


4
投票

如果您正在寻找基于GUI的Mac解决方案并安装了Docker Desktop,则可以使用Docker菜单栏图标。在这里,您可以找到“Kubernetes”菜单,其中包含您在kubeconfig中的所有上下文,并可在它们之间轻松切换。


2
投票

TL; DR:我创建了一个GUI来通过AppleScript切换Kubernetes上下文。我通过shift-cmd-x激活它。

我也有同样的问题。这是命令行的痛苦切换上下文。我使用FastScripts设置一个键组合(shift-cmd-x)来运行以下AppleScript(放在这个目录中:$(HOME)/ Library / Scripts / Applications / Terminal)。

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

do shell script "/usr/local/bin/kubectl config current-context"
set curcontext to result

do shell script "/usr/local/bin/kubectl config get-contexts -o name"
set contexts to paragraphs of result

choose from list contexts with prompt "Select Context:" with title "K8s Context Selector" default items {curcontext}
set scriptArguments to item 1 of result

do shell script "/usr/local/bin/kubectl config use-context " & scriptArguments

display dialog "Switched to " & scriptArguments buttons {"ok"} default button 1

2
投票

标准kubectl命令的更快捷方式是使用kubectx

  • 列出上下文:kubectx 相当于kubectl config get-contexts
  • 切换上下文(到foo):kubectx foo 相当于kubectl config use-context foo

要在macOS上安装:brew install kubectx

kubectx软件包还包括一个用于切换命名空间的类似工具kubens

如果您经常在多个上下文和命名空间中工作,这两个是非常方便的。

更多信息:https://ahmet.im/blog/kubectx/


1
投票

在repos中为不同的环境克隆YAML文件绝对是理想的选择。您要做的是通过提取不同环境的参数来模拟您的YAML文件。

当然,您可以使用一些模板引擎并将YAML中的值分开,并为特定环境生成YAML。但如果采用Helm Charts,这很容易实现。要查看一些示例图表,请访问此Github repo的稳定目录

举一个Wordpress chart的例子,你可以为两个环境提供两个不同的命令:

对于Dev:

helm install --name dev-release --set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stable/wordpress

虽然没有必要在CLI上传递这些值,但是您可以将值存储在名为aptly values.yml的文件中,并且可以为不同的环境提供不同的文件

您将需要一些工作来转换到Helm图表标准,但努力将是值得的。


0
投票

我厌倦了一遍又一遍地输入这个,所以我写了一个简单的bash实用程序来切换上下文

enter image description here

你可以在这里找到https://github.com/josefkorbel/kube-switch


0
投票

正如Mark所说,切换/读取/操纵不同kubernetes环境(aka kubernetes contexts)的规范答案是使用kubectl config,见下文:

$ kubectl config                                                                                                                                                                                                                 
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

Available Commands:
  current-context Displays the current-context
  delete-cluster  Delete the specified cluster from the kubeconfig
  delete-context  Delete the specified context from the kubeconfig
  get-clusters    Display clusters defined in the kubeconfig
  get-contexts    Describe one or many contexts
  rename-context  Renames a context from the kubeconfig file.
  set             Sets an individual value in a kubeconfig file
  set-cluster     Sets a cluster entry in kubeconfig
  set-context     Sets a context entry in kubeconfig
  set-credentials Sets a user entry in kubeconfig
  unset           Unsets an individual value in a kubeconfig file
  use-context     Sets the current-context in a kubeconfig file
  view            Display merged kubeconfig settings or a specified kubeconfig file

Usage:
  kubectl config SUBCOMMAND [options]

在场景背后,有一个~/.kube/config YAML文件,它存储所有可用的上下文及其相应的凭据和每个上下文的端点。

现成的Kubectl并不像您可能已经知道的那样容易管理不同的kubernetes上下文。不是滚动自己的脚本来管理所有这些,更好的方法是使用一个名为kubectx的成熟工具,由名为“Ahmet Alp Balkan”的Google员工创建,他在Kubernetes / Google Cloud Platform开发人员体验团队中构建这样的工具。我强烈推荐它。

https://github.com/ahmetb/kubectx

$ kctx --help                                                                                                                                                                                                                  
USAGE:
  kubectx                       : list the contexts
  kubectx <NAME>                : switch to context <NAME>
  kubectx -                     : switch to the previous context
  kubectx <NEW_NAME>=<NAME>     : rename context <NAME> to <NEW_NAME>
  kubectx <NEW_NAME>=.          : rename current-context to <NEW_NAME>
  kubectx -d <NAME> [<NAME...>] : delete context <NAME> ('.' for current-context)
                                  (this command won't delete the user/cluster entry
                                  that is used by the context)

  kubectx -h,--help         : show this message

0
投票

还查看最新的(docker 19.03)docker context command

Ajeet Singh Raina)在“Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services”中说明了这一点

Context Switching

上下文本质上是用于访问特定集群的配置。

比方说,例如,在我的特定情况下,我有4个不同的集群 - Swarm和Kubernetes在本地和远程运行的混合。 假设我的桌面计算机上运行了默认集群,在Google Cloud Platform上运行了2节点Swarm集群,在Play上运行了5节点集群,Docker操场和在Minikube上运行的单节点Kubernetes集群,我需要访问漂亮的集群经常。

使用docker context CLI我可以在几秒钟内轻松地从一个集群(可能是我的开发集群)切换到测试生产集群。

$ sudo docker context --help
Usage:  docker context COMMAND
Manage contexts
Commands:
  create      Create a context
  export      Export a context to a tar or kubeconfig file
  import      Import a context from a tar file
  inspect     Display detailed information on one or more contexts
  ls          List contexts
  rm          Remove one or more contexts
  update      Update a context
  use         Set the current docker context
Run 'docker context COMMAND --help' for more information on a command.

例如:

[:)Captain'sBay=>sudo docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                 ORCHESTRATOR
default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://127.0.0.1:16443 (default)   swarm
swarm-context1 

-1
投票

是的,我认为这就是你的要求。要查看当前配置,请使用kubectl配置视图。 kubectl从以下位置加载和合并配置(按顺序)

--kubeconfig=/path/to/.kube/config command line flag
KUBECONFIG=/path/to/.kube/config env variable
$HOME/.kube/config  - The DEFAULT

我使用--kubeconfig,因为我在多个集群之间切换很多。它略显笨重,但效果很好。

有关详细信息,请参阅这些https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/

© www.soinside.com 2019 - 2024. All rights reserved.