首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么条件导致Pod日志读取器返回EOF

什么条件导致Pod日志读取器返回EOF
EN

Stack Overflow用户
提问于 2021-08-01 06:50:59
回答 1查看 606关注 0票数 3

我正在使用客户-去连续地从库伯内特斯荚拉原木流。大多数情况下,所有的事情都按预期的方式工作,直到工作运行几个小时。

守则如下:

代码语言:javascript
复制
podLogOpts := corev1.PodLogOptions{ Follow: true, }
kubeJob, err := l.k8sclient.GetKubeJob(l.job.GetNamespace(), l.job.GetJobId())

...
podName := l.k8sclient.GetKubeJobPodNameByJobId(l.job.GetNamespace(), l.job.GetJobId())
req := l.k8sclient.GetKubeClient().CoreV1().Pods(l.job.GetNamespace()).GetLogs(podName, &podLogOpts)
podLogStream, err := req.Stream(context.TODO())

...
for {
    copied, err := podLogStream.Read(buf)
    if err == io.EOF {
       // here is place where error happens
       // usually after many hours, the podLogStream return EOF.
       // I checked the pod status it is still running and keeps printing data to pod stdout. why would this happend???
       break
    }

    ...
}

大约3-4小时后,podLogStream返回EOF。但我检查了吊舱状态,发现吊舱仍在运行,内部的服务一直在将数据打印到标准输出。为什么会发生这种事?怎么修呢?

更新我发现,每隔4小时,荚流api --读--就会返回EOF,所以我必须让goroutine睡一觉,然后再试一次,方法是重新创建pogLogStream并从新的流对象中读取日志。它起作用了。但为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 21:01:07

当您联系日志端点时,发生的情况是apiserver将您的请求转发到kubelet,而kubelet是您的荚的宿主。然后,Kubelet服务器启动日志文件到山顶去的流内容,然后再发送到您的客户端。因为它是来自文件和不是直接从标准站出来的流日志,所以可能会发生日志文件被旋转的容器日志管理器,因此您收到EOF并需要重新初始化流。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68608106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档