目录

kubernetes应用-终端版集群管理神器-k9s

kubernetes 集群管理神器 k9s .

写在前面

市面上开源的 kubernetes 管理平台有很多,有命令行、桌面版,也有 web 终端,总的来说,不同的场景有不同的产品适用,但对于运维来说,如果有一款快速、高效、使用简单、操作方便的工具,那更再好不过了。

开始之前,我们先说说常见的几款管理工具:

  1. rancher

    一开始我用 web ui 版本的管理工具,就是用的 rancher ,我用的时候,才 2.3 的版本,现在估计已经是 2.7 了。而且自从被收购了以后,有种越做越差的感觉,如果是开放给开发群体使用,用它来做权限控制还是不错的。

  2. kubesphere

    青云的 kubesphere web ui 做得也不错,但是它使用起来也是有一些不太如意的地方,比如 web ui 一些资源相关的字段展示需要一个个点进去才能看,就没那么直观,而且多集群管理需要在每个集群上都部署一套(不知道现在改了没有)就很笨重,也不怎么好用。

  3. kubeboard

    大部分人一开始接触 kubernetes ,各种教程都会说要你装这个来做图形化界面管理,中规中矩,没什么亮点也没什么大的缺点,我平时也很少使用。

k9s 介绍

接下来我们说说 k9s 这款管理工具。我忘记之前是在哪个不起眼的网站看到的了,怀着试试的心态,试了一下,觉得非常得心应手,从此就爱上了这款工具。(不是广告,纯属好物分享。)

官方GitHub

我们简单介绍一下使用体验,具体用法和参数,移步官方GitHub:“derailed/k9s”

安装

按照 GitHub 提供的几种方法安装即可,我用的是二进制文件安装,然后配好环境变量 直接敲打 k9s 就可以开始起飞了。

操作

  1. 一开始进来的时候,默认是 default 命名空间的 pod 视图,如果你的默认命名空间如果没有 pod 的话,是一片空白的。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E5%88%9D%E5%A7%8B%E5%8C%96%E7%95%8C%E9%9D%A2.png
k9s初始化界面
  1. 根据顶部导航栏的提示,我们按下 0 ,显示所有命名空间下的 pod 。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E5%88%97%E5%87%BA%E6%89%80%E6%9C%89pod.png
k9s列出所有pod
  1. 这里所有命名空间下的 pod 一览无遗,包括监控数据,pod 的健康情况,节点,重启次数等等,当然了, pod 数量比较多的情况下,可能会有点晃眼,但是,你可以根据上面的导航学会过滤命名空间, pod 等资源,操作快速简单,比如我要从几千个 pod 过滤出 kube-system 下的 coredns pod 。

  2. 按下 / 键,输入想要过滤的任意值,如 core 或者 dns ,或者随便一个你想要的字母数字等。

/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E8%BF%87%E6%BB%A4%E8%B5%84%E6%BA%90.png
k9s过滤资源
  1. coredns 的 pod 很快就被过滤出来了,就算有几千 pod ,也是 1-2 秒的事情,它是有缓存资源信息到本地的。

  2. 如果不太清楚怎么操作,可以按 查看帮助文档,很详细,比如资源类型切换,我想从 pod 切换到 node 节点视图,怎么操作?

  3. 按下 : 会出来一个资源过滤框,输入资源名称或者缩写,比如 deployment ,输入 dp 即可(具体可以参考官方GitHub,自己定义资源名称简写也是可以的),输入 node 我们切换到 node 资源看看。

/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E5%88%97%E5%87%BA%E8%8A%82%E7%82%B9.png
k9s列出节点
  1. 我们如果想看资源的具体详细配置,怎么看?回到 pod 资源界面(你自己想看其他资源一样的操作),我们随便找个 pod 看看,用方向键选中想要查看的 pod ,按下 Y 键。用方向键或者 pageup 、 pagedown 操作,跟 vim 一样,因为它可以指定文本编辑器来查看详情,默认就是 vim 。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E8%B5%84%E6%BA%90%E8%AF%A6%E6%83%85.png
k9s资源详情
  1. 如果想进入容器排查网络相关或者文件系统相关的故障,我们可以在选中的 pod 上面按下 S 键,即可进入 pod 里面的,包含 sidecar 容器的话,多个容器会出来一个容器列表让你选择要进入具体哪个容器。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E8%BF%9B%E5%85%A5%E5%AE%B9%E5%99%A8.png
k9s进入容器
  1. 查看日志,这个可以查看容器的标准输出,如果你的日志是落盘到文件系统上面,且没有输出到标准输出,这里是看不到日志的。按下 L 键查看。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E6%9F%A5%E7%9C%8B%E6%97%A5%E5%BF%97.png
k9s查看日志
  1. 它还有很多很多操作,比如我要查看 crd 资源,我要看 clusterrole 资源,按照上面的方法,输入 : 输入对应的资源类型名称即可,比如 clusterrole 。
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E6%9F%A5%E7%9C%8B%E5%85%B6%E4%BB%96%E8%B5%84%E6%BA%90.png
k9s查看其他资源

很方便,很快速,很简单,简直大爱,说了这么多,还有一个问题,那就是多集群管理呢?

多集群

  1. 在开始多集群管理之前,我们需要对 kubeconfig 做一个融合操作,把想要管理的集群配置文件融合到一起,方便上下文切换。

  2. 操作如下:

修改 kubeconfig 相关字段,方便识别。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
clusters:
- cluster:
    ...
  name: kubernetes-dev
contexts:
- context:
    cluster: kubernetes-dev
    user: kubernetes-admin-dev
  name: kubernetes-dev
current-context: kubernetes-admin@kubernetes

上下文融合到一起。

1
2
3
4
cd .kube

# config-kind,config-dev 是 .kube 目录下,不同集群的 kubeconfig 配置文件
KUBECONFIG=config-kind:config-dev kubectl config view --flatten > $HOME/.kube/config
注意
注意备份 config ,因为该命令会覆盖 .kube 目录下的 config 文件。
  1. 打开 k9s ,输入 : + ctx
/kubernetes%E5%BA%94%E7%94%A8-%E7%BB%88%E7%AB%AF%E7%89%88%E9%9B%86%E7%BE%A4%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-k9s/k9s%E4%B8%8A%E4%B8%8B%E6%96%87.png
k9s上下文

使用键盘方向键选择想要的集群按回车即可。

总结

笔者在多集群这一步也是使用了 k9s 很久一段时间后才搞明白,第一是它官方 GitHub 没有写,第二是别人对 k9s 的文章也都是复制粘贴的,一模一样,标点符号都没改,都没提及这个。

不过多集群管理我也是很少用:

  1. 怕操作失误,等下是要在开发环境操作的东西,忘记切换上下文变成在生产环境操作,那就 GG 了。

  2. 环境隔离,用的 alias 的方法,不同环境配置了不同的启动别名,就不会搞错了。当然,你们如果很自信的话,可以多环境放一起切换操作。