首页 > 解决方案 > 我是否应该将任何内存选项传递给在 Kubernetes pod 上运行且有限制的 nodejs 应用程序?

问题描述

我在 Kubernetes 上运行的 nodejs 应用程序有限制:

apiVersion: apps/v1
kind: Deployment
..
spec:
  ..
  template:
    ..
    spec:
      containers:
      - name: mynodejsapp
        ..
        resources:
          requests:
            memory: "1000Mi"
            cpu: "500m"
          limits:
            memory: "2000Mi"
            cpu: "1000m"
        ..

我的 nodejs 应用程序的 Dockerfile 是基于node:10-slim

FROM node:10-slim
..    
COPY . .
RUN npm run build
EXPOSE 3000
ENTRYPOINT ["dumb-init", "--"]
CMD [ "node", "./build/index.js" ]

我发现一些--max_old_space_size 应该设置的旧帖子。那是对的吗?还是 nodejs 进程会自动找到现有的内存限制?

标签: node.jsdockermemorykubernetes

解决方案


使用 Nodejs 10 这很糟糕,因为在 64 位操作系统上它可能会超过您的限制值。Nodejs 12 应该没问题,但是如果你想使用 CPU 活动来扩展 pod,设置 max old memory 是个好主意。GC 会尽量保持在这个值之下,(所以在你的 k8s 请求内存之下)并且 CPU 活动会增长。我在这里写了一篇关于这个主题的文章。


推荐阅读