Невозможно декодировать событие из потока наблюдения: ошибка потока: идентификатор потока 3;ВНУТРЕННЯЯ ОШИБКА - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу прослушать события добавления, которые являются развертываниями в моем кластере, я использую клиент-go Watch Api, сначала он работает хорошо, но через короткий промежуток времени сообщит об ошибке.

Я пробовал два API-способа прослушивания

в одну сторону:

func startWatchDeployment(clientSet *kubernetes.Clientset){
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println(err)
        }
    }()

    Log.Info("正在监听deployment...")
    count := 0
    deploymentsClient := clientSet.AppsV1beta1().Deployments(metav1.NamespaceAll)
    list,_ := deploymentsClient.List(metav1.ListOptions{})
    items := list.Items
    w, _ := deploymentsClient.Watch(metav1.ListOptions{})
    for {
        select {
            case e, _ := <-w.ResultChan():
                Log.Infof("162: %s",e)
                if e.Type == watch.Added || e.Type == watch.Deleted{
                    if count != len(items){
                        count += 1
                    }else{
                        // go的reflect获取运行时的struct
                        nname := e.Object.(*v1beta1.Deployment).Namespace
                        if r, _ := regexp.Compile("^(p|u|user)-");nname != "default" && nname != "cattle-system" &&
                            nname != "kube-system" && nname != "dsky-system" &&
                            nname != "kube-public" && nname != "local" && nname != "tools" && !r.MatchString(nname) {
                            data := make(map[string]interface{},1)
                            data["type"] = e.Type
                            data["name"] = e.Object.(*v1beta1.Deployment).Name
                            data["namespace"] = e.Object.(*v1beta1.Deployment).Namespace
                            watchChannel <- data
                        }
                    }
                }
        }
    }
}

в другую сторону:

func startWatchDp(clientSet *kubernetes.Clientset){
    watchlist := cache.NewListWatchFromClient(
        clientSet.AppsV1().RESTClient(),
        "deployments",
        metav1.NamespaceAll,
        fields.Everything())

    _, controller := cache.NewInformer(
        watchlist,
        &v13.Deployment{},
        time.Millisecond*100,
        cache.ResourceEventHandlerFuncs{
            AddFunc: func(obj interface{}) {
                watchChannel <- 1
                //fmt.Println(obj)
            },
            DeleteFunc: func(obj interface{}) {
                watchChannel <- 1
            },
        },
    )

    stop := make(chan struct{})
    go controller.Run(stop)

    for {
        time.Sleep(10 * time.Second)
    }
}

Вот мой результат:

E0219 15:20:02.274210   19272 streamwatcher.go:109] Unable to decode an event from the watch stream: stream error: stream ID 3; INTERNAL_ERROR
time="2019-02-19T15:20:02+08:00" level=info msg="162: { <nil>}"
time="2019-02-19T15:20:02+08:00" level=info msg="162: { <nil>}"
time="2019-02-19T15:20:02+08:00" level=info msg="162: { <nil>}"
time="2019-02-19T15:20:02+08:00" level=info msg="162: { <nil>}"
time="2019-02-19T15:20:02+08:00" level=info msg="162: { <nil>}"

Как я могу это исправить? Пожалуйста, помогите! Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...