Контроллеры, создающие / наблюдающие за ресурсами в пространстве имен, отличном от их настраиваемого ресурса
У меня есть контроллер, который согласовывает настраиваемый ресурс 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)