Docker - json 文件驱动程序如何工作

Docker - How the json-file Driver Works

日志在路径 /var/lib/docker/containers/~/* 中创建,并在路径 /var/log/container/* 中链接。

我想知道每个POD的log是怎么出现在/var/lib/docker/containers/~/*路径中的。 另外,我想知道在使用 fluentD 收集日志的环境中使用 json-file 驱动程序是否正确。

json-file 是 Docker 提供的日志记录驱动程序(通常是默认的 Docker 守护程序设置)

对于任何容器 (CID) Docker 将在 /var/lib/docker/containers/CID/CID.log 中为 stdout 和 stderr 创建一个文件。当你 docker run something 时你可以看到这个。

此日志记录完全独立于 Kubernetes。

Kubernetes

Kubernetes 在 Pod 容器启动或停止时管理 /var/log/container/* 中的符号链接以指向底层容器运行时的日志文件。

使用 Docker 时,Kubernetes 依赖于特定的 json-file Docker 日志路径设置来创建功能符号链接。如果您在 Docker 中使用其他 custom logging 解决方案,那些 Kubernetes 符号链接将无法使用。

kubernetes logging architecture 中的推荐设置是 Docker 以 10MB 轮换日志文件。

kube-up.shs GCE config is the defacto recommended setup for container run time configuration. json-file is used and rotated at 10MB 并保留了 5 个旧文件。

CRI-O

Docker 的替代容器运行时是 cri-o。

cri-o 也以类似于 Docker 的格式记录到本地 json 文件。 kubelet 将以与 Docker 类似的方式轮换 cri-o 日志文件。

日志收集

任何 kubernetes 日志收集器都将依赖 Kubernetes 符号链接到 json 文件。应该期望这些文件将在集合下轮换。 fluentd 也支持这一点。

如果您的 fluentd 设置有问题,我建议您添加您遇到的问题的具体细节,以及您在日志文件中看到的数据示例和在日志收集端接收的数据到您的 或与您用来设置 k8s 日志收集的 fluentd 项目的问题相同的详细信息。