Go クライアントで Kubernetes Service イベントを監視する
問題:
監視および受信する方法client-go を使用して Kubernetes でサービスが作成、削除、または更新されたときの通知
解決策:
Informer と ListWatch
サービス イベントを監視するには、 client-go ライブラリ。ウォッチリストを使用すると、指定されたリソースを監視するウォッチャーを作成できます。一方、インフォーマーは監視プロセスを処理する上位レベルのインターフェイスを提供します。
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) } }
説明:
最初にNewListWatchFromClient を使用してウォッチリストを作成し、リソース タイプ (サービス)、名前空間 (デフォルト)、およびフィールド セレクター (すべて) を指定します。次に、NewInformer を使用してインフォーマーを作成し、さまざまなイベント (追加、削除、更新) を処理するイベント ハンドラーのリストを提供します。イベント ハンドラー内で、サービスが追加、削除、または更新されたときに適切なメッセージを出力します。最後に、ゴルーチンでコントローラーを実行して監視を開始します。このコードは、サービス イベントを継続的に監視し、変更の詳細を出力します。
以上がGo クライアントを使用して Kubernetes Service イベントを監視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。