【问题标题】:How to determine kubernetes pod ephemeral storage request and limit?如何确定 kubernetes pod 临时存储请求和限制?
【发布时间】:2020-03-21 12:56:42
【问题描述】:

我的服务在 pod 中运行输出过多日志并导致临时存储不足。结果,该 pod 被驱逐,其他服务无法部署到 k8s。

那么如何确定 pod 资源临时存储请求和限制以避免这种情况呢?我找不到任何关于临时存储的最佳实践。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    请注意,默认情况下,如果您没有对 ephemeral-storage 设置任何限制,则 pod 可以访问它正在运行的节点的整个磁盘,因此如果您确定 pod 正因此被驱逐,那么你可以确定 pod 把它全部消耗掉了。您可以从 kubelet 日志中检查这一点,因为 kubelet 是负责检测此行为并驱逐 pod 的人。

    现在,您有两个选择。您可以设置 ephemeral-storage 限制,并进行受控的 pod 驱逐,或者只是获取一个外部卷,将其映射到容器中,然后将日志获取到节点之外。

    您也可以监控磁盘使用情况,建议使用shubham_asati,但如果它正在吃掉它,它就会吃掉它。您只需看看它是如何填写的。

    【讨论】:

    • 谢谢,我找到了根本原因。因为我的 Flentd 吊舱出现故障。所以它不能收集和轮换日志。结果,日志文件消耗了整个磁盘并导致 pod 被驱逐。
    • 是否建议设置临时存储限制和请求?
    • 一般来说,建议设置所有资源请求,可以。在这种情况下,您还应该设置限制,因此 pod 的终止将以更可控的方式完成,因为 kubelet 不会驱逐导致此问题的 pod,而是驱逐会在节点中提供更多空间的 pod。在您的情况下(在大多数情况下)恰好是导致问题的同一个 pod。
    【解决方案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 检查临时存储的命名空间配额 描述命名空间
    2. 在容器中尝试 du -sh /。

    然后比较两个输出的存储。

    【讨论】:

    • 谢谢。 'du -sh' 表示消耗的所有节点磁盘存储并包含图像本身?
    • du -sh 将提供容器文件占用的空间(我曾建议此命令在容器内运行)。这在节点中会有所不同,因为节点具有容器的映像和正在运行的实例。
    • 好的,du -sh 是否也包含容器日志文件?
    【解决方案3】:

    您需要部署 prometheus 和 grafana 以了解 pod 消耗了多少内存和 cpu。然后相应地在该 pod 上设置这些请求和限制

    临时存储的请求和限制设置是一项新功能,仍处于测试阶段。您可能需要再等几个月才能使用该功能。

    但是,如果您使用的是 k8s 1.18,那么您可以测试临时存储的请求和限制设置

    【讨论】:

    • 谢谢。我想知道临时存储使用情况,而不是 CPU 或内存。
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2020-04-21
    相关资源
    最近更新 更多