前言
最近接手了一个规模比较大的集群,光是整理集群中的资源就使人头昏眼花,虽然我自认 kubectl
使用的已经十分熟练,但是上千个 kubernetes resource 看下来还是不堪重负。在不能为集群安装任何其他工具的情况下,可以改造的就只有我自己的 client 端,也就是 kubectl
了。本文就介绍一个有趣的 kubectl 插件:kubectl-graph
。
krew
要介绍 kubectl 的 plugin 机制,首先要介绍的就是 krew 。 krew 是 kubernetes CLI SIG 项目,是用来管理 kubectl 插件的工具,作用类似于 yum 和 brew,可以用来搜索、安装和管理 kubectl 插件。
kubectl-graph
kubectl-graph 是一款可视化 kubernetes resource 及资源间关系的 kubectl 插件,可以将集群中的资源以关系图的方式进行展示。
目前支持两种展示方法: - Graphviz - Neo4j
前期准备
除了 kubectl
,由于需要进行绘图,所以还需安装上面两种展示方式的依赖。
Graphviz
安装 Graphviz 用来生成关系图,需要使用 dot
CLI 工具,并将图像输出为 SVG 格式:
$ brew install graphviz
Neo4j
Neo4j 是一个高性能的 NoSQL 图形数据库,它将结构化数据存储在网络上而不是表中,很适合用来展示 kubernetes resource 之间的关系,但 Neo4j 的依赖较多,需要一点时间来安装。
安装 Java
Neo4j 依赖 Java 环境,如果本机上没有安装 Java,请先前往 http://www.java.com 下载并安装。
安装 cypher-shell
因为需要连接到 Neo4j 数据库,所以要安装 cypher-shell
CLI:
$ brew install cypher-shell
安装 Neo4j Desktop(可选)
接下来就是 Neo4j 本身的安装,我这里使用了 Neo4j Desktop
,使用和管理起来比较方便,也是使用 brew
安装:
$ brew install --cask neo4j
安装好后,运行 Neo4j Desktop
,完成设置即可
使用 docker 运行 Neo4j(可选)
当然,如果你感觉安装 Neo4j Desktop
比较麻烦,也可以使用 docker 运行 Neo4j:
$ docker run --rm -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=none neo4j
只不过后续查看关系图时,需要使用浏览器访问 http://localhost:7474 来查看结果。
安装 kubectl-graph
插件的安装方式比较简单,如果你使用的是 kubectl 1.19
之前的版本:
$ kubectl-krew install graph
使用 kubectl 1.19
之后的版本:
$ kubectl krew install graph
使用方式
安装完成后,就可以开始绘制 kubernetes resource 关系图了。
Graphviz
使用 kubectl graph
命令获取 kubec-system
中正在运行的 pod,并通过管道传递给 dot
:
$ kubectl graph pods --field-selector status.phase=Running -n kube-system | dot -T svg -o pods.svg
查看 pods.svg
,资源果然很多:
Neo4j
Neo4j 可以展示更为丰富且美观的关系图。在导入 kubernetes resource 之前,需要创建一个 Neo4j 数据库:
数据库创建好后,点击 Start
运行并点击 Open
打开 Neo4j Browser
:
执行命令将 kubernetes resource 导入 Neo4j:
kubectl graph all -n kube-system -o cypher | cypher-shell -u neo4j -p <your-pass>
注意
这里的 -u
需要输入 neo4j
而不是你创建的数据库名称,Neo4j Browser
上也有提示:
之后就可以在 Neo4j 上查看了,输入查询语句:MATCH (n) RETURN n
:
这时一个美观的 kubernetes resource 关系图就出现了。
结语
kubectl 还有很多好用且有趣的 plugin,后续笔者会介绍如何开发一个 kubectl plugin 并分享更多有趣的 plugin。