Kubernetes中的容器日志路径目录
容器日志文件路径
本文大概介绍kubernetes集群中POD容器日志存储位置及把运行日志记录至文件 ,主要包括标准输出日志,容器内文件日志,以及其他持久卷存储位置路径等,仅供参考
环境:
1,TKE集群
2,容器目录和kubelet目录都是默认配置
声明:以下仅个人经验总结,如果有不对的地方勿喷
标准输出
各种容器运行时都提供了对容器标准输出的处理。腾讯云TKE目前支持两种容器运行时——docker和containerd。
docker:
真实路径:/var/lib/docker/containers/$CONTAINERID
软连接:kubelet会在/var/log/pods和/var/log/containers创建软连接指向/var/lib/docker/containers/$CONTAINERID
配置文件:/etc/docker/daemon.json
参数:
“log-driver”: “json-file”,
“log-level”: “warn”,
“log-opts”: {
“max-file”: “10”,
“max-size”: “100m”
},
containerd :
日志存储路径:
真实路径:/var/log/pods/$CONTAINER_NAMES
软连接:同时kubelet也会在/var/log/containers目录下创建软链接指向 /var/log/pods/$CONTAINER_NAMES
日志配置参数:
配置文件:/etc/kubernetes/kubelet
kubelet配置参数:
–container-log-max-files=5
–container-log-max-size=“100Mi”
–logging-format=“json” \
docker运行时标准输出日志
如果Docker作为K8S容器运行时,容器日志的落盘将由docker来完成,处理的方式是logging driver,docker支持多种logging drivers,可以将日志以特定的格式输出到不同的目标,保存在/var/lib/docker/containers/
TKE docker节点使用的logging driver是json-file,会将容器的标准输出以 json 的格式写到宿主机的文件里,文件路径为:
|
批量查下集群里面容器conatiner ID:
|
containerd运行时标准输出日志
如果Containerd作为K8 容器运行时, 容器标准输出日志的落盘由 Kubelet 来完成,保存至 /var/log/pods 目录下,同时在 /var/log/containers 目录下创建软链接,指向日志文件
文件路径为:
|

批量查询集群POD的uid
|
kubelet处理运行时日志
无论使用那种容器运行时,kubelet都会在目录“/var/log/containers”和“/var/log/pods”下创建指向容器标准输出日志文件(目录)的软链接,文件路径如下:
|

容器文件路径
容器中的文件路径,是相对于容器的文件系统而言。容器中的文件日志也是落在宿主机node节点上的,可以通过宿主机目录查看到对应文件信息
没有挂载数据卷的目录
在这种情况下,可以根据storage driver(例如:aufs、overlay2)以及容器运行时(docker、containerd),查看容器根目录在宿主机上的挂载点,再根据日志文件在容器文件系统中的路径,找到日志文件在宿主机上的位置。 目前TKE节点主要安装的操作系统是ubuntu、CentOS和tlinux,使用的storage driver为 aufs或者overlay2。 获取容器根目录挂载点的方法如下:
docker运行时
| 容器根目录在宿主机的挂载点 | 如何查看id | |
|---|---|---|
| aufs | /var/lib/docker/aufs/mnt/ |
cat /var/lib/docker/image/aufs/layerdb/mounts/ |
| overlay2 | /var/lib/docker/overlay2/ |
cat /var/lib/docker/image/overlay2/layerdb/mounts/ |
查询示例:
|

容器的根目录在宿主机上的挂载点

容器的存储ID找到对应的容器ID和镜像ID
1,进入overlay2目录
|
2,查看占用空间的pid,以及对应的容器名称
|
containerd运行时
|
可以看到,容器根目录在宿主机的挂在点取决于容器的标识(id或者container-id)。
在默认配置/etc/containerd/config.toml 中还有两个关于存储的配置路径 :
root = “/var/lib/containerd” state = “/run/containerd”
其中 root 是用来保存持久化数据,包括 Snapshots, Content, Metadata 以及各种插件的数据,每一个插件都有自己单独的目录,Containerd 本身不存储任何数据,它的所有功能都来自于已加载的插件。
而另外的 state 是用来保存运行时的临时数据的,包括 sockets、pid、挂载点、运行时状态以及不需要持久化的插件数据。
则容器里面的文件日志路径,可以通过宿主机的挂在点获取到,
| 容器中路径 | 宿主机路径(docker + overlay2) |
|---|---|
| /data/logs/nginx.log | /run/containerd/io.containerd.runtime.v2.task/k8s.io/0b895cd3a0fb017337df1796530904b0185db7469f442b9413333f4c8c878fee/rootfs/data/logs/test.log |
挂载数据卷的目录日志
TKE支持以下几种挂载卷类型
hostpath
hostpath的处理比较简单,直接查看POD所在节点的挂载路径日志
emptyDir
emptyDir卷在宿主机上的路径为:
kubelet root-dir的默认值:/var/lib/kubelet
|
腾讯云CBS/CFS
cbs持久化卷在宿主机上的路径为:
|


cfs持久化卷在宿主机上的路径为:
|


验证,如果是一个CFS类型的PVC挂载不同的POD上,节点上只有一个挂载点,






