kubernetes - Kubebuilder 谓词跳过某些命名空间

标签 kubernetes kubernetes-operator kubebuilder

我在 Controller 中使用 kubebuilder 框架,并且我想完全忽略给定系统 namespace 列表中的事件。我认为谓词一定是最好的选择,因此我有以下代码

...

WithEventFilter(predicate.Funcs{
            GenericFunc: func(e event.GenericEvent) bool {
                namespace := e.Object.GetNamespace()
                if _, ok := systemNs[namespace]; ok {
                    // ignore events from system namespaces
                    return false
                }

                return true
            },
}).

但是,我仍然收到来自所有命名空间的事件,而不仅仅是我允许的事件。 这是谓词的正确且有效的用例吗?

最佳答案

根据controller-runtime

Generic is called in response to an event of an unknown type or a synthetic event triggered as a cron or external trigger request - e.g. reconcile Autoscaling, or a Webhook.

大多数时候,协调会在创建更新删除时触发,因此您需要过滤这些事件。

WithEventFilter(predicate.Funcs{
    CreateFunc: func(e event.CreateEvent) bool {
        namespace := e.Object.GetNamespace()
        if _, ok := systemNs[namespace]; ok {
            // ignore events from system namespaces
            return false
        }
        return true
    },
    UpdateFunc: func(e event.UpdateEvent) bool {
        namespace := e.ObjectNew.GetNamespace()
        if _, ok := systemNs[namespace]; ok {
            // ignore events from system namespaces
            return false
        }
        return true
    },
    DeleteFunc: func(e event.DeleteEvent) bool {
        namespace := e.Object.GetNamespace()
        if _, ok := systemNs[namespace]; ok {
            // ignore events from system namespaces
            return false
        }
        return true
    },
}).

关于kubernetes - Kubebuilder 谓词跳过某些命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69857103/

相关文章:

kubernetes - 两个K8S Controller 同时修改同一个资源可以吗?

kubernetes - 为什么我不能在 kubernetes 运算符中更改 cr 的值

kubernetes - 为什么准入 webhook 在 kubebuilder 书中的 CronJob 示例中不起作用

go - K8s算子读取原始数据

kubernetes - Istio (1.6.4) 在 K8s 上进行日志聚合的最佳实践

nginx - kubernetes liveness探针重新启动以CrashLoopback结尾的Pod

kubernetes - K8 cronjob 与 python 应用程序的部署规范

linux - docker journald 日志记录驱动程序也会导致大量日志记录到/var/log/syslog 和/var/log/kern.log

kubernetes-operator - 无法在 `openshift-marketplace` 之外安装运算符(operator)