【问题标题】:Controllers creating/watching resources in different namespace than their Custom Resource控制器在与其自定义资源不同的命名空间中创建/监视资源
【发布时间】:2021-03-12 17:57:52
【问题描述】:

我有一个控制器,它在“foo”命名空间中协调 MyKind 自定义资源。在协调循环中,它在“bar”命名空间中创建部署 MyDeployment。我想知道如何在“bar”命名空间中创建的 MyDeployment 上设置监视,该命名空间不同于自定义资源所在的命名空间(“foo”)。

我尝试使用以下设置我的管理器,但它似乎不起作用,因为我试图观察的部署位于不同的命名空间中,因此控制器无法接收部署上的 CRUD 操作的任何事件。

    return controllerruntime.NewControllerManagedBy(mgr).
        For(&v1alpha1.MyKind{}).
        Owns(&appsv1.Deployment{}).
        Complete(r)
}

是否有任何自定义手表可以配置我的控制器,以便接收不同命名空间中的部署事件。

注意:我尝试了 handler.EnqueueRequestsFromMapFunc,IIUC 它还为同一命名空间中的 Kinds 进行了协调。

【问题讨论】:

    标签: kubernetes kubebuilder


    【解决方案1】:

    您可以通过在创建时传入ctrl.Options{} 对象来在管理器选项中指定命名空间。

    namespace := "namespace1,namespace2"
    options := ctrl.Options{
            .
            .
            .
            Namespace: cache.MultiNamespacedCacheBuilder(strings.Split(namespace, ","))
        }
    
    mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
    

    【讨论】:

    • 您好 Hazim,感谢您的快速回答,在启动管理器之前,名称空间是未知的,有没有办法在管理器启动后执行此操作?
    • Namespace 属性设置为空字符串应该使控制器在所有命名空间中查找。然后,您需要确保使用正确的 RBAC 部署它,使其可能读取所有命名空间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2016-10-28
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多