使用Go 用戶端觀看Kubernetes 服務事件
問題:
如何接收和接收使用client-go 在Kubernetes 中建立、刪除或更新服務時發出通知庫?
解決方案:
Informer 和 ListWatch
要觀看客戶服務事件,我們可以使用來自客戶端庫。監視清單允許我們建立一個監視程式來監視指定的資源,而通知程式則提供了處理監視過程的更高層級的介面。
以下是如何使用 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) } }
說明:
說明:我們先使用 NewListWatchFrom建立監視列表,指定資源類型(服務)、命名空間(預設)和欄位選擇器(所有內容)。然後,我們使用 NewInformer 建立一個通知程序,並提供一個事件處理程序清單來處理不同的事件(新增、刪除、更新)。在事件處理程序中,當新增、刪除或更新服務時,我們會列印相應的訊息。最後,我們透過在 goroutine 中運行控制器來啟動手錶。此程式碼將持續監控服務事件並列印任何變更的詳細資訊。以上是如何使用Go客戶端監控Kubernetes服務事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!