专栏首页运维之美推荐几款快速管理 Kubernetes 多集群环境的神器

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

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

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

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

官方提供的解决方法

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

  1. 配置环境变量指定多个集群的 kubeconfig 文件
# 配置 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 文件
# 切换到本地集群
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 的安装非常的简单,你只需直接下载相应平台的二进制文件解压后就可使用了,完全就是开箱即用。

  • 通过二进制文件安装
# 根据你的实际情况,下载对应平台二进制文件即可。

# 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

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

# Linux & macOS
$ tar -zxvf kubecm.tar.gz kubecm
$ sudo mv kubecm /usr/local/bin/

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

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

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

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

$ 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 完成自动合并
# 将指定目录中的所有 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 快速增加一个集群配置
# 使用 KubeCM 快速增加一个集群配置文件
$ kubecm add -f mike-local-kubernetes.yaml

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

# 将当前上下文重命名为 dev
$ kubecm rename -n dev -c

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

  • Bash
$ 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
# 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 环境安装完成后,你只需运行下面的命令即可完成安装。

$ 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 自动合并
$ 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 删除指定的集群环境

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

$ 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

本文分享自微信公众号 - 运维之美(Hi-Linux),作者:iMike

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式和集群的区别还傻傻分不清楚?我用最白话的方式给你讲明白!

    分布式开发的时代实际上早已悄悄地成为了时代的主流,吵得很热的云计算实际上只是包装在分布式之外的商业概念,很多开发者(包括我)都想加入研究云计算这个潮流,在 G...

    iMike
  • 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    前段时间,我们在 「使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群」一文中介绍了如何使用 Kind 这个开箱即可快速部署 Kube...

    iMike
  • 你有一个 U 盘制作多系统安装盘的需求吗,YUMI 帮你秒实现!

    通常我们一个 U 盘只能制作成一个系统安装盘,比如制作好一个 Windows 10 安装盘,日后想要用到 Linux、WinPE 等安装盘时,只能重新制作一遍,...

    iMike
  • Kubeconfig文件自动合并-实现K8S多集群切换

    随着 Kubernetes 越来越流行,不管大公司还是小公司都往 Kubernetes 迁移,每个公司最少有两套集群(测试和生产),但是多个集群就有多个 Kub...

    YP小站
  • 资源 | 全机器学习和Python的27个速查表(完整版)

    大数据文摘
  • 可能是史上最全机器学习和Python速查表(附下载链接)

    来源:网路冷眼 作者:Hanson 本文长度为680字,建议阅读5分钟 本文为你分享有关机器学习、Python和相关数学知识的速查表大全。 机器学习有很多方面。...

    数据派THU
  • 值得收藏的27个机器学习的小抄

    机器学习(Machine Learning)有很多方面,当我开始研究学习它时,我发现了各种各样的“小抄”,它们简明地列出了给定主题的关键知识点。最终,我汇集了超...

    IT派
  • 正在研究机器学习?我们帮你准备了27个小抄…

    机器学习(Machine Learning)有很多方面,当我开始研究学习它时,我发现了各种各样的“小抄”,它们简明地列出了给定主题的关键知识点。最终,我汇集了超...

    CDA数据分析师
  • 27个机器学习图表,帮你作弊一般飞速成长!

    今天分享一篇机器学习的文章。翻了一半,发现Linux中国已经翻译过了。。。干脆搬过来,还有一个姊妹篇《My Curated List of AI and Mac...

    小小科
  • 值得收藏的27个机器学习的小抄

    昱良

扫码关注云+社区

领取腾讯云代金券