Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menonton CustomResourceDefinitions (CRD) dalam Kubernetes dengan Client-go?

Bagaimana untuk Menonton CustomResourceDefinitions (CRD) dalam Kubernetes dengan Client-go?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 18:27:02575semak imbas

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

Menonton CustomResourceDefinitions (CRD) 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.

Menjana Pelanggan Tersuai

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.

Menggunakan kubebuilder

Pendekatan yang disyorkan untuk menjana konfigurasi dan pengawal pelanggan ialah menggunakan kubebuilder. Alat ini mengautomasikan proses penjanaan kod, memudahkan penciptaan pelanggan tersuai.

Contoh Pengawal

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:

  • Fungsi watchCRD mencipta set pelanggan Kubernetes dan memaklumkannya tentang CRD.
  • Ia menambahkan pengendali acara kepada pemberi maklumat untuk menerima penambahan, kemas kini , dan padamkan acara untuk CRD.
  • Pengawal menonton selama-lamanya untuk perubahan menggunakan saluran tunggu.NeverStop.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn