首页/云/Kubernetes 速查/kubectl logs --previous 查看重启前日志
kubectl 基础56 条

kubectl logs --previous 查看重启前日志

容器崩溃重启后当前实例日志往往是空的,--previous 读取上一个已终止实例的日志,是 CrashLoopBackOff 排查的关键手段。

Kubernetes 速查云更新于 2026-10-13

查看重启前日志是什么

容器崩溃重启后,当前实例的日志往往是空的或只有启动失败的一行,因为真正的报错发生在已经被终止的上一个实例里。加上查看上一个实例的参数后,kubectl 会从节点上读取那个已终止容器的日志文件,把崩溃现场交给你。

什么时候读不到内容

只保留紧邻的上一个实例:如果容器已经连续重启多次,更早的实例日志已经被覆盖,可取的内容有限。另外,容器从未真正启动过(一直停在创建或调度阶段)时,根本不存在上一个实例,此时应转向查看对象事件。

基本信息

适用环境任何 Kubernetes 发行版,需要 pods 与 pods/log 权限
语法kubectl logs <pod> --previous [-c 容器] [选项]
读取对象紧邻的上一个已终止容器实例的日志
保留范围仅上一个实例,更早的被覆盖
无内容的情况容器从未启动,或实例刚被清理
常用搭配配合描述信息里的上一次终止原因一起看

典型使用场景

  • 反复重启排查:当前实例正常,但报错发生在上一次退出之前
  • 启动即退出:进程在初始化阶段就失败,错误只出现在上一次实例里
  • 内存超限核对:被终止之前的日志常能看出内存分配异常
  • 探针杀进程:确认是否因检查失败被动终止
  • 发布回滚取证:新版本崩溃后取现场,作为修复依据
  • 写复盘材料:保留上一次实例的关键日志片段作为证据

常用示例

常用示例
kubectl logs web-x --previous                       # 读上一次实例日志
kubectl logs web-x -c app --previous --tail=200      # 指定容器并只看末尾
kubectl describe pod web-x | sed -n '/Last State/,+4p'   # 上一次终止原因与退出码
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].restartCount}'   # 重启次数
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].lastState.terminated.reason}'

两个信息源的分工

信息源能回答什么局限
上一次实例日志应用退出前打印了什么只有紧邻的上一个实例
上一次终止状态退出码、原因、信号、起止时间不含应用输出
对象事件是否被探针终止、是否被驱逐有过期时间
当前实例日志现在在做什么崩溃前的输出不在其中
查看按容器维度保留,多容器对象需要指定是哪一个容器,否则会提示选择或直接报错。
在上一次终止状态里能看到原因字段,用来区分是被强制终止、正常结束还是启动失败。

易错点

  • 只看当前实例日志:崩溃原因在上一个实例里,当前实例可能一行有效信息都没有
  • 以为能看到完整历史:只保留紧邻的上一个实例,多次重启后更早的现场已经不可恢复
  • 容器从未启动过却一直尝试读上一次日志:这种情况应直接看对象事件与调度、挂载情况
  • 多容器对象不指定容器:读到的是边车容器的输出,与业务失败无关,容易误导排查方向

数据来源与参考

  • Kubernetes 官方文档 · kubectl logs
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌