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

Разбираемся с использованием памяти Docker и Kubernetes

Я запускаю небольшой кластер 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