为Node.js和puppeter管理Kubernetes上的逐出

为Node.js和puppeter管理Kubernetes上的逐出,node.js,azure,kubernetes,Node.js,Azure,Kubernetes,我现在看到一个奇怪的问题,我有一个豆荚,它一直被库伯内特斯驱逐 我的群集/应用程序信息: 节点大小:7.5GB RAM/2vCPU 应用程序语言:nodejs 用例:Puppeter网站提取(我有代码加载一个网站,然后提取一个元素,每小时重复几次) 运行在Azure Kubernetes服务(AKS) 我的尝试: 检查木偶师是否正确关闭,以及我是否正在移除任何chrome实例。在添加了一个强力杀手之后,它似乎正在这样做 选中了kubectl get events(kubectl获取事件)

我现在看到一个奇怪的问题,我有一个豆荚,它一直被库伯内特斯驱逐

我的群集/应用程序信息:

  • 节点大小:
    7.5GB RAM
    /
    2vCPU
  • 应用程序语言:
    nodejs
  • 用例:Puppeter网站提取(我有代码加载一个网站,然后提取一个元素,每小时重复几次)
  • 运行在Azure Kubernetes服务(AKS)
我的尝试:

  • 检查木偶师是否正确关闭,以及我是否正在移除任何chrome实例。在添加了一个强力杀手之后,它似乎正在这样做

  • 选中了kubectl get events(kubectl获取事件),其中显示了以下行:

8m17s正常NodeHasSufficientMemory节点/node-1节点node-1状态现在为:NodeHasSufficientMemory
2m28s警告退出ThresholdMet节点/node-1尝试回收内存
71m警告失败调度pod/my deployment 0/4个节点可用:1个节点具有pod无法容忍的污染{node.kubernetes.io/memory-pressure:},3个节点与节点选择器不匹配
  • 选中
    kubectl top pods
    ,其中显示它仅利用了约30%的节点内存
  • 在my kubernetes
    .yaml
    中添加了资源限制:
apiVersion:apps/v1 种类:部署 元数据: 姓名:my-app-d 规格: 副本:1份 模板: 规格: 容器: -姓名:main 图像:我的图像 imagePullPolicy:始终 资源: 限制: 内存:“2Gi” 当前的思维方式:

一个节点有X个总可用内存,但是由于保留空间,实际上只有Y可以从X内存分配。但是,当在
node.js
中运行
os.totalmem()
时,我仍然能够看到允许该节点分配X内存

我在这里想的是,Node.js由于垃圾收集而分配到X,这实际上应该是在Y而不是X处启动的。然而,由于我的限制,我实际上希望它看到的是限制,而不是K8S节点内存限制

问题


还有什么事情需要我去解决吗?以前有人有过这个吗?

您的NodeJS应用程序不知道它在容器中运行。它只看到Linux内核报告的内存量(总是报告总的节点内存)。您应该让您的应用程序了解cgroup限制,请参阅

关于驱逐:当你设置了内存限制时——这解决了你驱逐的问题吗


不要太信任kubectl顶级豆荚。它总是会延迟显示数据。

谢谢!这确实是一个问题:(遗憾的是,诚实地说,它需要这样一个解决办法……但它是有效的!