当我试图从我的pod中检索日志时,我注意到K8s并没有打印所有的日志,我知道这一点,因为我观察到关于微服务初始化的日志不在日志的头部。
考虑到我的pod在很长的观察期内打印了很多日志,有人知道K8s是否有显示所有日志的限制吗?
我还尝试在kubectl logs
命令中设置--since
参数,以获取特定时间范围内的所有日志,但似乎没有效果。
谢谢。
容器运行时引擎通常管理容器(pod(日志。请检查正在使用的运行时引擎上的设置。
有一些答案,我将添加更多细节和来源。
答案很简短。没有限制,只有自由空间。默认情况下,kubernetes不负责日志轮换:
节点级日志记录中的一个重要考虑因素是实现日志轮换,这样日志就不会占用节点。Kubernetes不负责旋转日志,而是部署工具应该设置一个解决方案来解决这个问题。例如在由kube-up.sh脚本部署的Kubernetes集群中logrotate工具配置为每小时运行一次。您还可以设置容器运行时自动旋转应用程序的日志。
正如William所说,Kubernetes本身不提供自己的日志聚合,默认情况下它依赖于容器运行时。
当在Kubernetes上运行的容器将其日志写入stdout或stderr流,它们由运行在该节点,并被委派给容器引擎进行处理基于Kubernetes中配置的日志驱动程序。
在大多数情况下,Docker容器日志最终会出现在主机上的
/var/log/containers
目录。Docker支持多个日志记录驱动程序,但不幸的是,Kubernetes API不支持驱动程序配置。一旦容器终止或重新启动,kubelet就会将其日志保存在节点。为了防止这些文件占用主机的所有存储,应该在节点上设置日志旋转机制。
Kubernetes不提供内置的日志轮换,但许多工具都提供了该功能,例如Docker的log-opt,或者标准文件托运人,甚至是一个简单的自定义cron作业。当容器被逐出节点,其相应的日志文件也被逐出
这意味着您可以尝试在/var/log/containers
和var/log/pods
中查找完整日志。这部分来自官方文件,更准确地说:
默认情况下,如果容器重新启动,kubelet会保留一个终止的容器容器及其日志。如果pod被逐出节点,则所有相应的容器连同它们的日志也被逐出。
要使日志具有良好的可见性和可访问性,您可以考虑为日志存储提供专用解决方案。例如,节点日志代理或流式传输到sidecar
请查找带有概念和示例的文章和官方kubernetes文档:
- Kubernetes日志记录架构
- kubernetes实用指南
前面的日志记录似乎有问题。附加相同的链接。https://github.com/kubernetes/kubernetes/pull/78071