gpt4 book ai didi

kubernetes - 监控 Kubernetes 节点上的 pod 资源使用情况

转载 作者:行者123 更新时间:2023-12-04 14:22:36 26 4
gpt4 key购买 nike

用例/问题

我负责维护一个有 40 个节点的 kubernetes 集群(分为 2 个区域)。我们有大约 100 个微服务和平台东西,比如在这个集群中运行的 Kafka 代理。所有微服务都定义了资源请求和限制。然而,它们中的大多数都是可突发的,并且没有保证的 RAM。在我们的集群中部署服务的开发人员定义的限制远大于请求(参见下面的示例),最终导致各个节点上的大量 pod 被驱逐。不过,我们仍然希望在我们的服务中使用可爆发资源,因为我们可以使用可爆发资源来节省资金。因此,我需要更好地监控每个节点上运行的所有 pod 的可能性,其中包含以下信息:

  • 节点名称和 CPU/RAM 容量
  • 所有 pod 名称加上
  • pod 的资源请求和限制
  • pod 的当前 cpu 和 ram 使用情况

  • 通过这种方式,我可以轻松识别两种有问题的服务:

    案例A:微服务只是设置了巨大的资源限制,因为开发人员只是在测试东西或者懒得测试/监控他的服务
    resources:
    requests:
    cpu: 100m
    ram: 500Mi
    limits:
    cpu: 6
    ram: 20Gi

    案例B:同一节点上设置了不准确资源限制的太多服务(例如 500Mi,但该服务不断使用 1.5Gi RAM)。这种情况发生在我们身上,因为 Java 开发人员没有注意到 Java 垃圾收集器只会在使用 75% 的可用 RAM 时才开始清理。

    我的问题:

    我如何才能正确监控这一点,从而识别错误配置的微服务,以防止出现此类驱逐问题?在较小的规模上,我可以简单地运行 kubectl describe nodeskubectl top pods手动计算出来,但在这种规模下不再起作用。

    注意:我找不到此问题的任何现有解决方案(包括使用 kube 指标和类似的 prometheus + grafana 板)。我认为这是可能的,但在 Grafana 中可视化这些东西真的很难。

    最佳答案

    这是一个已知问题,因为仍有一个 Unresolved 问题 github issue社区正在要求开发人员创建一个新命令,该命令将显示 pod/容器总 CPU 和内存使用情况。请检查此链接,因为社区提供了一些想法和解决方法,看起来它们可能对您的案例有用。

    您是否使用了正确的指标,却无法看到所需的信息?
    Here是一个 pod 指标列表,我认为其中一些对您的用例很有用。

    尽管由于社区和其他一些资源没有针对此问题的功能齐全的解决方案,但仍有几种方法可以实现您的目标:
    正如本 article 中所建议的那样:

    kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo {}; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo'

    也是本文作者推荐 CoScale我没有使用过它,但如果其他解决方案失败,似乎值得一试。

    我认为另一点是,如果您的开发人员不断分配比所需资源多得多的资源,您可能永远无法控制。 Nicola Ben推荐的解决方案将帮助您减轻此类问题。

    关于kubernetes - 监控 Kubernetes 节点上的 pod 资源使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540624/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com