Я запускаю небольшой кластер Kubernetes с одним главным и двумя рабочими узлами. Я пытаюсь понять его использование памяти и исчерпал ли я ресурсы ... И если да, то как мне это точно определить.
Каждый узел имеет 4 ГБ памяти и не требует подкачки (согласно рекомендациям). Если посмотреть на один из узлов, по данным Docker, контейнеры используют 16 ГБ памяти. Как это возможно?
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, - это то, что 3,6 ГБ из 11,3 ГБ (на всех трех узлах?) Были зарезервированы. Я предполагаю, что это потому, что мои поды по большей части не определяют запросы и ограничения. Должен ли я делать это, чтобы Kubernetes мог эффективно управлять памятью?
docker stats
страницы отчетов, которые используются для кэширования диска, а также используются, что немного вводит в заблуждение.
Если ваш проект чувствителен к использованию ресурсов, вам обязательно следует использовать запросы ресурсов и параметры ограничений.
Чтобы защитить ваш кластер от нехватки ресурсов, вы также можете включить Квоты на ресурсы
Как только вы включите его, вы сможете проверять фактическое использование ресурсов, в частности, модулями в пространстве имен.
kubectl describe quota