推荐几款快速管理 Kubernetes 多集群环境的神器

Posted by Mike on 2020-07-20

Kubernetes 生态在很多企业广泛应用的当下,相信很多运维和开发人员都会同时管理和维护多个 Kubernetes 集群,比如:开发环境、测试环境、预发布环境、生产环境等等。

为了方便管理多个环境的集群,通常都是在本地环境通过 Kubernetes 的客户端工具 kubectl 来管理多个 Kubernetes 集群的。这时你就需要用到各个集群的 kubeconfig 文件,你是不是首先想到的就是手动将多个 kubeconfig 配置文件合并为一个,然后通过 kubectxkubie 这样的工具来快速切换上下文环境(context)来达到多集群环境的管理呢?虽然手动合并 kubeconfig 配置文件的方法是可行的,但是集群环境较多时或者集群环境经常变更时,这样的方法就显得很麻烦了。

今天,我们就给大家介绍几种更方便更快捷的 Kubernetes 多集群管理方法。首先我们来看看官方提供的实现方式:

官方提供的解决方法

官方目前提供了配置环境变量和通过命令行参数显示指定两种方法来解决这个问题。

  1. 配置环境变量指定多个集群的 kubeconfig 文件
1
2
# 配置 Kubernetes 多集群,注意使用 : 隔开
export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config:$HOME/.kube/mike-local-kubernetes.yaml:$HOME/.kube/dev-kubernetes.yaml:$HOME/.kube/test-kubernetes.yaml:$HOME/.kube/prod-kubernetes.yaml:$HOME/.kube/okteto-kube.yaml
  1. 通过命令行参数显示指定不同集群的 kubeconfig 文件
1
2
3
4
5
6
7
8
9
10
11
# 切换到本地集群
kubectl get pod --kubeconfig=$HOME/.kube/mike-local-kubernetes.yaml

# 切换到开发集群
kubectl get pod --kubeconfig=$HOME/.kube/dev-kubernetes.yaml

# 切换到测试集群
kubectl get pod --kubeconfig=$HOME/.kube/test-kubernetes.yaml

# 切换到生产集群
kubectl get pod --kubeconfig=$HOME/.kube/prod-kubernetes.yaml

虽然官方提供的方法,能实现多集群管理。但是不断来回切换 kubeconfig 配置文件或者经常手动编辑环境变量来增减多个集群的配置文件,显然还是比较麻烦的。

接下来,给大家介绍的就是本文的重点,这是一种更优雅的解决方法。

通过自动合并工具实现多集群 Kubeconfig 配置文件管理

既然手动合并太过麻烦和复杂,有没有自动合并工具呢?你别说,还真有且不此一款。下面我们来介绍下如何使用这几款好用的自动合并工具。

KubeCM

KubeCM 是一款使用 Go 语言开发的 KubeConfig 管理工具,功能非常的强大。它不但能实现多个 KubeConfig 文件的自动合并,还能很方便的管理多个 Kubernetes 集群环境,比如:增加、删除、重命名不同集群环境等。

  1. 安装 KubeCM

KubeCM 的安装非常的简单,你只需直接下载相应平台的二进制文件解压后就可使用了,完全就是开箱即用。

  • 通过二进制文件安装
1
2
3
4
5
6
7
8
# 根据你的实际情况,下载对应平台二进制文件即可。

# Linux
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Linux_x86_64.tar.gz
# macOS
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Darwin_x86_64.tar.gz
# Windows
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Windows_x86_64.tar.gz

下载完成后,解压对应安装包。

1
2
3
4
5
6
7
# Linux & macOS
$ tar -zxvf kubecm.tar.gz kubecm
$ sudo mv kubecm /usr/local/bin/

# Windows
# 你可以使用做任意一款压缩软件进行解压并放到 $PATH 中
$ unzip kubecm.tar.gz
  • 通过包管理器进行安装

如果你使用的是 macOS,还可以使用 Homebrew 来进行一键安装。

1
$ brew install sunny0826/tap/kubecm
  1. 使用 KubeCM

为了方便演示,我们先创建一个 mike-kubeconfig 目录并将多个集群配置文件复制到这里。

1
2
3
4
$ mkdir mike-kubeconfig
$ cp *.yaml mike-kubeconfig/
$ ls mike-kubeconfig
dev-kubernetes.yaml mike-local-kubernetes.yaml okteto-kube.yaml

注:你可能发现了,我这里的 Kubeconfig 配置文件都是以 .yaml 结尾的,这是为了方便 Kubie 这个工具进行多集群切换。你只需按自己环境的规则管理 Kubeconfig 文件即可。

  • 使用 KubeCM 完成自动合并
1
2
3
4
5
6
7
8
9
# 将指定目录中的所有 kubeconfig 配置文件合并为一个
$ kubecm merge -f mike-kubeconfig
Loading kubeconfig file: [mike-kubeconfig/dev-kubernetes.yaml mike-kubeconfig/mike-local-kubernetes.yaml mike-kubeconfig/okteto-kube.yaml]
Context Add: dev-kubernetes
Context Add: mike-local-kubernetes
Context Add: okteto-kube

# 将指定目录中的所有 kubeconfig 配置文件合并为一个并且覆盖默认的 Kubeconfig 配置文件
$ kubecm merge -f mike-kubeconfig -c

注意:是否使用 -c 参数的区别是:-c 参数生成的合并后文件名为 .kube/config,而不使用 -c 参数生成的合并后的文件名为 .kube/config.yaml。

  • 使用 KubeCM 快速增加一个集群配置
1
2
3
4
5
# 使用 KubeCM 快速增加一个集群配置文件
$ kubecm add -f mike-local-kubernetes.yaml

# 使用 KubeCM 快速增加一个集群配置文件并指定默认命名空间
$ kubecm add -f mike-local-kubernetes.yaml -n test
  • 使用 KubeCM 快速删除一个集群配置
1
2
# 通过命令行模式删除一个集群配置
$ kubecm delete mike-local-kubernetes
  • 使用 KubeCM 快速重命名一个集群配置
1
2
3
4
# 将 dev 重命名为 test
$ kubecm rename -o dev -n test
# 将当前上下文重命名为 dev
$ kubecm rename -n dev -c

以上就是 KubeCM 的一些命令行下的常规操作,为了更高效的使用命令行。KubeCM 还提供了 SHELL 自动补全功能,只需按下面的方法简单设置一下即可。

  • Bash
1
2
3
4
5
6
$ kubecm completion bash > ~/.kube/kubecm.bash.inc
$ printf "
# kubecm shell completion
source '$HOME/.kube/kubecm.bash.inc'
" >> $HOME/.bash_profile
$ source $HOME/.bash_profile
  • ZSH
1
2
3
4
# add to $HOME/.zshrc 
source <(kubecm completion zsh)
# or
$ kubecm completion zsh > "${fpath[1]}/_kubecm"

到这里,你肯定以为就该结束了吧!不,你错了,KubeCM 不仅提供了命令行模式,它还提供更加人性化的交互模式。话不多说,直接看图:

这样操作是不是更加方便了呢?除此之外,KubeCM 还提供了快速切换集群和命名空间的功能哟,这样一来,你完全可以省去安装文章开头提到的 kubectxkubie 这类集群切换工具了呢。

  • 使用 KubeCM 快速切换到不同集群环境

  • 使用 KubeCM 快速切换到集群中的不同命名空间

Kubectx Contexts Manager

Kubectx.ManagerKubeCM 功能类似,也是一个可以将多个 kubeconfig 配置文件自动合并成一个管理工具。

Kubectx.Manager 使用 Nodejs 开发。在安装前,你必须先有一个 Nodejs 环境。Nodejs 的安装也挺简单的,这里就不展开讲了,可自行 Google

Nodejs 环境安装完成后,你只需运行下面的命令即可完成安装。

1
2
3
4
$ npm install -g git+https://git@github.com/AveryanovS/kubectx.manager
/usr/local/bin/kubemanager -> /usr/local/lib/node_modules/kubectx.manager/cli.js
+ kubectx.manager@1.0.0
added 4 packages from 6 contributors in 11.208s

安装完成后,我们就来演示如何合并多个 kubeconfig 配置文件。Kubectx.Manager 同样也是支持交互式操作的,你只需执行命令,然后根据一系列交互动作的提示进行操作便可轻松完成操作。

  1. 使用 Kubectx.Manager 自动合并
1
2
3
4
5
6
7
$ kubemanager
✔ Select action · merge
✔ Path to current kube config? · /Users/Mike/.kube/config
✔ Path to config to merge? · /Users/Mike/.kube/mike-local-kubernetes.yaml
✔ Name of new context? · mike-local
Context test created!
Config file updated!

下面我们来简单说说以上几步操作的作用。

  • 第一行选择 merge,表示合并。
  • 第二行选择需要合并到哪个 Kubeconfig,也就是你最终要用的 Kubeconfig。
  • 第三行选择需要合并的 Kubeconfig。
  • 第四行定义合并后新加入的 Context 名称。
  1. 使用 Kubectx.Manager 删除指定的集群环境

删除操作和合并操作类似,相信聪明的你一看就明白了。

1
2
3
4
5
6
$ kubemanager
✔ Select action · delete
✔ Path to current kube config? · /Users/Mike/.kube/config
✔ Select context to delete · mike-local
Context mike-local deleted!
Config file updated!

Kubectx.Manager 目前仅支持以上的两种对 Kubeconfig 文件的管理操作,相对于 KubeCM 来说功能还是相对于弱一些。它并不支持多集群和多命名空间的快速切换。如果要实现多集群和多命名空间的快速切换,你还需要结合 kubectxkubie 这类快速集群切换工具一并使用哟!

mergeKubeConfig

mergeKubeConfig 是由 Python 开发的类似的工具,它和 KubeCM 来自同一开发者。目前已停止维护,都有 Go 版本了,还要什么自行车呢?

这里顺手提一下纯粹是记录下它曾经存在过,哈哈!

好了,本文到此就结束了。这些神奇的小工具是不是很好的解决了你在 Kubernetes 多集群管理中的痛点呢?

最后,根据自己的实际情况选一个最符合你需求的使用吧。这时,你可能会惊奇的发现文中并没有这几个小工具的项目地址!

哈哈,是时候支持一波公众号了!如需以上小工具项目地址,请在公众号对话框内回复 「Kubeconfig」,即可获取这一系列小工具的项目下载地址。

参考文档

  1. https://www.google.com

  2. https://yq.aliyun.com/articles/695429

  3. https://mp.weixin.qq.com/s/Sp37W-5C3YGSNf_H8HTuUA