Kubernetes无法直接获取一个已经被完全删除的Pod实例的日志。
当Pod被删除(不是退出重启,而是真正删除)后,Kubernetes默认也会删除该Pod实例的日志。
一般情况下,有下面几种方法可以获取已经删除Pod的日志:
如果启用了控制器(如Deployment)日志保留策略,设置了较长时间(比如30d),可能保留了删除Pod前几天的日志。可以通过
kubectl logs -p查看。如果集群安装了日志收集系统(如Elasticsearch、Fluentd等),那么删除Pod前几天的日志可能还保留在日志收集系统中。
如果使用了Pv(Persistent Volume)挂载日志目录,日志可能还保留在PV对应的存储中。
手动在Pod删除前通过
kubectl logs podname导出日志到本地或其他持久化存储。查看其他监控系统(Prometheus等)是否记录了Pod生命周期相关指标,可以追溯到删除Pod。
使用Kubernetes API直接查询删除的Pod对象,查看对象最后一次变更时间和事件,看是否提供什么线索。
所以总的来说,直接通过Kubernetes本身很难获取已经被完全删除的Pod日志。需要依赖外部日志或者监控系统追踪和存储Pod过程中的日志事件。最佳做法是将日志实时转发到外部持久化系统。
如果启用了控制器(如Deployment)日志保留策略,设置了较长时间(比如30d),可能保留了删除Pod前几天的日志。可以通过kubectl logs -p查看。 这个如何操作?
对,如果启用了控制器(如Deployment)的日志保留策略,设置了较长时间(比如30天),是有可能保留删除Pod前几天日志的。
通过kubectl logs -p查看的操作步骤是:
- 编辑Deployment对象,设置日志保留时间策略:
1 | apiVersion: apps/v1 |
- 删除目标Pod:
1 | kubectl delete pod <pod name> |
- 通过kubectl logs -p查看删除前Pod的日志:
1 | kubectl logs <deleted pod name> -p |
这里关键的是需要先设置好Deployment等控制器的日志保留时间策略,比如上例设置为30天,那么在30天内即使Pod已经删除,也能通过-p参数查看历史Pod日志。
原文链接: https://dashen.tech/2017/02/07/K8s查看上一个被销毁的pod的日志/
版权声明: 转载请注明出处.