使用Kubernetes,您可以使用垃圾回收器在删除拥有的资源时自动删除依赖资源。我想知道打印拥有资源的依赖树的最简单方法,如果需要的话,可能会限制到树的深度
我理解API服务崩溃的可能性,因为它能够分散到集群中的所有资源,以及为什么这不是一个容易实现的任务,但我一直在努力寻找可用的、社区支持的解决方法,甚至与此主题相关的讨论/问题(可能是我糟糕的搜索技能(,所以实现这一目标的任何帮助都将是非常好的!
为了使事情更加具体,我想实现的抽象kubectl get
查询的一个特定示例是kubectl get scheduledworkflow <workflow name> --dependents
:
- 这将找到Kubeflow Pipelines
ScheduledWorkflow
资源 - 这将找到所有Argo
Workflow
资源 - 然后,对于每个
Workflow
资源,许多Pod
和Volume
资源(存在一些其他类型,但希望描绘出这些是不同资源类型的画面(
我们通常在任何时候都只在集群中保留少量的ArgoWorkflow
资源,因为我们的大多数Workflow
产生了1k+Pod
,所以我们有非常积极的GC策略。尽管如此,现在列出这些只是痛苦的,需要使用自定义脚本来完成,但不知道是否有更高级别的CLI、SDK或API可用(或社区中任何处理此问题的小组!(。
目前还没有现成的解决方案。
我看到了两种方法:
1-可能这就是您已经提到的:";需要使用自定义脚本来完成";。
想法是获得所需资源组的json
s,然后通过任何可用/已知的语言(如bash/python/java/etc(和/或使用jq
对其进行处理。所有依赖对象都有允许匹配资源的ownerReference
字段。
有关所有者和从属的更多信息
jq工具和示例
2-基于kubernetes垃圾收集器编写自己的工具
Kubernetes垃圾收集器基于GraphBuilder
:构建的graph
工作
垃圾收集器源代码
通过使用"反射器:",图形始终是最新的
GarbageCollector运行反射器以监视托管API的变化对象,将结果集中到单个线程dependencyGraphBuilder,它构建一个缓存依赖关系的图对象之间
graph_builder源代码来获取它的整个逻辑。
已建graph
具有node
类型:
图形数据结构
此外,值得一提的是,使用可用于不同语言的kubernetes客户端库,使用api server
更方便。