我让Kubernetes在两个不同的环境中运作良好,即在我的本地环境(运行minikube的MacBook)以及Google的Container Engine(GCE,Google Cloud上的Kubernetes)。我使用MacBook /本地环境开发和测试我的YAML文件,然后在完成后,在GCE上尝试它们。
目前我需要单独处理每个环境:我需要在本地环境中编辑YAML文件,并在准备好后,(git)将它们克隆到GCE环境,然后使用/部署它们。这是一个有点麻烦的过程。
理想情况下,我想使用Macbook中的kubectl轻松切换本地minikube或GCE Kubernetes环境,并轻松确定YAML文件的使用位置。是否有一种简单的方法来切换上下文来执行此操作?
答案 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
kubectx foo
kubectl config use-context foo
要在macOS上安装:brew install kubectx
kubectx软件包还包括一个类似的工具,用于切换名为kubens
的命名空间。
如果您定期在多个上下文和名称空间中工作,那么这两个超级方便。
答案 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)
答案 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”中进行了说明
上下文实质上是用于访问特定群集的配置。
例如,在我的特殊情况下,我有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)
如果您正在寻找一种在不同上下文之间进行切换的简单方法,也许会有所帮助。
我从已经提到的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
答案 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 文件,此工具可能对您有用,否则 kubectx
或 kubectl config use-context
可能就足够了。
例如,它添加了诸如从 vault
读取、搜索时热重载和索引以加快后续搜索等功能。
您可以从 here 安装它。
答案 13 :(得分:-1)
--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/