Назад | Перейти на главную страницу

Вывод команды kubectl top не соответствует бесплатной команде Linux

У меня есть кластер Kubernetes с одним узлом, и использование памяти, сообщаемое сервером метрик, не похоже на использование памяти, показанное с помощью free команда

# kubectl top nodes
NAME          CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
<node_ip>   1631m        10%    13477Mi         43%

# free -m
              total        used        free      shared  buff/cache   available
Mem:          32010       10794         488          81       20727       19133
Swap:         16127        1735       14392

И разница значительная ~ 3 ГБ.

Я также протестировал это на кластере из 3 узлов, и проблема присутствует и там:

# kubectl top nodes
NAME          CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
<node_ip1>   1254m        8%     26211Mi         84%
<node_ip2>   221m         1%     5021Mi          16%
<node_ip3>   363m         2%     8731Mi          28%
<node_ip4>   1860m        11%    20399Mi         66%

# free -m (this is on node 1)
              total        used        free      shared  buff/cache   available
Mem:          32010        5787         369        1676       25853       24128
Swap:         16127           0       16127

Почему есть разница?

Начнем с понимания того, как работают обе команды.

Свободно - Отображение количества свободной и используемой памяти в системе

Kubectl топ - Позволяет видеть потребление ресурсов для узлов или модулей.

Есть статья объясняя, почему вы можете увидеть различия:

Большинство показателей, специфичных для контейнера, доступны в файловой системе cgroup через /path/to/cgroup/memory.stat, /path/to/cgroup/memory.usage_in_bytes, /path/to/cgroup/memory.limit_in_bytes и другие. Большинство инструментов Linux, предоставляющих метрики системных ресурсов, были созданы раньше cgroups даже существовал. Обычно они считывают метрики памяти из процесса. filesystem: /proc/meminfo, /proc/vmstat, /proc/PID/smaps и другие.

Кроме того, часть подкачки (как упомянуто @uav) должна вызвать красный свет, поскольку вы должны отключить ее, чтобы kubelet работал правильно. Это один из предпосылки для установки кубеадм.

Я надеюсь, что это помогает.