SharedInformerFactoryWithOptions - 无法根据标签进行过滤

我想查看某个应用程序的 Kubernetes pod 事件。


我选择了 NewSharedInformerFactoryWithOptions。我添加了适当的标签选择器,但它没有被过滤掉。因为我想使用标签过滤它:'app=nats-box'


这是代码 -


req, err := labels.NewRequirement("app", selection.Equals, []string{"nats-box"})

    if err != nil {

        log.Fatalf("error %s, bad requirement", err.Error())

    }

selector := labels.NewSelector()

selector.Add(*req)


filteredFactory := informers.NewSharedInformerFactoryWithOptions(clientset, 0, informers.WithNamespace("default"), informers.WithTweakListOptions(func(options *metav1.ListOptions) {

    options.LabelSelector = selector.String()

}))


podInformer := filteredFactory.Core().V1().Pods().Informer()


podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{

    AddFunc: func(obj interface{}) {

        fmt.Println("pod add")

        name := obj.(*corev1.Pod).Name

        labels := obj.(*corev1.Pod).Labels

        fmt.Printf("pod Name: %s\nLabels - %v\n\n", name, labels)

    })

我得到了所有 pod 的输出,命名空间被过滤但标签没有被过滤。无法弄清楚我在哪里犯了错误。


红糖糍粑
浏览 93回答 2
2回答

慕哥6287543

您可以直接在中提供标签字符串opts.LabelSelector:labelOptions := informers.WithTweakListOptions(func(opts *metav1.ListOptions) {    opts.LabelSelector = "app=nats-box"})factory := informers.NewSharedInformerFactoryWithOptions(clientset, 0, informers.WithNamespace("default") ,labelOptions)informer := factory.Core().V1().Pods().Informer()stopper := make(chan struct{})defer close(stopper)informer.AddEventHandler(cache.ResourceEventHandlerFuncs{    AddFunc: func(obj interface{}) {        fmt.Println("pod add")        name := obj.(*corev1.Pod).Name        labels := obj.(*corev1.Pod).Labels        fmt.Printf("pod Name: %s\nLabels - %v\n\n", name, labels)    },})informer.Run(stopper)

达令说

如果您想继续使用k8s.io/apimachinery/pkg/labels和选择包,您需要在调用时重新分配选择器,selector.Add 因为它返回一个副本。所以,更换selector := labels.NewSelector()selector.Add(*req)fmt.Println(selector.String()) // empty string和selector := labels.NewSelector()selector = selector.Add(*req)fmt.Println(selector.String()) // app=nats-box
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go