K8s日志类型综述
k8s中stdout、hostpath、emptydir、rootfs 日志类型综述
·
日志类型综述
一、容器标准输出格式
容器引擎捕获了容器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:
/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变化时是否会删除掉日志文件 | 是 | 是 | 否 | 否 | 是 |
容器崩溃重启后是否会删除掉日志文件 | 否 | 否 | 否 | 否 | 是 |
更多推荐
已为社区贡献7条内容
所有评论(0)