了解 Docker 和 Kubernetes 的内存使用情况

了解 Docker 和 Kubernetes 的内存使用情况

我正在运行一个小型 Kubernetes 集群,其中包含一个主节点和两个工作节点。我想了解它的内存使用情况以及我是否已经耗尽了资源……如果是的话,我应该如何准确地检测到这一点。

每个节点有 4 GB 内存,没有交换(根据最佳实践)。查看其中一个节点,根据 Docker,容器使用 16 GB 内存。这怎么可能呢?

khost1:~$ docker stats --no-stream --format 'table {{.MemUsage}}' | sed 's/\.\([0-9]*\)GiB/\1MiB/g' | sed 's/[A-Za-z]*//g' | awk '{sum += $1} END {print sum "MB"}'
16436.8MB
khost1:~$ free
              total        used        free      shared  buff/cache   available
Mem:        4039552     3255808      234400       54336      549344      473648
Swap:             0           0           0

此外,我在 Kubernetes 仪表板上看到的是,11.3 GB 中的 3.6 GB(跨所有三个节点?)已被保留。我认为这是因为我的 pod 大部分都没有指定请求和限制。我是否需要这样做才能让 Kubernetes 有效地管理内存?

答案1

docker stats 报告用于磁盘缓存以及使用的页面,这有点误导。

如果您的项目对资源利用率敏感,那么您绝对应该使用资源请求和限制参数。

为了防止集群资源耗尽,你可能还需要启用资源配额

一旦启用它,你将能够检查命名空间中 pod 的实际资源使用情况

kubectl describe quota

相关内容