Kubernetes自动扩缩容场景已删除Pod日志留存及GKE相关问题咨询
解答
你使用的kubectl logs命令是否可行?
你给出的一次性命令kubectl logs -l app=myapp > myfile.txt 无法满足你的采集需求,原因如下:
- 该命令为单次执行逻辑,仅会采集命令执行时刻处于运行状态的Pod的存量日志,执行前已经被缩容删除的Pod日志无法获取,执行后新扩容产生的Pod的日志也不会自动追加到输出文件中
- 若Pod包含多个容器,该命令默认仅返回每个Pod首个容器的日志,会遗漏同Pod内其他容器的日志
如果仅用于15分钟的短时实验,你可以调整为持续采集模式的命令:kubectl logs -f --prefix --all-containers -l app=myapp > myfile.txt
其中-f参数会持续监听所有匹配标签的Pod,将新产生的日志实时追加到输出文件;--prefix会给每条日志加上Pod名称、容器名称前缀,方便后续排查时区分日志来源;--all-containers会采集Pod内所有容器的日志。注意该方案可靠性有限,若kubectl与集群的连接意外中断,会丢失中断后的所有日志。
无需手动搭建集中日志的可靠实现方案
你使用的GKE环境自带开箱即用的日志采集能力,完全不需要手动搭建集中日志系统:
GKE集群默认开启Cloud Logging集成,所有Pod的标准输出、标准错误日志会自动上报到Cloud Logging,不需要你做任何额外配置。实验结束后,你可以直接在Cloud Logging控制台配置过滤规则,筛选出所有带有app=myapp标签的Pod在实验时间段的全量日志,包含已经被删除的Pod的日志,还支持一键导出为本地文件供后续分析。
GKE是否会保留已删除Pod的日志?
会。只要你没有主动关闭集群的Cloud Logging功能,已删除Pod的所有上报日志会按照Cloud Logging的默认保留周期存储30天,到期后才会自动清理,你可以在保留期内随时查询、导出已删除Pod的日志。
内容的提问来源于stack exchange,提问作者Mazen Ezzeddine
相关产品推荐
相关产品推荐

