How to watch events on a kubernetes service using its go client

后端 未结 3 1848
南旧
南旧 2020-12-29 12:50

I would like to be informed when ever a service is changed on kubernetes using client-go.

3条回答
  •  没有蜡笔的小新
    2020-12-29 12:59

    This is a simple one using SharedInformerFactory.

    package main
    
    import (
        "fmt"
        "time"
    
        "github.com/golang/glog"
    
        kubeinformers "k8s.io/client-go/informers"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/cache"
        "k8s.io/client-go/tools/clientcmd"
    )
    
    func main() {
        config, err := clientcmd.BuildConfigFromFlags("", "")
        if err != nil {
            glog.Errorln(err)
        }
        clientset, err := kubernetes.NewForConfig(config)
        if err != nil {
            glog.Errorln(err)
        }
    
        kubeInformerFactory := kubeinformers.NewSharedInformerFactory(clientset, time.Second*30)
        svcInformer := kubeInformerFactory.Core().V1().Services().Informer()
    
        svcInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
            AddFunc: func(obj interface{}) {
                fmt.Printf("service added: %s \n", obj)
            },
            DeleteFunc: func(obj interface{}) {
                fmt.Printf("service deleted: %s \n", obj)
            },
            UpdateFunc: func(oldObj, newObj interface{}) {
                fmt.Printf("service changed: %s \n", newObj)
            },
        },)
    
        stop := make(chan struct{})
        defer close(stop)
        kubeInformerFactory.Start(stop)
        for {
            time.Sleep(time.Second)
        }
    }
    

提交回复
热议问题