我有Kubernetes在两个不同的环境中工作得很好,即在我的本地环境(MacBook运行minikube)和谷歌的容器引擎(GCE, Kubernetes在谷歌云上)。我使用MacBook/local环境来开发和测试我的YAML文件,然后,完成后,在GCE上尝试它们。

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

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


当前回答

切换/读取/操作不同的kubernetes环境(又名kubernetes上下文)的标准答案是,正如Mark提到的,使用kubectl配置,如下所示:

$ 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 /谷歌云平台开发人员体验团队的“Ahmet Alp Balkan”创建。我强烈推荐它。

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

其他回答

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

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

我使用——kubecconfig,因为我经常在多个集群之间切换。它有点麻烦,但它工作得很好。

更多信息请看这些。 https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/和https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/

上下文列表

kubectl config get-contexts

上下文切换

kubectl config set current-context MY-CONTEXT

为不同的环境克隆YAML文件绝对是理想的。你要做的是模板化你的YAML文件——通过提取不同环境的参数。

当然,您可以使用一些模板引擎,分离YAML中的值,并为特定环境生成YAML。但如果你采用掌舵图,这是很容易做到的。要查看一些示例图表,请访问这个Github回购的稳定目录

以Wordpress图表为例,你可以在两个环境中使用两个不同的命令:

戴夫:

头盔安装——name dev-release——set \ wordpressUsername = dev_admin \ wordpressPassword = dev_password \ mariadb。mariadbRootPassword = dev_secretpassword \ 稳定/ wordpress

不过,在CLI上传递这些值并不是必须的,可以将这些值存储在一个名为aptly values的文件中。Yml,你可以为不同的环境有不同的文件

在转换为Helm图表标准时,您需要做一些工作,但这些努力是值得的。

我使用kubeswitch(免责声明:这个工具是我写的),它可以像kubectx一样使用,但它是为大量kubecconfig文件设计的。 如果您必须处理数百或数千个kubecconfig文件,这个工具可能对您有用,否则kubectx或kubectl配置use-context可能就足够了。

例如,它增加了从保险库读取、搜索时热重载以及加速后续搜索的索引等功能。

你可以在这里安装。

编辑:现在还包括直接支持GKE。因此,您可以使用和发现kubecconfig文件,而无需手动下载和更新它们。

了解所有的背景

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>