Kubernetes - Проблема с NodeUnderMemoryPressure

Я новичок в Kubernetes. Мы используем кластер Kubernetes на Google Cloud Platform.

Я создал контроллеры Cluster, Services, Pod, Replica.

Я создал Horizontal Pod Autoscaler, и он основан на параметрах процессора.

Детали кластера

Количество работающих узлов по умолчанию установлено на 3.

3 ГБ выделяемой памяти на узел

По умолчанию количество работающих узлов в кластере равно 3.

После 1 часа работы службы и узлов, отображающих проблемы с NodeUnderMemoryPressure.

Как решить эту проблему ?? Если у вас есть какие-либо подробности, спрашивайте

Спасибо


person Rams    schedule 11.01.2018    source источник
comment
Можете ли вы проверить потребление памяти вашими узлами? Сколько используется meory, сколько подов запущено на ваших узлах. Ошибка исчезает, если уменьшить количество стручков?   -  person lvthillo    schedule 11.01.2018


Ответы (2)


Я не знаю, сколько трафика попадает в ваш кластер, но я настоятельно рекомендую запустить Prometheus в вашем кластере.

Prometheus - это инструмент для мониторинга и оповещения с открытым исходным кодом, который очень хорошо интегрируется с Kubernetes.

Этот инструмент должен дать вам гораздо лучшее представление о потреблении памяти, использовании ЦП, среди многих других возможностей мониторинга, которые позволят вам эффективно устранять неполадки такого типа.

person grizzthedj    schedule 11.01.2018
comment
Спасибо, что сообщили мне о Prometeus, он действительно работает отлично! - person GalloCedrone; 17.01.2018

Есть несколько способов решить эту проблему, в зависимости от типа ваших рабочих нагрузок.

Самый простой - просто масштабировать ваши узлы, но это может оказаться бесполезным при утечке памяти. Даже если сейчас это не влияет на вас, вы всегда должны учитывать возможность утечки памяти, поэтому рекомендуется всегда вводить ограничения памяти для POD и пространств имен.

Масштабируйте кластер

  • если у вас работает много модулей, и некоторые из них не намного больше других, было бы полезно масштабировать кластер по горизонтали, таким образом количество работающих модулей на узлы уменьшится, и предупреждение NodeUnderMemoryPressure должно исчезнуть.

  • если вы используете несколько POD или некоторые из них способны самостоятельно причинить вред кластеру, то единственный вариант - масштабировать узлы по вертикали, добавляя новый пул узлов с экземплярами Compute Engine, имеющими больше памяти, и, возможно, удалить старый.

  • если ваша рабочая нагрузка правильная и у вас страдает память, потому что в определенный момент дня вы получаете в 100 раз больше обычного трафика и вы создаете больше модулей для поддержки этого трафика, вам следует подумать об использовании Autoscaler.

Проверить утечки памяти

С другой стороны, если это не «здоровая» ситуация, и у вас есть модули, потребляющие намного больше ОЗУ, чем ожидалось, вам следует последовать совету grizzthedj и понять, почему ваши POD потребляют так много, и, возможно, проверить, затронуты ли некоторые из ваших контейнеров. утечкой памяти и в этом случае масштабировать объем оперативной памяти бесполезен, так как в какой-то момент она все равно закончится.

Поэтому начните понимать, какие POD потребляют слишком много, а затем выясните, почему у них такое поведение, если вы не хотите использовать Prometeus просто войдите в контейнер по SSH и проверьте с помощью классических команд Linux.

Ограничьте объем оперативной памяти, потребляемой POD

Чтобы этого не произошло в будущем, я советую вам при написании файла YAML всегда ограничить объем оперативной памяти, которую они могут использовать, таким образом вы будете контролировать их, и вы будете уверены, что нет риска, который они вызывают "агент узла" Kubernetes откажет из-за нехватки памяти.

Также подумайте об ограничении ЦП и введении минимальных требований к ОЗУ и ЦП для POD, чтобы помочь планировщику правильно планировать POD, чтобы избежать NodeUnderMemoryPressure при высокой рабочей нагрузке.

person GalloCedrone    schedule 17.01.2018