如何在 gcloud 和 minikube 之间切换 kubectl 集群
How to switch kubectl clusters between gcloud and minikube
我让 Kubernetes 在两种不同的环境中运行良好,即在我的本地环境(MacBook 运行 minikube)和 Google 的容器引擎(GCE,Kubernetes 在 Google云)。我使用 MacBook/local 环境来开发和测试我的 YAML 文件,然后在完成后在 GCE 上试用它们。
目前我需要单独处理每个环境:我需要在本地环境中编辑 YAML 文件,准备就绪后,(git) 将它们克隆到 GCE 环境,然后 use/deploy 他们。这是一个有点麻烦的过程。
理想情况下,我想在我的 Macbook 上使用 kubectl 在本地 minikube 或 GCE Kubernetes 环境之间轻松切换,并轻松确定 YAML 文件的使用位置。有没有一种简单的方法来切换上下文来做到这一点?
是的,我想这就是你问的问题。要查看当前配置,请使用 kubectl config view。 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/ and https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/
跨存储库为不同环境克隆 YAML 文件绝对是理想的选择。你要做的是模板化你的 YAML 文件——通过提取因环境而异的参数。
当然,您可以使用一些模板引擎并分离 YAML 中的值,并为特定环境生成 YAML。但是如果你采用 Helm Charts. To take a look at some sample charts go to stable directory at this Github repo
这很容易做到
以 Wordpress chart 为例,您可以针对两种环境使用两种不同的命令:
开发人员:
helm install --name dev-release --set \
wordpressUsername=dev_admin, \
wordpressPassword=dev_password, \
mariadb.mariadbRootPassword=dev_secretpassword \
stable/wordpress
虽然没有必要在 CLI 上传递这些值,您可以将这些值存储在一个名为 aptly values.yml
的文件中,并且您可以为不同的环境使用不同的文件
您需要做一些工作才能转换为 Helm 图表标准,但这些努力是值得的。
您可以通过以下方式从本地 (minikube) 切换到 gcloud 并返回:
kubectl config use-context CONTEXT_NAME
列出所有上下文:
kubectl config get-contexts
您可以为本地和gcloud 创建不同的环境,并将其放在不同的yaml 文件中。
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
如果您正在为 Mac 寻找基于 GUI 的解决方案并安装了 Docker 桌面,则可以使用 Docker 菜单栏图标。在这里,您可以找到 "Kubernetes" 菜单,其中包含您在 kubeconfig 中拥有的所有上下文,并可以在它们之间轻松切换。
标准 kubectl 命令的快捷方式是使用 kubectx:
- 列出上下文:
kubectx
- 相当于
kubectl config get-contexts
- 切换上下文(到 foo):
kubectx foo
- 相当于
kubectl config use-context foo
要在 macOS 上安装:brew install kubectx
kubectx 包还包含一个类似的工具,用于切换名称空间,名为 kubens
。
如果您经常在多个上下文和命名空间中工作,这两个非常方便。
我厌倦了一遍又一遍地输入这个,所以我写了一个简单的 bash 实用程序来切换上下文
switching/reading/manipulating 不同的 kubernetes 环境(又名 kubernetes 上下文)的规范答案是,正如 Mark 提到的那样,使用 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" 的 Googler 创建,他在 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
同时检查最新的 (docker 19.03) docker context
command.
Ajeet Singh Raina ) illustrates it in "Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services
A context is essentially the configuration that you use to access a particular cluster.
Say, for example, in my particular case, I have 4 different clusters – mix of Swarm and Kubernetes running locally and remotely.
Assume that I have a default cluster running on my Desktop machine , 2 node Swarm Cluster running on Google Cloud Platform, 5-Node Cluster running on Play with Docker playground and a single-node Kubernetes cluster running on Minikube and that I need to access pretty regularly.
Using docker context CLI I can easily switch from one cluster(which could be my development cluster) to test to production cluster in seconds.
$ 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
如果您正在寻找一种在不同上下文之间切换的简单方法,这可能会有所帮助。
我从已经提到的 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
2020 年最新答案在这里,
一种在 kubectl 上下文之间切换的简单方法,
kubectl top nodes **--context=**context01name
kubectl top nodes --context=context02name
您还可以将上下文名称存储为 env 之类的
context01name=gke_${GOOGLE_CLOUD_PROJECT}_us-central1-a_standard-cluster-1
列出上下文
kubectl config get-contexts
切换上下文
kubectl config set current-context MY-CONTEXT
获取所有上下文
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>
我使用 kubeswitch(免责声明:我写了工具),可以像 kubectx
一样使用,但专为大量 kubeconfig 文件设计。
如果你必须处理成百上千个 kubeconfig 文件,这个工具可能对你有用,否则 kubectx
或 kubectl config use-context
可能就足够了。
例如,它添加了从 vault
中读取、搜索时热重载以及加快后续搜索速度的索引等功能。
您可以从 here 安装它。
编辑:现在还直接支持 GKE。因此,您可以使用和发现 kubeconfig 文件,而无需手动下载和更新它们。
我让 Kubernetes 在两种不同的环境中运行良好,即在我的本地环境(MacBook 运行 minikube)和 Google 的容器引擎(GCE,Kubernetes 在 Google云)。我使用 MacBook/local 环境来开发和测试我的 YAML 文件,然后在完成后在 GCE 上试用它们。
目前我需要单独处理每个环境:我需要在本地环境中编辑 YAML 文件,准备就绪后,(git) 将它们克隆到 GCE 环境,然后 use/deploy 他们。这是一个有点麻烦的过程。
理想情况下,我想在我的 Macbook 上使用 kubectl 在本地 minikube 或 GCE Kubernetes 环境之间轻松切换,并轻松确定 YAML 文件的使用位置。有没有一种简单的方法来切换上下文来做到这一点?
是的,我想这就是你问的问题。要查看当前配置,请使用 kubectl config view。 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/ and https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/
跨存储库为不同环境克隆 YAML 文件绝对是理想的选择。你要做的是模板化你的 YAML 文件——通过提取因环境而异的参数。
当然,您可以使用一些模板引擎并分离 YAML 中的值,并为特定环境生成 YAML。但是如果你采用 Helm Charts. To take a look at some sample charts go to stable directory at this Github repo
这很容易做到以 Wordpress chart 为例,您可以针对两种环境使用两种不同的命令:
开发人员:
helm install --name dev-release --set \
wordpressUsername=dev_admin, \
wordpressPassword=dev_password, \
mariadb.mariadbRootPassword=dev_secretpassword \
stable/wordpress
虽然没有必要在 CLI 上传递这些值,您可以将这些值存储在一个名为 aptly values.yml
的文件中,并且您可以为不同的环境使用不同的文件
您需要做一些工作才能转换为 Helm 图表标准,但这些努力是值得的。
您可以通过以下方式从本地 (minikube) 切换到 gcloud 并返回:
kubectl config use-context CONTEXT_NAME
列出所有上下文:
kubectl config get-contexts
您可以为本地和gcloud 创建不同的环境,并将其放在不同的yaml 文件中。
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
如果您正在为 Mac 寻找基于 GUI 的解决方案并安装了 Docker 桌面,则可以使用 Docker 菜单栏图标。在这里,您可以找到 "Kubernetes" 菜单,其中包含您在 kubeconfig 中拥有的所有上下文,并可以在它们之间轻松切换。
标准 kubectl 命令的快捷方式是使用 kubectx:
- 列出上下文:
kubectx
- 相当于
kubectl config get-contexts
- 相当于
- 切换上下文(到 foo):
kubectx foo
- 相当于
kubectl config use-context foo
- 相当于
要在 macOS 上安装:brew install kubectx
kubectx 包还包含一个类似的工具,用于切换名称空间,名为 kubens
。
如果您经常在多个上下文和命名空间中工作,这两个非常方便。
我厌倦了一遍又一遍地输入这个,所以我写了一个简单的 bash 实用程序来切换上下文
switching/reading/manipulating 不同的 kubernetes 环境(又名 kubernetes 上下文)的规范答案是,正如 Mark 提到的那样,使用 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" 的 Googler 创建,他在 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
同时检查最新的 (docker 19.03) docker context
command.
Ajeet Singh Raina ) illustrates it in "Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services
A context is essentially the configuration that you use to access a particular cluster.
Say, for example, in my particular case, I have 4 different clusters – mix of Swarm and Kubernetes running locally and remotely.
Assume that I have a default cluster running on my Desktop machine , 2 node Swarm Cluster running on Google Cloud Platform, 5-Node Cluster running on Play with Docker playground and a single-node Kubernetes cluster running on Minikube and that I need to access pretty regularly.Using docker context CLI I can easily switch from one cluster(which could be my development cluster) to test to production cluster in seconds.
$ 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
如果您正在寻找一种在不同上下文之间切换的简单方法,这可能会有所帮助。
我从已经提到的 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
2020 年最新答案在这里,
一种在 kubectl 上下文之间切换的简单方法,
kubectl top nodes **--context=**context01name
kubectl top nodes --context=context02name
您还可以将上下文名称存储为 env 之类的 context01name=gke_${GOOGLE_CLOUD_PROJECT}_us-central1-a_standard-cluster-1
列出上下文
kubectl config get-contexts
切换上下文
kubectl config set current-context MY-CONTEXT
获取所有上下文
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>
我使用 kubeswitch(免责声明:我写了工具),可以像 kubectx
一样使用,但专为大量 kubeconfig 文件设计。
如果你必须处理成百上千个 kubeconfig 文件,这个工具可能对你有用,否则 kubectx
或 kubectl config use-context
可能就足够了。
例如,它添加了从 vault
中读取、搜索时热重载以及加快后续搜索速度的索引等功能。
您可以从 here 安装它。
编辑:现在还直接支持 GKE。因此,您可以使用和发现 kubeconfig 文件,而无需手动下载和更新它们。