【问题标题】:Can I make Helm automatically delete resources created by my Helm-created app?我可以让 Helm 自动删除由我的 Helm 创建的应用程序创建的资源吗?
【发布时间】:2019-09-12 14:24:59
【问题描述】:

我有一个使用 Helm 部署的应用程序。部署后,应用程序本身有时会在与应用程序相同的命名空间中创建其他 Kubernetes 资源(如 DeploymentsServices)。当我在 Helm 版本上运行 helm delete 时,它会删除 Helm 最初创建的所有资源,但会留下应用程序创建的资源。我也想清理这些资源,我想知道是否可以让 Helm 自动清理。

我已尝试将来自here 的推荐标签(例如app.kubernetes.io/managed-byapp.kubernetes.io/instance)应用到我的新资源,但Helm 仍然没有删除它们。

我还查看了 Helm 手册,但我找不到任何关于 Helm 如何决定它“拥有”和可以删除哪些资源的明确说明。

(我知道我可以为此使用 Helm pre-deletepost-delete 挂钩,但让 Helm 的正常删除过程来执行此操作感觉更简洁。)

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    所以我不能 100% 确定你的设置,但是,如果你在谈论 CRD 和控制器,Kubernetes 使用一个称为终结器和 ownerRefs 的概念,终结器类似于在删除资源之前做 X (https://book.kubebuilder.io/reference/using-finalizers.html 非常好参考),

    OwnerReferences 本质上意味着当我删除一个资源时,任何将该资源设置为其所有者的东西都将被删除,我已在自定义控制器中设置它,但从未尝试在 yaml 上手动设置它 (https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents)

    【讨论】:

    • 我认为这主要回答了这个问题。但是,我在 Helm 创建的资源上没有看到任何 finalizersownerReferences,因此 Helm 本身如何管理删除的问题似乎仍然悬而未决。我注意到有一个带有标签OWNER=TILLERConfigMap 和一堆编码数据,这可能是Helm 存储它创建的资源列表的方式吗?我会将答案标记为已接受,因为手动设置 ownerReferences 听起来会起作用,但如果能获得更多有关 Helm 是如何做到这一点的信息,那就太好了。
    • helm 将所有资源存储在 configmaps 中,这就是它如何知道哪个图表具有哪些资源的方式,因此当您删除一个图表时,我认为从技术上讲它会找到相应的 configmap 并删除所有资源。但是,如果您的应用程序实际上正在创建资源,则它不会出现在此配置图中。所以我建议你的应用程序将它创建的资源的 ownerRefs 设置为自己,所以当应用程序被删除时,Kubernetes 将删除你的应用程序创建的资源
    • 小更新:Helm 2 将应用信息存储在 ConfigMaps 中,Helm 3 使用 Secrets。否则,我 100% 同意在您创建自己的资源并希望它们与父资源一起删除时使用 ownerReferences。请注意,您可以输入 multiple ownerReferences,在这种情况下,必须将它们全部删除,资源才能被垃圾回收。
    猜你喜欢
    • 2021-09-01
    • 2021-02-27
    • 2019-10-21
    • 1970-01-01
    • 2015-03-16
    • 2012-02-14
    • 1970-01-01
    • 2017-01-03
    • 2010-09-23
    相关资源
    最近更新 更多