Контроллеры, создающие / наблюдающие за ресурсами в пространстве имен, отличном от их настраиваемого ресурса

У меня есть контроллер, который согласовывает настраиваемый ресурс MyKind в пространстве имен foo. В цикле согласования он создает развертывание MyDeployment в пространстве имен bar. Мне интересно, как я могу настроить часы для MyDeployment, созданного в пространстве имен 'bar', которое отличается от пространства имен ('foo'), в котором находится пользовательский ресурс.

Я попытался настроить своего менеджера следующим образом, но он, похоже, не работает, поскольку развертывание, которое я пытаюсь наблюдать, находится в другом пространстве имен, поэтому контроллер не может получать никаких событий для операции CRUD при развертывании.

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

Есть ли какие-либо специальные часы, с которыми я могу настроить свой контроллер, чтобы получать события для развертывания в другом пространстве имен.

Примечание: я пробовал handler.EnqueueRequestsFromMapFunc, IIUC, он также согласовывает типы в том же пространстве имен.

2 ответа

Вы можете использовать MultiNamespacedCacheBuilder в качествеNewCacheфункция при создании менеджера. Это можно установить в manager.Options.

Например:

      namespace := "ns1,ns1"
options := ctrl.Options{
    .
    .
    .
    NewCache: cache.MultiNamespacedCacheBuilder(strings.Split(namespace, ","))
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)

Вы можете указать пространства имен в параметрах менеджера, передав ctrl.Options{} объект, создавая его.

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

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
Другие вопросы по тегам