如何在gcloud和minikube

时间:2017-04-26 19:57:48

标签: kubernetes google-kubernetes-engine minikube

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

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

理想情况下,我想使用Macbook中的kubectl轻松切换本地minikube或GCE Kubernetes环境,并轻松确定YAML文件的使用位置。是否有一种简单的方法来切换上下文来执行此操作?

14 个答案:

答案 0 :(得分:120)

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

kubectl config use-context CONTEXT_NAME

列出所有上下文:

kubectl config get-contexts

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

答案 1 :(得分:3)

If you're looking for a GUI-based solution for Mac and have the Docker Desktop installed, you can use the Docker Menu Bar icon. Here you can find "Kubernetes" menu with all the contexts you have in your kubeconfig and easily switch between them.

答案 2 :(得分: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/

答案 3 :(得分:1)

在不同环境的回购中克隆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图表标准需要做一些工作,但努力是值得的。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

最新的2020年答案在这里,

在kubectl上下文之间切换的简单方法,

kubectl top nodes **--context=**context01name

kubectl top nodes --context=context02name

您还可以将上下文名称存储为env之类的 context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1

答案 6 :(得分:0)

我一遍又一遍地打字很无聊,所以我写了一个简单的bash实用程序来切换上下文

enter image description here

您可以在这里https://github.com/josefkorbel/kube-switch

找到它

答案 7 :(得分:0)

正如Mark提到的,切换/读取/操纵不同的kubernetes环境(又名kubernetes上下文)的规范答案是使用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,该工具是由Kubernetes上的Google员工“ Ahmet Alp Balkan”创建的/ 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

答案 8 :(得分: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群集,Docker Playground上运行的是5节点群集,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 

答案 9 :(得分:0)

如果您正在寻找一种在不同上下文之间进行切换的简单方法,也许会有所帮助。

我从已经提到的kubectxkswitch脚本中得到启发,我可以在大多数用例中推荐它们。他们正在帮助解决切换任务,但在~/.kube/config的某些更大或更小的标准配置上给我带来了困扰。因此,我创建了一个sys-exec调用包装器和一个kubectl的缩写。

如果在不使用参数的情况下调用k,则会看到截获的提示以切换上下文。

Switch kubectl to a different context/cluster/namespace.
Found following options to select from:
 >>> context: [1] franz
 >>> context: [2] gke_foo_us-central1-a_live-v1
 >>> context: [3] minikube
 --> new num [?/q]:

此外,k继续充当简写。以下是等效的:

kubectl get pods --all-namespaces
k get pods -A
k p -A

答案 10 :(得分:0)

列表上下文

kubectl config get-contexts

切换上下文

kubectl config set current-contex MY-CONTEXT

答案 11 :(得分:0)

获取所有上下文

C:\Users\arun>kubectl config get-contexts

获取当前上下文

C:\Users\arun>kubectl config current-context

切换上下文

C:\Users\arun>kubectl config use-context <any context name from above list>

答案 12 :(得分:0)

我使用 kubeswitch(免责声明:我编写了该工具),它可以像 kubectx 一样使用,但专为大量 kubeconfig 文件而设计。 如果您必须处理成百上千个 kubeconfig 文件,此工具可能对您有用,否则 kubectxkubectl config use-context 可能就足够了。

例如,它添加了诸如从 vault 读取、搜索时热重载和索引以加快后续搜索等功能。

您可以从 here 安装它。

答案 13 :(得分:-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/