我有Kubernetes在两个不同的环境中工作得很好,即在我的本地环境(MacBook运行minikube)和谷歌的容器引擎(GCE, Kubernetes在谷歌云上)。我使用MacBook/local环境来开发和测试我的YAML文件,然后,完成后,在GCE上尝试它们。
目前我需要单独使用每个环境:我需要在我的本地环境中编辑YAML文件,当准备就绪时,(git)将它们克隆到GCE环境中,然后使用/部署它们。这是一个有点麻烦的过程。
理想情况下,我想从我的Macbook使用kubectl来轻松地在本地minikube或GCE Kubernetes环境之间切换,并轻松地确定在哪里使用YAML文件。有没有一种简单的方法来切换上下文来做到这一点?
如果你正在寻找一种在不同上下文之间切换的简单方法,也许这将会有所帮助。
我从前面提到的kubectx和kswitch脚本中得到了灵感,我可以将它们推荐给大多数用例。它们帮助解决切换任务,但在~/.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
标准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/
切换/读取/操作不同的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