Watching Kubernetes Service Events with Go Client
Problem:
How to monitor and receive notifications when a service is created, deleted, or updated in Kubernetes using the client-go library?
Solution:
Informer and ListWatch
To watch service events, we can use watchlist and informer from the client-go library. A watchlist allows us to create a watcher to monitor specified resources, while an informer provides a higher-level interface that handles the watch process.
Here's how to watch service events using client-go:
package main import ( "fmt" "flag" "time" k8sclient "k8s.io/client-go/kubernetes" corev1 "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" ) func main() { var kubeconfig = flag.String("kubeconfig", "./config", "path to the kubeconfig file") flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } clientset, err := k8sclient.NewForConfig(config) if err != nil { panic(err.Error()) } watchlist := cache.NewListWatchFromClient(clientset.Core().RESTClient(), "services", corev1.NamespaceDefault, fields.Everything()) _, controller := cache.NewInformer( watchlist, &corev1.Service{}, time.Second * 0, cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { fmt.Printf("Service added: %v\n", obj) }, DeleteFunc: func(obj interface{}) { fmt.Printf("Service deleted: %v\n", obj) }, UpdateFunc: func(oldObj, newObj interface{}) { fmt.Printf("Service updated: %v\n", oldObj) }, }, ) stop := make(chan struct{}) go controller.Run(stop) for { time.Sleep(time.Second) } }
Explanation:
We first create a watchlist using NewListWatchFromClient, specifying the resource type (services), namespace (default), and field selector (everything). Then, we create an informer using NewInformer and provide a list of event handlers to handle the different events (add, delete, update). Within the event handlers, we print the appropriate message when a service is added, deleted, or updated. Finally, we start the watch by running the controller in a goroutine. This code will continuously monitor service events and print the details of any changes.
The above is the detailed content of How to Monitor Kubernetes Service Events Using the Go Client?. For more information, please follow other related articles on the PHP Chinese website!