设计文档:
https://github.com/kubernetes/design-proposals-archive/blob/main/node/kubelet-cri-logging.md
https://kubernetes.io/docs/concepts/cluster-administration/logging/
当kubenet存放container的日志满了的时候,会发生rotate,当rotate发生的时候,是由kubectl logs 这个命令可能会出现以下两个问题:
https://github.com/kubernetes/kubernetes/issues/28369
这里说,当rotate发生的时候,kubectl logs 可能会停在那里,读不出新文件里的内容。
/usr/sbin/logrotate --force /etc/logrotate.conf
可以使用这个方法将日志强制rotate,然后再开始抓日志,可以作为一个绕过问题的短暂方法。
还有一种可能是虽然不会停在那里,可能也会丢一些日志。这个怎么能debug是丢在哪里了呢?而且这个从应用程序到kubectl-logs这一路下来,经过了四五个process,看着非常的复杂,只能通过strace进行系统调用的分析,看到底丢在哪一个环节。根据上面哪个issue,去看,会发现kubenet有好多关于丢日志的情况发生,后续虽然有加强,但是仍然有丢日志的可能。
https://github.com/pacoxu/kubernetes/issues/443
从这里的rotate的方法来看