Heim > Backend-Entwicklung > Golang > Kubernetes Watch gibt leere Ergebnisse zurück (leerer Typ, leeres Objekt)

Kubernetes Watch gibt leere Ergebnisse zurück (leerer Typ, leeres Objekt)

PHPz
Freigeben: 2024-02-09 12:06:08
nach vorne
724 Leute haben es durchsucht

Kubernetes Watch 返回空结果(空类型,空对象)

PHP-Editor Apple stellt Ihnen ein häufiges Problem vor: Kubernetes Watch gibt leere Ergebnisse zurück (leerer Typ, leeres Objekt). Wenn Sie Kubernetes zur Überwachung verwenden, kommt es manchmal vor, dass leere Ergebnisse zurückgegeben werden, obwohl Pods oder andere Ressourcen im Cluster ausgeführt werden. Diese Situation kann dazu führen, dass das Überwachungssystem nicht in der Lage ist, korrekte Daten zu erhalten, wodurch die Stabilität und Zuverlässigkeit des Systems beeinträchtigt wird. In diesem Artikel wird die Ursache dieses Problems im Detail analysiert und entsprechende Lösungen bereitgestellt, um den Lesern bei der schnellen Lösung dieses Problems zu helfen.

Frageninhalt

Ich verwende Kubernetes Client-Go, um einige Ressourcen zu überwachen.

func watchGVR(ctx context.Context, args *Arguments, dynClient *dynamic.DynamicClient, gvr schema.GroupVersionResource) error {
    //if gvr.Group==" events.k8s.io" && gvr.Resource==
    fmt.Printf("Watching %q %q\n", gvr.Group, gvr.Resource)
    watch, err := dynClient.Resource(gvr).Watch(context.TODO(), metav1.ListOptions{})
    if err != nil {
        fmt.Printf("..Error watching %v. group %q version %q resource %q\n", err,
            gvr.Group, gvr.Version, gvr.Resource)
        return err
    }
    defer watch.Stop()
    for {
        select {
        case event := <-watch.ResultChan():
            handleEvent(gvr, event)
        case <-ctx.Done():
            return nil
        }
    }
}

func handleEvent(gvr schema.GroupVersionResource, event watch.Event) {
    if event.Object == nil {
        fmt.Printf("event.Object is nil? Skipping this event. Type=%s %+v gvr: (group=%s version=%s resource=%s)\n", event.Type, event,
            gvr.Group, gvr.Version, gvr.Resource)
        return
    }
    gvk := event.Object.GetObjectKind().GroupVersionKind()
    obj, ok := event.Object.(*unstructured.Unstructured)
    if !ok {
        fmt.Printf("Internal Error, could not cast to Unstructered %T %+v\n", event.Object, event.Object)
        return
    }
....
Nach dem Login kopieren

Das funktioniert gut, außer bei einigen Ressourcen erhalte ich aufeinanderfolgende leere Ergebnisse: event.Object 为零,event.Type ist die leere Zeichenfolge.

Das passiert mit Ressourcen wie diesen:

<code>
event.Object is nil? Skipping this event. Type= {Type: Object:} gvr: (group=operator.cluster.x-k8s.io version=v1alpha2 resource=addonproviders)
</code>
Nach dem Login kopieren
<code>
event.Object is nil? Skipping this event. Type= {Type: Object:} gvr: (group=operator.cluster.x-k8s.io version=v1alpha2 resource=coreproviders)
</code>
Nach dem Login kopieren

Was könnte der Grund dafür sein?

Lösung

Ich habe dieses Problem gefunden.

Ich muss das Ergebnis überprüfen, wenn ich vom Kanal lese:

case event := <-watch.ResultChan():
            handleEvent(gvr, event)
Nach dem Login kopieren

zu

case event, ok := <-watch.ResultChan():
            if !ok {
                fmt.Printf("ResultChan is closed %+v\n", gvr)
                return nil
            }
            handleEvent(gvr, event)
Nach dem Login kopieren

Wenn die Ressource keine Objekte enthält, wird der Kanal geschlossen.

Das obige ist der detaillierte Inhalt vonKubernetes Watch gibt leere Ergebnisse zurück (leerer Typ, leeres Objekt). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage