本文将提供在进行 构建深度学习容器镜像 和 在 TKE Serverless 上运行深度学习 实践时可能遇到的常见问题解答。
因为 TKE Serverless 即用即消的特性,导致如果想要查看日志,必须当且仅当 Pod 还在 Running 状态时查看。一旦 Pod 状态变为 Completed ,将会出现如下报错:
Error from server (InternalError): Internal error occurred: can not found connection to pod ***
以下为您介绍能将日志持久存储的方法:
重定向方法最为简单,只需将 kubectl logs
输出到终端的 stdout 转向输出到文件中即可持久化存储。执行命令如下:
kubectl logs -f tf-cnn >> info.log
但使用重定向方法时需要注意,输出流不会流向终端,也就是说在终端上将无法看到日志滚到哪一步。如果在将命令输出保存到文件中的同时,还需要将内容也输出到屏幕,有如下两种方法:
tee
命令,执行命令如下:kubectl logs -f tf-cnn |tee info.log
logsave
命令,也可以做到将命令输出保存到文件的同时将内容页输出到屏幕中,执行命令如下:logsave [-asv] info.log kubectl logs -f tf-cnn
说明:
logsave
相较于tee
的好处是,logsave
每次输入会记录下时间,并制造间隔,观感上也更便于查找某一段日志。
上述三条命令同时存在弊端,因为都是基于 kubectl logs
输出的重定向,使用时必须在 Running 状态时运行,起到的作用只是在 Completed 后依然能查看日志。重定向方法可适用于少量的日志,不存在大量的日志输出和检索需求的场景下。如果您的需求不高,那么推荐您使用重定向方法。
在 TKE Serverless 集群中,可以通过环境变量和自定义资源(CRD)两种方式配置日志采集。
使用此方法将会出现一个问题,TKE Serverless 开启日志采集功能的原理,是将采集到的日志以 JSON 的形式发送到指定的消费端。而采集提供的 JSON 时间戳是秒级。
将导致在控制台上查看的日志时间的粒度也是秒级,在检索分析端上看到的日志只能按秒级时间顺序,而更小尺度不能实现顺序输出。而有时候日志会在短时间大量输出,通常需要微秒级的精度。因此我们更推荐使用 CRD 配置方式。
本页内容是否解决了您的问题?