Heim > Artikel > Backend-Entwicklung > Wie kann ich CustomResourceDefinitions (CRDs) in Kubernetes mit Client-go ansehen?
CustomResourceDefinitions (CRDs) ermöglichen es Benutzern, Kubernetes mit ihren eigenen API-Ressourcen zu erweitern. Für Controller und Anwendungen ist es wichtig, auf Änderungen an diesen Ressourcen zu achten. Allerdings erkennt die Standard-Client-Go-Bibliothek CRDs standardmäßig nicht.
Um mit Client-Go nach CRDs zu suchen, generieren Sie benutzerdefinierte Clients, die Ihr spezifisches CRD erkennen. Dazu gehört die Verwendung von Codegenerierungstools, die von Kubernetes bereitgestellt werden, um Strukturen und Clients für die API Ihres CRD zu erstellen.
Der empfohlene Ansatz zum Generieren von Clientkonfigurationen und Controllern ist die Verwendung von kubebuilder. Dieses Tool automatisiert den Codegenerierungsprozess und vereinfacht die Erstellung benutzerdefinierter Clients.
Hier ist ein vereinfachter Codeausschnitt eines Beispiel-Controllers, der auf Änderungen an einem CRD überwacht:
<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>
In diesem Beispiel:
Das obige ist der detaillierte Inhalt vonWie kann ich CustomResourceDefinitions (CRDs) in Kubernetes mit Client-go ansehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!