有没有办法记录 Kubernetes Pod 内存使用情况,在一个容器 运行 一个基于 Node.js 构建的应用程序中

Is there a way to log Kubernetes Pod memory usage, in a container running an application built on Node.js

我有一个 Kubernetes pod,它会因为内存不足而关闭并自行重启。有多个子进程 运行 异步使用内存。我希望他们每个人都记录 Kubernetes pod 上 available/used 有多少内存。日志应该与其他 Node js 日志一起。

我知道 process.memoryUsage()os.totalmem()os.freemem()

其中分别提供如下输出

{"ts":"2021-04-21T10:52:50.299Z","msg":"Node Memory Stats:{\"rss\":125792256,\"heapTotal\":94720000,\"heapUsed\":48927816,\"external\":1668086}","logger":"___","level":"info"}
{"ts":"2021-04-21T10:52:50.300Z","msg":"OS/POD Total Memory:17179869184, OS/POD Free memory:87195648","logger":"___","level":"info"}

我想知道是否有任何方法可以对 pod 进行系统调用、获取其资源并登录 Node?

您可以简单地检查 /sys/fs/cgroup/cpu//sys/fs/cgroup/memory/ 的值:

对于当前的CPU用法做一个

$ cat /sys/fs/cgroup/cpu/cpuacct.usage

对于当前的内存使用做一个

$ cat /sys/fs/cgroup/memory/memory.usage_in_bytes

提示:确保您已将资源部分(请求和限制)添加到部署中,以便它可以根据 cgroup 计算使用量。