如何递归获取Kubernetes所有者资源的依赖资源



使用Kubernetes,您可以使用垃圾回收器在删除拥有的资源时自动删除依赖资源。我想知道打印拥有资源的依赖树的最简单方法,如果需要的话,可能会限制到树的深度

我理解API服务崩溃的可能性,因为它能够分散到集群中的所有资源,以及为什么这不是一个容易实现的任务,但我一直在努力寻找可用的、社区支持的解决方法,甚至与此主题相关的讨论/问题(可能是我糟糕的搜索技能(,所以实现这一目标的任何帮助都将是非常好的!


为了使事情更加具体,我想实现的抽象kubectl get查询的一个特定示例是kubectl get scheduledworkflow <workflow name> --dependents:

  • 这将找到Kubeflow PipelinesScheduledWorkflow资源
  • 这将找到所有ArgoWorkflow资源
  • 然后,对于每个Workflow资源,许多PodVolume资源(存在一些其他类型,但希望描绘出这些是不同资源类型的画面(

我们通常在任何时候都只在集群中保留少量的ArgoWorkflow资源,因为我们的大多数Workflow产生了1k+Pod,所以我们有非常积极的GC策略。尽管如此,现在列出这些只是痛苦的,需要使用自定义脚本来完成,但不知道是否有更高级别的CLI、SDK或API可用(或社区中任何处理此问题的小组!(。

目前还没有现成的解决方案。

我看到了两种方法:


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

想法是获得所需资源组的jsons,然后通过任何可用/已知的语言(如bash/python/java/etc(和/或使用jq对其进行处理。所有依赖对象都有允许匹配资源的ownerReference字段。

有关所有者和从属的更多信息

jq工具和示例


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

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

垃圾收集器源代码

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

GarbageCollector运行反射器以监视托管API的变化对象,将结果集中到单个线程dependencyGraphBuilder,它构建一个缓存依赖关系的图对象之间

graph_builder源代码来获取它的整个逻辑。

已建graph具有node类型:

图形数据结构

此外,值得一提的是,使用可用于不同语言的kubernetes客户端库,使用api server更方便。

相关内容

最新更新