Maison >développement back-end >Golang >Comment surveiller les événements du service Kubernetes à l'aide du client Go ?

Comment surveiller les événements du service Kubernetes à l'aide du client Go ?

DDD
DDDoriginal
2024-12-08 08:04:13573parcourir

How to Monitor Kubernetes Service Events Using the Go Client?

Regarder les événements du service Kubernetes avec le client Go

Problème :

Comment surveiller et recevoir notifications lorsqu'un service est créé, supprimé ou mis à jour dans Kubernetes à l'aide du client-go bibliothèque ?

Solution :

Informateur et ListWatch

Pour regarder les événements de service, nous pouvons utiliser la liste de surveillance et l'informateur de la bibliothèque client. Une liste de surveillance nous permet de créer un observateur pour surveiller des ressources spécifiées, tandis qu'un informateur fournit une interface de niveau supérieur qui gère le processus de surveillance.

Voici comment surveiller les événements de service à l'aide de 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)
    }
}

Explication :

Nous créons d'abord une liste de surveillance en utilisant NewListWatchFromClient, spécifiant le type de ressource (services), l'espace de noms (par défaut) et le sélecteur de champ (tout). Ensuite, nous créons un informateur à l'aide de NewInformer et fournissons une liste de gestionnaires d'événements pour gérer les différents événements (ajout, suppression, mise à jour). Dans les gestionnaires d'événements, nous imprimons le message approprié lorsqu'un service est ajouté, supprimé ou mis à jour. Enfin, on démarre la montre en exécutant le contrôleur dans une goroutine. Ce code surveillera en permanence les événements de service et imprimera les détails de toute modification.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn