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

Patricia Arquette
Lepaskan: 2024-11-01 18:27:02
asal
576 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!