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

后端 未结 3 1839
南旧
南旧 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 13:05

    this can be done like this:

    package main
    
    import (
        "fmt"
        "flag"
        "time"
    
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/pkg/api/v1"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/client-go/tools/cache"
        "k8s.io/client-go/pkg/fields"
    )
    
    var (
        kubeconfig = flag.String("kubeconfig", "./config", "absolute path to the kubeconfig file")
    )
    
    func main() {
        flag.Parse()
        config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
        if err != nil {
            panic(err.Error())
        }
        clientset, err := kubernetes.NewForConfig(config)
        if err != nil {
            panic(err.Error())
        }
    
        watchlist := cache.NewListWatchFromClient(clientset.Core().RESTClient(), "services", v1.NamespaceDefault,
            fields.Everything())
        _, controller := cache.NewInformer(
            watchlist,
            &v1.Service{},
            time.Second * 0,
            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 \n")
                },
            },
        )
        stop := make(chan struct{})
        go controller.Run(stop)
        for{
            time.Sleep(time.Second)
        }
    }
    

提交回复
热议问题