


Watching CustomResourceDefinitions (CRD) with client-go
CustomResourceDefinitions (CRDs) allow users to extend Kubernetes with their own API resources. Watching for changes to these resources is essential for controllers and applications. However, the standard client-go library does not recognize CRDs by default.
Generating Custom Clients
To watch for CRDs with client-go, generate custom clients that recognize your specific CRD. This involves using code generation tools provided by Kubernetes to create structs and clients for your CRD's API.
Using kubebuilder
The recommended approach for generating client configs and controllers is to use kubebuilder. This tool automates the code generation process, simplifying the creation of custom clients.
Example Controller
Here is a simplified code snippet from a sample controller that watches for changes to a 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) <p>In this example:</p> <ul> <li>The watchCRD function creates a Kubernetes clientset and informs it about CRDs.</li> <li>It adds event handlers to the informer to receive add, update, and delete events for CRDs.</li> <li>The controller watches indefinitely for changes using a wait.NeverStop channel.</li> </ul></code>
The above is the detailed content of How to Watch CustomResourceDefinitions (CRDs) in Kubernetes with Client-go?. For more information, please follow other related articles on the PHP Chinese website!

GoroutinesarefunctionsormethodsthatrunconcurrentlyinGo,enablingefficientandlightweightconcurrency.1)TheyaremanagedbyGo'sruntimeusingmultiplexing,allowingthousandstorunonfewerOSthreads.2)Goroutinesimproveperformancethrougheasytaskparallelizationandeff

ThepurposeoftheinitfunctioninGoistoinitializevariables,setupconfigurations,orperformnecessarysetupbeforethemainfunctionexecutes.Useinitby:1)Placingitinyourcodetorunautomaticallybeforemain,2)Keepingitshortandfocusedonsimpletasks,3)Consideringusingexpl

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

Use the recover() function in Go to recover from panic. The specific methods are: 1) Use recover() to capture panic in the defer function to avoid program crashes; 2) Record detailed error information for debugging; 3) Decide whether to resume program execution based on the specific situation; 4) Use with caution to avoid affecting performance.

The article discusses using Go's "strings" package for string manipulation, detailing common functions and best practices to enhance efficiency and handle Unicode effectively.

The article details using Go's "crypto" package for cryptographic operations, discussing key generation, management, and best practices for secure implementation.Character count: 159

The article details the use of Go's "time" package for handling dates, times, and time zones, including getting current time, creating specific times, parsing strings, and measuring elapsed time.

Article discusses using Go's "reflect" package for variable inspection and modification, highlighting methods and performance considerations.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 Mac version
God-level code editing software (SublimeText3)

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SublimeText3 Linux new version
SublimeText3 Linux latest version

Zend Studio 13.0.1
Powerful PHP integrated development environment
