Jes*_*sse 1 kubernetes ephemeral-storage
我们的一个容器正在使用临时存储,但我们不知道为什么。在容器中运行的应用程序不应向磁盘写入任何内容。
我们将存储限制设置为 20MB,但它仍然被驱逐。我们可以增加限制,但这似乎是一个创可贴。
我们不确定这个容器正在写入什么或写入何处,而且我也不知道如何检查。当容器被驱逐时,我能看到的唯一信息是容器超出了其存储限制。
是否有一种有效的方法来了解正在编写的内容,或者是我们梳理代码的唯一选择?
向主题添加详细信息。
Pod 使用临时本地存储来存储暂存空间、缓存和日志。 由于其他 Pod 填充了本地存储,Pod 可能会被驱逐,之后新的 Pod 不会被接纳,直到回收足够的存储空间。
kubelet 可以使用本地临时存储向 Pod 提供临时空间,以将emptyDir卷挂载到容器中。
对于容器级别的隔离,如果容器的可写层和日志使用量超过其存储限制,kubelet 会将 Pod 标记为驱逐。
对于 Pod 级别的隔离,kubelet 通过对该 Pod 中容器的限制求和来计算出总体 Pod 存储限制。在这种情况下,如果所有容器的本地临时存储使用量以及 Pod 的emptyDir 卷的总和超过了 Pod 的总体存储限制,那么 kubelet 也会将该 Pod 标记为驱逐。
要查看自 pod 启动以来写入了哪些文件,您可以运行:
find / -mount -newer /proc -print
Run Code Online (Sandbox Code Playgroud)
这将输出比“/proc”更新的文件列表。
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/run/secrets
/run/secrets/kubernetes.io
/run/secrets/kubernetes.io/serviceaccount
/run/nginx.pid
/var/cache/nginx
/var/cache/nginx/fastcgi_temp
/var/cache/nginx/client_temp
/var/cache/nginx/uwsgi_temp
/var/cache/nginx/proxy_temp
/var/cache/nginx/scgi_temp
/dev
Run Code Online (Sandbox Code Playgroud)
另外,尝试不使用“-mount”选项。
要查看是否有任何新文件被修改,您可以在 Pod 中运行以下命令的一些变体:
while true; do rm -f a; touch a; sleep 30; echo "monitoring..."; find / -mount -newer a -print; done
Run Code Online (Sandbox Code Playgroud)
并使用命令检查文件大小du -h someDir
。
另外,正如 @gohm'c 在他的回答中指出的那样,您可以使用 sidecar/ephemeral 调试容器。
在此处阅读有关本地临时存储的更多信息。
归档时间: |
|
查看次数: |
2784 次 |
最近记录: |