如何递归获取Kubernetes owner资源的依赖资源

How to recursively get dependent resources of Kubernetes owner resource

借助 Kubernetes,您可以使用 Garbage Collector 在删除拥有的资源时自动删除依赖资源。我想知道打印出拥有资源的依赖关系树的最简单方法,如果需要,可能会限制到树的深度。

我理解 API 服务崩溃的可能性,因为它能够扇出到集群中的所有资源,并且可能为什么这不是一件容易实现的壮举,但我一直在努力甚至找到可用的、社区支持的变通方法,甚至 discussions/issues 与该主题相关(可能是我的搜索技巧不佳),所以任何帮助实现这一目标的帮助都会很棒!


为了使事情更具体,我想实现的抽象 kubectl get 查询的具体示例类似于 kubectl get scheduledworkflow <workflow name> --dependents:

我们通常一次只在集群中保留少量 Argo Workflow 资源,因为我们 Workflow 的大多数 spawn 1k+ Pod 所以我们有漂亮的积极的 GC 政策到位。即便如此,目前列出这些仍然很痛苦,需要使用自定义脚本来完成,但想知道是否有更高级别的 CLI、SDK 或 API 可用(或社区中处理此问题的任何小组! ).

没有现成的解决方案。

我看到两个如何进行的选项:


1 - 可能这就是您已经提到的:“需要使用自定义脚本来完成”。

想法是获取 json 所需的资源组,然后使用任何 available/known 语言处理它,例如 bash/python/java/etc and/or 使用 jq。所有依赖对象都有 ownerReference 允许匹配资源的字段。

More information about owners and dependents

jq tool and examples


2 -自己写一个基于kubernetes垃圾收集器的工具

Kubernetes 垃圾收集器基于 GraphBuilder 构建的 graph:

garbage collector source code

通过使用`反射器,图表始终是最新的:

GarbageCollector runs reflectors to watch for changes of managed API objects, funnels the results to a single-threaded dependencyGraphBuilder, which builds a graph caching the dependencies among objects

graph_builder source code 了解它的全部逻辑。

内置 graph 具有 node 类型:

graph data structure

另外值得一提的是,使用 api server 使用 kubernetes clients libraries 更方便,后者适用于不同的语言。