Pod 日志的 K8s 限制

时间:2021-05-31 09:31:52

标签: kubernetes logging kubectl kubernetes-pod

当我尝试从我的 pod 中检索日志时,我注意到 K8s 并没有打印所有日志,我知道这一点是因为我观察到有关微服务初始化的日志没有出现在日志的头部。

考虑到我的pods在很长的观察期内打印了很多日志,有没有人知道K8s对显示所有日志有限制吗?

我也尝试在--since命令中设置kubectl logs参数来获取特定时间范围内的所有日志,但似乎没有效果。

谢谢。

3 个答案:

答案 0 :(得分:2)

容器运行时引擎通常管理容器(pod)日志。请检查正在使用的运行时引擎的设置。

答案 1 :(得分:0)

之前的日志记录似乎存在问题。附上相同的链接。 https://github.com/kubernetes/kubernetes/pull/78071

答案 2 :(得分:0)

有一些答案,我会添加更多细节和来源。

答案很简短。没有限制,只有自由空间。默认情况下,kubernetes 不负责日志轮换:

<块引用>

节点级日志的一个重要考虑是实现日志 轮换,以便日志不会消耗所有可用的存储空间 节点。 Kubernetes 不负责轮转日志,而是负责轮转日志 部署工具应该设置一个解决方案来解决这个问题。例如, 在 Kubernetes 集群中,通过 kube-up.sh 脚本部署,有一个 logrotate 工具配置为每小时运行一次。您还可以设置一个 容器运行时自动轮换应用程序的日志。

正如 William 所说,Kubernetes 本身不提供自己的日志聚合,并且默认依赖于容器运行时。

<块引用>

当在 Kubernetes 上运行的容器将其日志写入 stdout 或 stderr 流,它们由运行的 kubelet 服务获取 该节点,并委托给容器引擎进行处理 基于 Kubernetes 中配置的日志驱动程序。

在大多数情况下,Docker 容器日志最终会出现在 /var/log/containers 目录在您的主机上。 Docker 支持多个 日志驱动程序,但不幸的是,Kubernetes API 不支持 驱动程序配置。

一旦容器终止或重新启动,kubelet 会将其日志保存在 节点。为防止这些文件占用主机的所有存储空间, 节点上需要设置日志轮转机制。

Kubernetes 不提供内置的日志轮换,但是这个 许多工具都提供了该功能,例如 Docker 的 log-opt,或 标准文件托运人,甚至是简单的自定义 cron 作业。当一个 容器被逐出节点,其对应的日志文件也被逐出

这意味着您可以尝试在 /var/log/containersvar/log/pods 中查找完整日志。这部分来自官方文档,更准确:

<块引用>

默认情况下,如果容器重新启动,kubelet 会保持一个终止状态 带有日志的容器。如果一个 Pod 从节点中被驱逐,所有的 相应的容器及其日志也会被逐出。

要获得良好的日志可见性和可访问性,您可以考虑使用专门的日志存储解决方案。例如。 node logging agentstreaming to a sidecar

请查找包含概念和示例的文章和官方 kubernetes 文档: