我正在运行一个小型 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