Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menonton CustomResourceDefinitions (CRD) dalam Kubernetes dengan Client-go?
CustomResourceDefinitions (CRDs) membenarkan pengguna memanjangkan Kubernetes dengan sumber API mereka sendiri. Memerhatikan perubahan kepada sumber ini adalah penting untuk pengawal dan aplikasi. Walau bagaimanapun, pustaka client-go standard tidak mengenali CRD secara lalai.
Untuk melihat CRD dengan client-go, jana pelanggan tersuai yang mengenali CRD khusus anda. Ini melibatkan penggunaan alat penjanaan kod yang disediakan oleh Kubernetes untuk mencipta struct dan klien untuk API CRD anda.
Pendekatan yang disyorkan untuk menjana konfigurasi dan pengawal pelanggan ialah menggunakan kubebuilder. Alat ini mengautomasikan proses penjanaan kod, memudahkan penciptaan pelanggan tersuai.
Berikut ialah coretan kod yang dipermudahkan daripada pengawal sampel yang memantau perubahan pada 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>
Dalam contoh ini:
Atas ialah kandungan terperinci Bagaimana untuk Menonton CustomResourceDefinitions (CRD) dalam Kubernetes dengan Client-go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!