如何递归获取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
:
- 这会找到 Kubeflow Pipelines
ScheduledWorkflow
资源然后递归,
- 这会找到所有 Argo
Workflow
资源,
- 然后对于每个
Workflow
资源,许多 Pod
和 Volume
资源(还有一些其他类型,但想描绘这些是不同资源类型的图片)。
我们通常一次只在集群中保留少量 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
2 -自己写一个基于kubernetes垃圾收集器的工具
Kubernetes 垃圾收集器基于 GraphBuilder
构建的 graph
:
通过使用`反射器,图表始终是最新的:
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
类型:
另外值得一提的是,使用 api server
使用 kubernetes clients libraries 更方便,后者适用于不同的语言。
借助 Kubernetes,您可以使用 Garbage Collector 在删除拥有的资源时自动删除依赖资源。我想知道打印出拥有资源的依赖关系树的最简单方法,如果需要,可能会限制到树的深度。
我理解 API 服务崩溃的可能性,因为它能够扇出到集群中的所有资源,并且可能为什么这不是一件容易实现的壮举,但我一直在努力甚至找到可用的、社区支持的变通方法,甚至 discussions/issues 与该主题相关(可能是我的搜索技巧不佳),所以任何帮助实现这一目标的帮助都会很棒!
为了使事情更具体,我想实现的抽象 kubectl get
查询的具体示例类似于 kubectl get scheduledworkflow <workflow name> --dependents
:
- 这会找到 Kubeflow Pipelines
ScheduledWorkflow
资源然后递归, - 这会找到所有 Argo
Workflow
资源, - 然后对于每个
Workflow
资源,许多Pod
和Volume
资源(还有一些其他类型,但想描绘这些是不同资源类型的图片)。
我们通常一次只在集群中保留少量 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
2 -自己写一个基于kubernetes垃圾收集器的工具
Kubernetes 垃圾收集器基于 GraphBuilder
构建的 graph
:
通过使用`反射器,图表始终是最新的:
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
类型:
另外值得一提的是,使用 api server
使用 kubernetes clients libraries 更方便,后者适用于不同的语言。