CustomResourceDefinitions (CRD) を使用すると、ユーザーは独自の API リソースを使用して Kubernetes を拡張できます。これらのリソースへの変更を監視することは、コントローラーとアプリケーションにとって不可欠です。ただし、標準の client-go ライブラリはデフォルトでは CRD を認識しません。
client-go で CRD を監視するには、特定の CRD を認識するカスタム クライアントを生成します。これには、Kubernetes が提供するコード生成ツールを使用して CRD の API の構造体とクライアントを作成することが含まれます。
クライアント構成とコントローラーを生成するための推奨アプローチは、kubebuilder を使用することです。このツールはコード生成プロセスを自動化し、カスタム クライアントの作成を簡素化します。
CRD への変更を監視するサンプル コントローラーの簡略化されたコード スニペットを次に示します。
<code class="go">import ( "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/remotecommand" ) // watchCRD watches for new/changed CustomResourceDefinitions (CRDs). func watchCRD() error { // Create a new Kubernetes clientset. clientset, err := kubernetes.NewForConfig(restConfig) if err != nil { return errors.WithStack(err) } // Create an informer for list of CRDs. sharedInformerFactory := informers.NewSharedInformerFactory(clientset, 0) crdInformer := sharedInformerFactory.ApiextensionsV1().CustomResourceDefinitions().Informer() // Initialize the informer and wait for it to sync with API server. stopCh := make(chan struct{}) crdInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { crd := obj.(*apiextensionsv1.CustomResourceDefinition) // Handle newly added CRD. fmt.Println("New CRD added:", crd.Name) }, UpdateFunc: func(oldObj, newObj interface{}) { crd := newObj.(*apiextensionsv1.CustomResourceDefinition) // Handle updated CRD. fmt.Println("CRD updated:", crd.Name) }, DeleteFunc: func(obj interface{}) { crd := obj.(*apiextensionsv1.CustomResourceDefinition) // Handle deleted CRD. fmt.Println("CRD deleted:", crd.Name) }, }) sharedInformerFactory.Start(stopCh) <-wait.NeverStop return nil }</code>
この例では:
以上がClient-go を使用して Kubernetes の CustomResourceDefinitions (CRD) を監視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。