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

问题描述 投票:0回答:2

借助 Kubernetes,您可以使用“垃圾收集器”在删除拥有的资源时自动删除依赖资源。我想知道打印出拥有资源的依赖关系树的最简单方法,如果需要的话可能会限制树深度。 我理解 API 服务崩溃的可能性,因为它能够扇出集群中的所有资源,也可能理解为什么这不是一件容易实现的事情,但我一直在努力寻找可用的、社区支持的解决方法,甚至与该主题相关的讨论/问题(可能是我糟糕的搜索技巧),因此任何有助于实现这一目标的帮助都会很棒!

为了使事情更加具体,我想要实现的抽象
kubectl get

查询的具体示例将类似于

kubectl get scheduledworkflow <workflow name> --dependents
:

这将找到 Kubeflow Pipelines
    ScheduledWorkflow
  • 资源,然后递归,
    这将找到所有 Argo 
  • Workflow
  • 资源,
    然后,对于每个 
  • Workflow
  • 资源,许多
    Pod
    Volume
    资源(还有一些其他类型,但想要描绘出这些不同资源类型的图片)。
    
    
  • 我们通常只会在任何时候在集群中保留少量 Argo
Workflow

资源,因为我们的大多数

Workflow
会生成 1k+
Pod
,因此我们制定了相当激进的 GC 策略。即便如此,列出这些目前还是很痛苦,需要使用自定义脚本来完成,但想知道是否有更高级别的 CLI、SDK 或 API 可用(或社区中任何致力于此问题的小组!)。
    

kubernetes garbage-collection kubectl
2个回答
0
投票

我看到有两种选择:


1 -

可能这就是您已经提到的:“需要使用自定义脚本来做到这一点”。 想法是获取所需资源组的

json

,然后通过任何可用/已知的语言(如bash/python/java/等)和/或使用

jq
来处理它。所有依赖对象都有
ownerReference
字段,允许匹配资源。

有关业主和家属的更多信息

jq 工具和示例


2 -

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

graph

构建的

GraphBuilder
工作:

垃圾收集器源代码

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

GarbageCollector 运行反射器来监视托管 API 的更改 对象,将结果汇集到单线程 dependencyGraphBuilder,构建一个缓存依赖关系的图 物体之间

graph_builder 源代码

以获得它的完整逻辑。 内置

graph

node
类型:

图数据结构

还值得一提的是,使用

api server

使用可用于不同语言的

kubernetes 客户端库
会更方便。


0
投票

我创建了这个能够执行此操作的脚本:

kube-map

它根据实际对象引用链接资源。

© www.soinside.com 2019 - 2024. All rights reserved.