我正在为kubernetes编写自定义控制器。 我正在创建共享的线人
cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options meta_v1.ListOptions) (k8sruntime.Object, error) {
return client.CoreV1().ConfigMaps(nameSpace).List(options)
},
WatchFunc: func(options meta_v1.ListOptions) (watch.Interface, error) {
return client.CoreV1().ConfigMaps(nameSpace).Watch(options)
},
},
&api_v1.ConfigMap{},
0, //Skip resyncr
cache.Indexers{},
)
我可以选择将过滤功能添加到回调函数中,以进一步减少使用的对象数量。 像这样的东西
options.FieldSelector := fields.OneTermEqualSelector("metadata.name", nodeName).String()
我想通过正则表达式过滤掉对象。或至少通过一些标签。不幸的是,文档没有帮助。除了代码本身的测试之外,找不到任何东西。 何我在过滤机制上应用正则表达式? 我在哪里可以找到关于这个问题的一些例子?
答案 0 :(得分:2)
无法通过正则表达式过滤对象。 可以通过标签
来过滤器对象这是将按标签过滤的代码
labelSelector := labels.Set(map[string]string{"mylabel": "ourdaomain1"}).AsSelector()
informer := cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options meta_v1.ListOptions) (k8sruntime.Object, error) {
options.LabelSelector = labelSelector.String()
return client.CoreV1().ConfigMaps(nameSpace).List(options)
},
WatchFunc: func(options meta_v1.ListOptions) (watch.Interface, error) {
options.LabelSelector = labelSelector.String()
return client.CoreV1().ConfigMaps(nameSpace).Watch(options)
},
},
&api_v1.ConfigMap{},
0, //Skip resyncr
cache.Indexers{},
)
另外一件值得记住的事情是如何向k8s添加新对象 我正在做类似
的事情kubectl --namespace==ourdomain1 create configmap config4 -f ./config1.yaml
这不好。它会覆盖配置映射中的所有字段,并将整个文件内容放入新对象的数据中。 正确的方法是
kubectl create -f ./config1.yam