#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, позволяя ему, вероятно, считываться во всех пространствах имен