gpt4 book ai didi

asp.net-web-api - 如何在 Kubernetes 的 pod 中限制 .net core 应用程序的内存大小?

转载 作者:行者123 更新时间:2023-12-01 13:15:30 26 4
gpt4 key购买 nike

我有一个 kubernetes 集群,每个节点上有 16Gb RAM

以及一个典型的 dotnet core webapi 应用程序

我尝试像这样配置限制:

apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container

但我的应用程序相信可以使用 16Gb

因为 cat /proc/meminfo | head -n 1返回 MemTotal: 16635172 kB (或者可能来自 cgroups,我不确定)

所以..可能是限制不起作用?

不! K8s 在达到内存限制时成功杀死了我的 pod

.net core 有有趣的 GC 模式, more details here .这是一个很好的模式,但看起来它对 k8s 不起作用,因为应用程序获得了错误的内存信息。无限的 Pod 可以获得所有主机内存。但是有限制——他们会死。

现在我看到两种方法:
  • 使用GC工作站
  • 使用限制和 k8s readness probe : 处理程序将
    检查每次迭代的当前内存并调用 GC.Collect() 如果
    当前使用的内存接近 80%(我将通过 env 变量传递限制)

  • 如何在 Kubernetes 的 pod 中限制 .net core 应用程序的内存大小?

    如何在 kubernetes 中正确设置 pod 的内存限制?

    最佳答案

    您应该切换到 Workstation GC 以进行优化以降低内存使用率。就绪探针不用于检查内存

    为了正确配置资源限制,您应该在重负载下在单个 pod 上测试您的应用程序并监控(例如 Prometheus 和 Grafana)使用情况。有关更深入的详细信息,请参阅此 blog post .如果您还没有部署监视器堆栈,您至少可以使用 kubectl top pods .

    如果您发现了单个 pod 的断点,您可以像下面的示例一样将限制添加到特定的 pod(有关更多示例和详细信息,请参阅 Kubernetes Documentation)

    apiVersion: v1
    kind: Pod
    metadata:
    name: exmple-pod
    spec:
    containers:
    - name: net-core-app
    image: net-code-image
    resources:
    requests:
    memory: 64Mi
    cpu: 250m
    limits:
    memory: 128Mi
    cpu: 500m

    readiness 探针实际上是用来判断 Pod 何时准备就绪的。我猜你想到了活性探测,但这还不够使用,因为当 Pod 超出资源限制并重新调度时,Kubernetes 会杀死它。

    关于asp.net-web-api - 如何在 Kubernetes 的 pod 中限制 .net core 应用程序的内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55549129/

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