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

#kubernetes #kubebuilder

#kubernetes #kubebuilder

Вопрос:

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

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

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

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

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

Комментарии:

1. Привет, Капур, ты нашел решение, потому что у меня то же самое с kubebuilder-v3

Ответ №1:

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

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

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

Комментарии:

1. Привет, Хазим, спасибо за быстрый ответ, пространства имен неизвестны до запуска менеджера, есть ли способ, которым мы можем сделать это после запуска менеджера?

2. Установка Namespace свойства в пустую строку должна заставить контроллер просматривать все пространства имен. Затем вам нужно убедиться, что вы развертываете его с правильным RBAC, позволяя ему, вероятно, считываться во всех пространствах имен