为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个节点与节点选择器不匹配
- 选中
,其中显示它仅利用了约30%的节点内存kubectl top pods
- 在my kubernetes
中添加了资源限制:.yaml
node.js
中运行os.totalmem()
时,我仍然能够看到允许该节点分配X内存
我在这里想的是,Node.js由于垃圾收集而分配到X,这实际上应该是在Y而不是X处启动的。然而,由于我的限制,我实际上希望它看到的是限制,而不是K8S节点内存限制
问题
还有什么事情需要我去解决吗?以前有人有过这个吗?您的NodeJS应用程序不知道它在容器中运行。它只看到Linux内核报告的内存量(总是报告总的节点内存)。您应该让您的应用程序了解cgroup限制,请参阅 关于驱逐:当你设置了内存限制时——这解决了你驱逐的问题吗
不要太信任kubectl顶级豆荚。它总是会延迟显示数据。谢谢!这确实是一个问题:(遗憾的是,诚实地说,它需要这样一个解决办法……但它是有效的!