Dockerstdout
从每个容器捕获日志并将它们存储在/var/lib/docker/containers
主机上。如果 Kubernetes 使用 Docker 作为容器运行时,Docker 还会将容器日志存储在 Kubernetes 节点上的该位置。但是由于我们不直接在 Kubernetes 中运行容器(我们运行 Pods),因此 Kubernetes 也创建了/var/log/pods/
和/var/log/containers
目录,以帮助我们更好地组织基于 Pods 的日志文件。
内的每个目录都/var/log/pods/
存储单个 Pod 的日志,每个目录都使用结构命名<namespace>_<pod_name>_<pod_id>
。
您可以通过运行来获取 Pod 的 ID
kubectl get pod -n core gloo-76dffbd956-rmvdz -o jsonpath='{.metadata.uid}'
。如果您习惯使用yq
,您可能会发现运行起来kubectl get pod <pod_name> -o yaml | yq r - metadata.uid
更加直接。
每个/var/log/pods/<namespace>_<pod_name>_<pod_id>/
目录中都有更多目录,每个目录代表 Pod 中的一个容器。这些目录的名称等于容器的名称。最后,当我们查看一个/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/
目录时,我们会发现 Docker 中存储的日志文件的符号链接/var/lib/docker/containers
。同样,/var/log/containers/
目录内部是指向目录的符号链接/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/
。这些符号链接使用结构命名<pod_name>_<namespace>_<container_id>
。