K8S 资源可视化利器:Kubectl-Graph

用户头像
郭旭东
关注
发布于: 2020 年 12 月 29 日
K8S 资源可视化利器:Kubectl-Graph

前言



最近接手了一个规模比较大的集群,光是整理集群中的资源就使人头昏眼花,虽然我自认 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 插件,可以将集群中的资源以关系图的方式进行展示。



目前支持两种展示方法:



前期准备



除了 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,完成设置即可



设置 neo4j



使用 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 ,资源果然很多:



pods.svg



Neo4j



Neo4j 可以展示更为丰富且美观的关系图。在导入 kubernetes resource 之前,需要创建一个 Neo4j 数据库:



创建 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。





发布于: 2020 年 12 月 29 日阅读数: 578
用户头像

郭旭东

关注

服务可靠无异常,机器稳定不宕机 2018.09.08 加入

柴猫双全的码农

评论

发布
暂无评论
K8S 资源可视化利器:Kubectl-Graph