kubernetes - 控制器在与其自定义资源不同的命名空间中创建/监视资源
问题描述
我有一个控制器,它在“foo”命名空间中协调 MyKind 自定义资源。在协调循环中,它在“bar”命名空间中创建部署 MyDeployment。我想知道如何在“bar”命名空间中创建的 MyDeployment 上设置监视,该命名空间不同于自定义资源所在的命名空间(“foo”)。
我尝试使用以下设置我的管理器,但它似乎不起作用,因为我试图观察的部署位于不同的命名空间中,因此控制器无法接收部署上的 CRUD 操作的任何事件。
return controllerruntime.NewControllerManagedBy(mgr).
For(&v1alpha1.MyKind{}).
Owns(&appsv1.Deployment{}).
Complete(r)
}
是否有任何自定义手表可以配置我的控制器,以便在不同的命名空间中接收部署事件。
注意:我尝试了 handler.EnqueueRequestsFromMapFunc,IIUC 它还协调了同一命名空间中的 Kinds。
解决方案
您可以通过在ctrl.Options{}
创建对象时传入对象来在管理器选项中指定命名空间。
namespace := "namespace1,namespace2"
options := ctrl.Options{
.
.
.
Namespace: cache.MultiNamespacedCacheBuilder(strings.Split(namespace, ","))
}
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
推荐阅读
- python - Discord.py 帮助命令(对编辑消息做出反应)
- git - 在 gitbash 上显示文件夹名称而不是整个目录路径
- arrays - 基于另一个工作表的列表框 vlookup 代码
- reactjs - 如何使模态覆盖整个屏幕并同时响应网络?
- android - tawk.to 在 React Native 中的集成?
- reactjs - 在 Reactjs 中实现嵌套路由的问题
- assembly - 当数据类型为 64 位时,为什么要使用 32 位寄存器?
- wordpress - Wordpress 多个自定义帖子类型存档页面
- mongodb - mongoimport upsert和merge有什么区别
- javascript - 在 Safari 浏览器而非 Google Chrome 上发现的网页上的伪影