【问题标题】:Deleting namespace hangs on custom resource finalizer删除命名空间挂起自定义资源终结器
【发布时间】:2019-06-02 17:15:40
【问题描述】:

我已经定义了一个控制器(操作员)来处理我的 K8S 命名空间中的一些自定义资源。 每个自定义资源都有一个终结器,因此控制器可以在它被删除之前对其进行处理:

例如

kind: MyCustom
metadata:
 finalizers:
    - MyCustom.finalizers.com
 name: mycustomResourceInstance

这很好用,直到我删除命名空间(“kubectl delete ns”)。 如果 k8s 垃圾首先收集控制器 pod - “mycustomResourceInstance” 仍然停留在删除状态,并阻止成功删除命名空间。

解决方法是编辑 mycustomResourceInstance 并删除终结器。

有没有办法确保控制器不会被删除,而自定义资源的任何实例都存在于命名空间中?

【问题讨论】:

    标签: kubernetes kubernetes-custom-resources


    【解决方案1】:

    您必须查看所有者引用和前台级联删除https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/ 并将其实现到您的控制器中,以便垃圾收集器按顺序删除您的对象。

    【讨论】:

    • 感谢您的回复亚当。我将 ownerReference 用于我的控制器正在创建的资源。但这里我们讨论的是输入自定义资源,而不是输出。我可以在输入上执行此操作,而不会导致潜在的死锁吗?
    • 我假设您必须使用运营商框架之一,因此在这种情况下,在输入输出资源之间建立了 ownerReference。所以我建议在控制器-> 输入资源之间实现一个 ownerReference,所以在这种情况下,如果控制器被删除,它将删除所有输入资源,这也会导致所有输出资源的删除。我不认为这种方法会导致死锁。
    • 再次感谢。是的,我正在使用拥有所有 myCustom 实例的 Operator 的 github.com/operator-framework/operator-sdkownerReference?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多