package main import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" ) type Watcher struct { } func (watcher *Watcher) WatchPods( clientset *kubernetes.Clientset, namespace string) { watchlist := cache.NewListWatchFromClient( clientset.CoreV1().RESTClient(), "pods", namespace, fields.Everything(), ) addOrUpdate := func(obj interface{}) { pod := watcher.getPod(obj) klog.Infof("Added/updated %s/%s\n", pod.Namespace, pod.Name) } options := cache.InformerOptions{ ListerWatcher: watchlist, ObjectType: &corev1.Pod{}, Handler: cache.ResourceEventHandlerFuncs{ AddFunc: addOrUpdate, UpdateFunc: func(_ any, obj any) { addOrUpdate(obj) }, DeleteFunc: func(obj any) { pod := watcher.getPod(obj) klog.Infof("Delete %s/%s\n", pod.Namespace, pod.Name) }, }, ResyncPeriod: 0, } _, controller := cache.NewInformerWithOptions(options) stop := make(chan struct{}) defer close(stop) go controller.Run(stop) select {} } func (watcher *Watcher) getPod(obj any) *corev1.Pod { k8spod, ok := obj.(*corev1.Pod) if !ok { klog.Fatalf("Object of wrong type: %v", obj) } return k8spod }