【发布时间】:2020-03-21 12:56:42
【问题描述】:
我的服务在 pod 中运行输出过多日志并导致临时存储不足。结果,该 pod 被驱逐,其他服务无法部署到 k8s。
那么如何确定 pod 资源临时存储请求和限制以避免这种情况呢?我找不到任何关于临时存储的最佳实践。
【问题讨论】:
标签: kubernetes
我的服务在 pod 中运行输出过多日志并导致临时存储不足。结果,该 pod 被驱逐,其他服务无法部署到 k8s。
那么如何确定 pod 资源临时存储请求和限制以避免这种情况呢?我找不到任何关于临时存储的最佳实践。
【问题讨论】:
标签: kubernetes
请注意,默认情况下,如果您没有对 ephemeral-storage 设置任何限制,则 pod 可以访问它正在运行的节点的整个磁盘,因此如果您确定 pod 正因此被驱逐,那么你可以确定 pod 把它全部消耗掉了。您可以从 kubelet 日志中检查这一点,因为 kubelet 是负责检测此行为并驱逐 pod 的人。
现在,您有两个选择。您可以设置 ephemeral-storage 限制,并进行受控的 pod 驱逐,或者只是获取一个外部卷,将其映射到容器中,然后将日志获取到节点之外。
您也可以监控磁盘使用情况,建议使用shubham_asati,但如果它正在吃掉它,它就会吃掉它。您只需看看它是如何填写的。
【讨论】:
我猜 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 设置请求/限制临时存储。
关于你的问题
然后比较两个输出的存储。
【讨论】:
du -sh 是否也包含容器日志文件?
您需要部署 prometheus 和 grafana 以了解 pod 消耗了多少内存和 cpu。然后相应地在该 pod 上设置这些请求和限制
临时存储的请求和限制设置是一项新功能,仍处于测试阶段。您可能需要再等几个月才能使用该功能。
但是,如果您使用的是 k8s 1.18,那么您可以测试临时存储的请求和限制设置
【讨论】: