kubectl-graph:可视化 Kubernetes 资源及关系的 kubectl 插件

A kubectl plugin to visualize Kubernetes resources and relationships.

分支1Tags14

kubectl-graph

License Workflow Status GitHub Issues Go Version Latest Release

kubectl 插件,用于可视化 Kubernetes 资源及其关系。

前提条件

该插件需要 Graphviz、Neo4j 或 ArangoDB 才能可视化依赖图。

Graphviz

默认 输出格式需要 dot 将输出转换为便于使用的格式。

brew install graphviz
Neo4j

CQL 输出格式要求使用 cypher-shell 连接 Neo4j 数据库。

brew install cypher-shell
ArangoDB

AQL 输出格式需要使用 curl 和 jq 向 ArangoDB 服务器发起 API 请求。

brew install curl jq

是否有遗漏?请提交 issue 或创建 pull request。

安装

该 kubectl 插件通过 krew 分发。要安装它,请运行以下命令:

kubectl krew install graph

用法

总体上,该插件的工作方式类似于 kubectl get,但会先解析 Kubernetes 资源之间的关系,然后再以 AQL、CQL 或 DOT 格式输出图形。默认情况下,插件使用 DOT 作为输出格式。

kubectl graph [(-o|--output=)aql|arangodb|cql|cypher|dot|graphviz|mermaid] (TYPE[.VERSION][.GROUP] ...) [flags]

快速入门

本快速入门指南以 macOS 为例。在其他操作系统上,命令可能会有所不同。

Graphviz

Graphviz Logo

当你已安装 dot 命令行工具后,即可获取 kube-system 命名空间下所有正在运行的 Pod,并将输出直接传递给 dot 命令。

kubectl graph pods --field-selector status.phase=Running -n kube-system | dot -T svg -o pods.svg

现在,当前工作目录下会有一个 pods.svg 文件,可使用任意网页浏览器查看:

open pods.svg

如果你对 SVG 作为输出格式不满意,请查看官方 文档。

Neo4j

Neo4j 标识 Neo4j 标识

在导入所有 Kubernetes 资源之前,你需要创建一个 Neo4j 数据库。
这可以有多种实现方式,具体取决于你的偏好。

Docker

Docker 是使用 Neo4j 服务器和空数据库最便捷的入门方式。

docker run --rm -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/secret neo4j

当容器启动并正常运行后,您可以打开 http://localhost:7474/ 处的 Neo4j Browser 界面。

Neo4j Desktop

Neo4j Desktop 应用可轻松创建任意数量的本地数据库。

brew install --cask neo4j

安装完成后,打开 Neo4j Desktop.app,并执行以下步骤:

  1. 创建新项目,并为其命名。
  2. 创建一个本地 DBMS,例如使用 quickstart 作为名称和 secret 作为密码。
  3. 点击 Start,然后输入密码。
  4. 数据库启动并正常运行后,点击 Open 打开 Neo4j Browser 界面。

Neo4j Desktop

打开 Neo4j Browser 界面后,就可以开始获取 kube-system 命名空间中的所有资源,并将输出直接通过管道传递给 cypher-shell 命令。

kubectl graph all -n kube-system -o cypher | cypher-shell -u neo4j -p secret

最后,在 Neo4j Browser 界面中,你可以在命令行输入以下查询:

MATCH (n) RETURN n         // Render all nodes as a visual graph
MATCH (n) DETACH DELETE n  // Delete all nodes and relationships

有关 Cypher 查询语言的更多信息,请参阅官方 文档。

ArangoDB

ArangoDB Logo ArangoDB Logo

在导入所有 Kubernetes 资源之前,你需要先创建一个 ArangoDB 数据库。
可通过多种方式完成,具体取决于你的偏好。

Docker

Docker 是启动 ArangoDB 服务器并创建空数据库的最简单方式。

docker run --rm -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb

当容器启动并运行后,即可通过 http://localhost:8529/ 打开 ArangoDB Browser 界面。

如果你从空数据库开始,需要创建两个集合,一个用于资源,另一个用于关系。

curl http://localhost:8529/_api/collection -d '{"type": 2, "name": "resources"}'
curl http://localhost:8529/_api/collection -d '{"type": 3, "name": "relationships"}'

之后,您还需要创建一个 graph,需提供其名称以及边的定义。

curl http://localhost:8529/_api/gharial -d @- <<EOF
  {"name": "quickstart", "edgeDefinitions": [
    {"collection": "relationships", "from": ["resources"], "to": ["resources"]}
  ]}
EOF

最后,当你创建好这两个集合后,就可以开始获取 kube-system 命名空间中的所有资源,并将输出直接通过管道发送到 ArangoDB HTTP API 端点。

kubectl graph all -n kube-system -o aql \
  | eval 'jq -n --arg stdin "$(cat)" "{query:\$stdin}"' \
  | curl http://localhost:8529/_api/cursor -d @-

有关 HTTP API 的更多信息,请参阅官方 文档。

示例

Grafana Loki

Loki 是一个受 Prometheus 启发的、横向可扩展、高可用、多租户的日志聚合系统。

Grafana Loki

kubectl graph all -n loki -o cypher | cypher-shell -u neo4j -p secret

开发

如果您希望参与插件开发,请先在本地安装 Go 然后运行以下命令即可测试您的改动:

go run ./cmd/kubectl-graph/main.go all -n <namespace> | dot -T png -o all.png

许可证

本项目基于 Apache License 2.0 授权,详见 LICENSE。

项目介绍

A kubectl plugin to visualize Kubernetes resources and relationships.

定制我的领域