【问题标题】:How to recursively get dependent resources of Kubernetes owner resource如何递归获取Kubernetes owner资源的依赖资源
【发布时间】:2021-07-29 19:40:07
【问题描述】:

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

我了解 API 服务可能会崩溃,因为它能够扇出到集群中的所有资源,并且很可能为什么这不是一个容易实现的壮举,但我一直在努力寻找可用的、社区支持的解决方法甚至与该主题相关的讨论/问题(可能是我的搜索技能不佳),因此任何帮助实现这一点都会很棒!


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

  • 这将找到 Kubeflow Pipelines ScheduledWorkflow 资源然后递归,
  • 这将找到所有 Argo Workflow 资源,
  • 然后对于每个 Workflow 资源,许多 PodVolume 资源(还有一些其他类型,但想描绘这些资源类型不同)。

我们通常每次只在集群中保留少量的 Argo Workflow 资源,因为我们 Workflow 的大部分产生 1k+ Pod 所以我们制定了非常激进的 GC 策略。即便如此,列出这些目前也很痛苦,需要使用自定义脚本来完成,但想知道是否有更高级别的 CLI、SDK 或 API 可用(或社区中任何致力于此问题的小组!)。

【问题讨论】:

    标签: kubernetes garbage-collection kubectl


    【解决方案1】:

    没有现成的解决方案。

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


    1 -可能这就是您已经提到的:“需要使用自定义脚本来执行此操作”。

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

    More information about owners and dependents

    jq tool and examples


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

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

    garbage collector source code

    使用 `reflectors: 图表始终是最新的:

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

    graph_builder source code 得到它的全部逻辑。

    内置 graph 具有 node 类型:

    graph data structure

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

    【讨论】:

    • 当然可以,感谢您的详细介绍!
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多