CRD(CustomResourceDefinitions)를 사용하면 사용자가 자신의 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에서 CRD(CustomResourceDefinitions)를 보는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!