如何确定 Kubernetes Pod 的临时存储请求和限制?

5

我的服务运行在一个Pod中,输出了太多的日志导致临时存储空间不足。结果,Pod被驱逐,并且其他服务无法部署到K8s。

那么我该如何确定Pod资源的临时存储请求并限制以避免这种情况?我找不到有关临时存储的最佳实践。

3个回答

7
请注意,默认情况下,如果您没有设置 ephemeral-storage 的任何限制,则 pod 可以访问其所在节点的整个磁盘。因此,如果您确定 pod 因此被驱逐,那么您可以确定该 pod 已经消耗完了所有空间。您可以从 kubelet 日志中检查这一点,因为 kubelet 负责检测此行为并驱逐 pod。
现在,您有两个选择。要么设置 ephemeral-storage 限制,进行受控的 pod 驱逐,要么获取外部卷,将其映射到容器中,并在节点外部获取日志。
您还可以监视磁盘使用情况,如 shubham_asati 建议的那样,但如果它正在占用全部空间,那就是它在消耗全部空间。您只能查看它如何被填满。

谢谢,我找到了根本原因。是因为我的Flentd pod崩溃了。所以它无法收集和轮转日志。结果,日志文件占用了整个磁盘,导致pod被驱逐。 - Ruoxuan.Wang
建议设置临时存储限制和请求吗? - Ruoxuan.Wang
一般来说,建议设置所有资源请求。在这种情况下,您还应该设置限制,以便更加控制地终止Pod,因为kubelet不会驱逐导致此问题的Pod,而是会驱逐在节点上提供更多空间的Pod。在您的情况(以及大多数情况下),导致问题的Pod和被驱逐的Pod是同一个。 - suren

2
我想临时存储Pod的定义可以被定义为CPU请求/限制。 请参见https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#local-ephemeral-storage,但此功能在K8的版本1.16中处于测试阶段。
要检查命名空间级别的资源消耗,请查看https://kubernetes.io/docs/concepts/policy/resource-quotas/#storage-resource-quota
您可以为每个Pod设置请求/限制临时存储。
关于您的问题:
  1. 使用kubectl describe namespace检查临时存储的命名空间配额。
  2. 尝试在容器内运行du -sh /。
然后比较两个输出的存储。

谢谢。'du -sh' 是指所有节点磁盘存储都被消耗并包含图像本身吗? - Ruoxuan.Wang
du -sh 命令将显示容器文件所占用的空间大小(我建议在容器内运行此命令)。由于 Node 具有容器镜像和运行实例,因此此命令在 Node 中会有所不同。 - shubham_asati
1
好的,du -sh 命令也包括容器日志文件吗? - Ruoxuan.Wang

1
你需要部署Prometheus和Grafana来查找Pod正在消耗多少内存和CPU。然后根据情况在该Pod上设置请求和限制。
短暂存储的请求和限制设置是一个新功能,仍处于Beta测试阶段。您可能需要等待几个月才能使用该功能。
但是,如果您使用的是k8s 1.18,则可以测试短暂存储的请求和限制设置。

1
谢谢。我想知道临时存储的使用情况,而不是CPU或内存。 - Ruoxuan.Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接