K8s日志类型综述

日志类型综述

一、容器标准输出格式

容器引擎捕获了容器stdout和stderr,为每一行附加时间戳和来源并格式化之后写入宿主机的某个文件。

容器引擎docker:

{"log":"I0610 08:29:07.698664 Waiting for caches to sync\n", "stream":"stderr", "time:"2021-06-10T08:29:07.698731204Z"}

容器引擎containerd:

2021-12-01T03:13:58.298476921Z stderr F INFO [main] Starting service [Catalina]

二、容器日志在宿主机真实路径

stdout:

    - /var/log/pods/default_stdtest-55f6455bb6-gmk6q_7032a5f3-b7cb-4c87-8599-3e7d7cef0057/stdtest-stdout/*.log

emptyDir:

/var/lib/kubelet/pods/7032a5f3-b7cb-4c87-8599-3e7d7cef0057/volumes/kubernetes.io~empty-dir/cache/test.log

hostpath:

/hostdir/log/default/stdtest-55f6455bb6-gmk6q/test-hostpath.log

rootfs:

扫描二维码关注公众号,回复: 14709097 查看本文章
/var/lib/docker/overlay2/19b25ba2930090ce7f4f6190d81aca68b2d8fb20e3f212e93fe331ffc6845fd0/merged/var/log/test.log

三、POD崩溃与对日志类型的影响

emptyDir

以容器stdtest-empty-5487d59689-8l65n为例子:

在cache下写入日志

echo dusaihduasihdua >> /cache/test.log

我们 让容器崩溃

kill -11 1

再次进入容器

root@stdtest-empty-5487d59689-8l65n:/# cat /cache/test.log 

dusaihduasihdua

文件依旧存在,当我们删除掉emptyDir的pod

root@stdtest-empty-5487d59689-fbw9s:/# ls /cache/

test-empty.log

test.log消失,也就是说容器崩溃emptyDir文件不会消失,但是如果容器滚动volume会丢失

HostPath

在cache下写入日志

echo dusaihduasihdua >> /cache/test.log

我们 让容器崩溃

kill -11 1

再次进入容器

root@stdtest-empty-5487d59689-8l65n:/# cat /cache/test.log 

dusaihduasihdua

文件依旧存在

我们删除pod

root@stdtest-host-5f5bd886b5-9wgbt:/# cat /cache/test.log 

dusaihduasihdua

文件依旧会存在

结论

Deployment 升级

Deployment 扩缩容

DaemonSet更新

Statefulset更新

pod崩溃

pod的uid是否变化

旧有的pod uid不变,新增的pod是新的uid

stdout

emptydir

hostpath

hostpath-subPathExpr

rootfs

pod的uid变化时是否会删除掉日志文件

容器崩溃重启后是否会删除掉日志文件

猜你喜欢

转载自blog.csdn.net/qq_32783703/article/details/126705072
k8s