如何在gcloud和minikube之间切换kubectl集群

265

我已经在两个不同的环境中成功使用 Kubernetes,一个是本地环境(MacBook 上运行 minikube),另一个是在 Google 的容器引擎上(GCE,即 Google Cloud 上的 Kubernetes)。我使用 MacBook 或本地环境来开发和测试 YAML 文件,完成后尝试在 GCE 上运行。

目前我需要分别在每个环境中工作:我需要在本地环境中编辑 YAML 文件,准备好之后,(git)克隆到 GCE 环境中再进行使用/部署。这是一个有些繁琐的过程。

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

15个回答

1
克隆不同环境的存储库中的YAML文件绝对是理想的。您需要模板化您的YAML文件-从每个环境不同的参数中提取。当然,您可以使用一些模板引擎并将值分离在YAML中,以生成特定环境的YAML。但是,如果您采用Helm图表,这很容易实现。要查看一些示例图表,请转到Github repo中的稳定目录。
Wordpress图表为例,您可以为两个环境拥有两个不同的命令:
开发环境: helm install --name dev-release --set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stable/wordpress 虽然不必通过CLI传递这些值,但您可以将这些值存储在名为values.yml的文件中,并且您可以为不同的环境创建不同的文件。

您需要进行一些工作,以符合Helm图表标准,但这样做的努力将是值得的。


1
我使用kubeswitch(免责声明:我编写了该工具),它可以像kubectx一样使用,但是专为大量kubeconfig文件设计。 如果你需要处理数百或数千个kubeconfig文件,这个工具可能对你有用,否则kubectxkubectl config use-context可能就足够了。
例如,它增加了从vault读取、搜索时热重载和索引以加快后续搜索等功能。
你可以从这里安装它。
编辑:现在还直接支持GKE。因此,您可以使用和发现kubeconfig文件,而无需手动下载和更新它们。

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

0

如果您不想安装外部库,将其保存为别名是一个好主意。

alias kctx1='kubectl config use-context context1'

如果您想在当前的 shell 会话中使用别名,可以使用 source 命令来执行脚本。以下是操作步骤:

source script.sh

这将在当前的 shell 会话中运行脚本,并使别名可以立即使用。

请注意,在脚本内设置的别名仅在该脚本的范围内可用。如果您希望定义持久性别名,超出脚本的执行范围,您应考虑将它们添加到您的 shell 配置文件(例如 .bashrc 或 .bash_profile)中。


-1

是的,我认为这就是你所问的内容。要查看当前配置,请使用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/https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/


我认为用户并不是在询问如何在Kubectl中使用多个配置文件,问题是关于如何在多个环境中使用Yaml代码。 - Vishal Biyani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接