>백엔드 개발 >Golang >Client-go를 사용하여 Kubernetes에서 CRD(CustomResourceDefinitions)를 보는 방법은 무엇입니까?

Client-go를 사용하여 Kubernetes에서 CRD(CustomResourceDefinitions)를 보는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 18:27:02674검색

How to Watch CustomResourceDefinitions (CRDs) in Kubernetes with Client-go?

client-go로 CRD(CustomResourceDefinitions) 보기

CRD(CustomResourceDefinitions)를 사용하면 사용자가 자신의 API 리소스로 Kubernetes를 확장할 수 있습니다. 이러한 리소스의 변경 사항을 감시하는 것은 컨트롤러와 애플리케이션에 필수적입니다. 그러나 표준 client-go 라이브러리는 기본적으로 CRD를 인식하지 않습니다.

사용자 정의 클라이언트 생성

client-go로 CRD를 감시하려면 특정 CRD를 인식하는 사용자 정의 클라이언트를 생성하세요. 여기에는 Kubernetes에서 제공하는 코드 생성 도구를 사용하여 CRD API용 구조체와 클라이언트를 생성하는 작업이 포함됩니다.

kubebuilder 사용

클라이언트 구성 및 컨트롤러를 생성하는 데 권장되는 접근 방식은 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>

이 예에서:

  • watchCRD 함수는 Kubernetes 클라이언트 세트를 생성하고 여기에 CRD에 대해 알립니다.
  • 추가, 업데이트를 수신하기 위해 알림자에 이벤트 핸들러를 추가합니다. , CRD에 대한 이벤트를 삭제합니다.
  • 컨트롤러는 wait.NeverStop 채널을 사용하여 변경 사항을 무기한 감시합니다.

위 내용은 Client-go를 사용하여 Kubernetes에서 CRD(CustomResourceDefinitions)를 보는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.