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.
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 } ....
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>
<code> event.Object is nil? Skipping this event. Type= {Type: Object:} gvr: (group=operator.cluster.x-k8s.io version=v1alpha2 resource=coreproviders) </code>
Was könnte der Grund dafür sein?
Ich habe dieses Problem gefunden.
Ich muss das Ergebnis überprüfen, wenn ich vom Kanal lese:
case event := <-watch.ResultChan(): handleEvent(gvr, event)
zu
case event, ok := <-watch.ResultChan(): if !ok { fmt.Printf("ResultChan is closed %+v\n", gvr) return nil } handleEvent(gvr, event)
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!