Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memantau Acara Perkhidmatan Kubernetes Menggunakan Klien Go?

Bagaimana untuk Memantau Acara Perkhidmatan Kubernetes Menggunakan Klien Go?

DDD
DDDasal
2024-12-08 08:04:13555semak imbas

How to Monitor Kubernetes Service Events Using the Go Client?

Menonton Acara Perkhidmatan Kubernetes dengan Go Client

Masalah:

Cara memantau dan menerima pemberitahuan apabila perkhidmatan dibuat, dipadamkan atau dikemas kini dalam Kubernetes menggunakan klien-go perpustakaan?

Penyelesaian:

Informer dan ListWatch

Untuk menonton acara perkhidmatan, kami boleh menggunakan senarai pantau dan pemberi maklumat daripada perpustakaan pelanggan-pergi. Senarai pantauan membolehkan kami membuat pemerhati untuk memantau sumber tertentu, manakala pemberi maklumat menyediakan antara muka peringkat lebih tinggi yang mengendalikan proses menonton.

Begini cara menonton acara perkhidmatan menggunakan client-go:

package main

import (
    "fmt"
    "flag"
    "time"

    k8sclient "k8s.io/client-go/kubernetes"
    corev1 "k8s.io/client-go/pkg/api/v1"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/tools/cache"
    "k8s.io/client-go/pkg/fields"
)

func main() {
    var kubeconfig = flag.String("kubeconfig", "./config", "path to the kubeconfig file")
    flag.Parse()

    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    if err != nil {
        panic(err.Error())
    }

    clientset, err := k8sclient.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }

    watchlist := cache.NewListWatchFromClient(clientset.Core().RESTClient(), "services", corev1.NamespaceDefault, fields.Everything())

    _, controller := cache.NewInformer(
        watchlist,
        &corev1.Service{},
        time.Second * 0,
        cache.ResourceEventHandlerFuncs{
            AddFunc: func(obj interface{}) {
                fmt.Printf("Service added: %v\n", obj)
            },
            DeleteFunc: func(obj interface{}) {
                fmt.Printf("Service deleted: %v\n", obj)
            },
            UpdateFunc: func(oldObj, newObj interface{}) {
                fmt.Printf("Service updated: %v\n", oldObj)
            },
        },
    )

    stop := make(chan struct{})
    go controller.Run(stop)
    for {
        time.Sleep(time.Second)
    }
}

Penjelasan:

Kami mula-mula membuat senarai pantau menggunakan NewListWatchFromClient, menyatakan jenis sumber (perkhidmatan), ruang nama (lalai), dan pemilih medan (semuanya). Kemudian, kami mencipta pemberi maklumat menggunakan NewInformer dan menyediakan senarai pengendali acara untuk mengendalikan acara yang berbeza (tambah, padam, kemas kini). Dalam pengendali acara, kami mencetak mesej yang sesuai apabila perkhidmatan ditambah, dipadamkan atau dikemas kini. Akhirnya, kami memulakan jam tangan dengan menjalankan pengawal dalam goroutine. Kod ini akan terus memantau acara perkhidmatan dan mencetak butiran sebarang perubahan.

Atas ialah kandungan terperinci Bagaimana untuk Memantau Acara Perkhidmatan Kubernetes Menggunakan Klien 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