Kubernetes
生态在很多企业广泛应用的当下,相信很多运维和开发人员都会同时管理和维护多个 Kubernetes
集群,比如:开发环境、测试环境、预发布环境、生产环境等等。
为了方便管理多个环境的集群,通常都是在本地环境通过 Kubernetes
的客户端工具 kubectl
来管理多个 Kubernetes
集群的。这时你就需要用到各个集群的 kubeconfig
文件,你是不是首先想到的就是手动将多个 kubeconfig
配置文件合并为一个,然后通过 kubectx
或 kubie
这样的工具来快速切换上下文环境(context)来达到多集群环境的管理呢?虽然手动合并 kubeconfig
配置文件的方法是可行的,但是集群环境较多时或者集群环境经常变更时,这样的方法就显得很麻烦了。
今天,我们就给大家介绍几种更方便更快捷的 Kubernetes
多集群管理方法。首先我们来看看官方提供的实现方式:
官方提供的解决方法
官方目前提供了配置环境变量和通过命令行参数显示指定两种方法来解决这个问题。
- 配置环境变量指定多个集群的 kubeconfig 文件
1 | # 配置 Kubernetes 多集群,注意使用 : 隔开 |
- 通过命令行参数显示指定不同集群的 kubeconfig 文件
1 | # 切换到本地集群 |
虽然官方提供的方法,能实现多集群管理。但是不断来回切换 kubeconfig
配置文件或者经常手动编辑环境变量来增减多个集群的配置文件,显然还是比较麻烦的。
接下来,给大家介绍的就是本文的重点,这是一种更优雅的解决方法。
通过自动合并工具实现多集群 Kubeconfig 配置文件管理
既然手动合并太过麻烦和复杂,有没有自动合并工具呢?你别说,还真有且不此一款。下面我们来介绍下如何使用这几款好用的自动合并工具。
KubeCM
KubeCM
是一款使用 Go
语言开发的 KubeConfig
管理工具,功能非常的强大。它不但能实现多个 KubeConfig
文件的自动合并,还能很方便的管理多个 Kubernetes
集群环境,比如:增加、删除、重命名不同集群环境等。
- 安装 KubeCM
KubeCM
的安装非常的简单,你只需直接下载相应平台的二进制文件解压后就可使用了,完全就是开箱即用。
- 通过二进制文件安装
1 | # 根据你的实际情况,下载对应平台二进制文件即可。 |
下载完成后,解压对应安装包。
1 | # Linux & macOS |
- 通过包管理器进行安装
如果你使用的是 macOS
,还可以使用 Homebrew
来进行一键安装。
1 | $ brew install sunny0826/tap/kubecm |
- 使用 KubeCM
为了方便演示,我们先创建一个 mike-kubeconfig
目录并将多个集群配置文件复制到这里。
1 | $ mkdir mike-kubeconfig |
注:你可能发现了,我这里的 Kubeconfig 配置文件都是以 .yaml 结尾的,这是为了方便 Kubie 这个工具进行多集群切换。你只需按自己环境的规则管理 Kubeconfig 文件即可。
- 使用 KubeCM 完成自动合并
1 | # 将指定目录中的所有 kubeconfig 配置文件合并为一个 |
注意:是否使用 -c 参数的区别是:-c 参数生成的合并后文件名为 .kube/config,而不使用 -c 参数生成的合并后的文件名为 .kube/config.yaml。
- 使用 KubeCM 快速增加一个集群配置
1 | # 使用 KubeCM 快速增加一个集群配置文件 |
- 使用 KubeCM 快速删除一个集群配置
1 | # 通过命令行模式删除一个集群配置 |
- 使用 KubeCM 快速重命名一个集群配置
1 | # 将 dev 重命名为 test |
以上就是 KubeCM
的一些命令行下的常规操作,为了更高效的使用命令行。KubeCM
还提供了 SHELL
自动补全功能,只需按下面的方法简单设置一下即可。
- Bash
1 | $ kubecm completion bash > ~/.kube/kubecm.bash.inc |
- ZSH
1 | # add to $HOME/.zshrc |
到这里,你肯定以为就该结束了吧!不,你错了,KubeCM
不仅提供了命令行模式,它还提供更加人性化的交互模式。话不多说,直接看图:
这样操作是不是更加方便了呢?除此之外,KubeCM
还提供了快速切换集群和命名空间的功能哟,这样一来,你完全可以省去安装文章开头提到的 kubectx
或 kubie
这类集群切换工具了呢。
- 使用 KubeCM 快速切换到不同集群环境
- 使用 KubeCM 快速切换到集群中的不同命名空间
Kubectx Contexts Manager
Kubectx.Manager
和 KubeCM
功能类似,也是一个可以将多个 kubeconfig
配置文件自动合并成一个管理工具。
Kubectx.Manager
使用 Nodejs
开发。在安装前,你必须先有一个 Nodejs
环境。Nodejs
的安装也挺简单的,这里就不展开讲了,可自行 Google
。
Nodejs
环境安装完成后,你只需运行下面的命令即可完成安装。
1 | $ npm install -g git+https://git@github.com/AveryanovS/kubectx.manager |
安装完成后,我们就来演示如何合并多个 kubeconfig
配置文件。Kubectx.Manager
同样也是支持交互式操作的,你只需执行命令,然后根据一系列交互动作的提示进行操作便可轻松完成操作。
- 使用 Kubectx.Manager 自动合并
1 | $ kubemanager |
下面我们来简单说说以上几步操作的作用。
- 第一行选择 merge,表示合并。
- 第二行选择需要合并到哪个 Kubeconfig,也就是你最终要用的 Kubeconfig。
- 第三行选择需要合并的 Kubeconfig。
- 第四行定义合并后新加入的 Context 名称。
- 使用 Kubectx.Manager 删除指定的集群环境
删除操作和合并操作类似,相信聪明的你一看就明白了。
1 | $ kubemanager |
Kubectx.Manager
目前仅支持以上的两种对 Kubeconfig
文件的管理操作,相对于 KubeCM
来说功能还是相对于弱一些。它并不支持多集群和多命名空间的快速切换。如果要实现多集群和多命名空间的快速切换,你还需要结合 kubectx
或 kubie
这类快速集群切换工具一并使用哟!
mergeKubeConfig
mergeKubeConfig
是由 Python
开发的类似的工具,它和 KubeCM
来自同一开发者。目前已停止维护,都有 Go
版本了,还要什么自行车呢?
这里顺手提一下纯粹是记录下它曾经存在过,哈哈!
好了,本文到此就结束了。这些神奇的小工具是不是很好的解决了你在 Kubernetes
多集群管理中的痛点呢?
最后,根据自己的实际情况选一个最符合你需求的使用吧。这时,你可能会惊奇的发现文中并没有这几个小工具的项目地址!
哈哈,是时候支持一波公众号了!如需以上小工具项目地址,请在公众号对话框内回复 「Kubeconfig
」,即可获取这一系列小工具的项目下载地址。