我想觀看某個應用程式的 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 的輸出,命名空間被過濾了,但標簽沒有被過濾。無法弄清楚我在哪里犯了錯誤。
uj5u.com熱心網友回復:
您可以直接在 中提供標簽字串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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347547.html
標籤:走 Kubernetes 客户走
