Рейтинг:1

Kubernetes Pod выходит из строя со статусом OutOfMemory сразу после планирования

флаг ao

Я тестирую свое приложение на чистом кластере Kubernetes (версия 1.22.1), и у меня возникла проблема при запуске моего приложения в качестве задания.

В моем кластере два узла (главный и рабочий), но рабочий оцеплен. На главном узле для приложения доступно 21 ГБ памяти.

Я попытался запустить свое приложение как три разных задания одновременно. Поскольку я установил 16 ГБ памяти как для запроса ресурсов, так и для ограничения, было запущено только одно задание, а остальные два находятся в состоянии ожидания. Я установил backoffLimit: 0 для рабочих мест.

ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
app1--1-8pp6l 0/1 В ожидании 0 42 с
app2--1-42ssl 0/1 В ожидании 0 45 с
app3--1-gxgwr 0/1 Выполняется 0 46 с

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

ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
app1--1-8pp6l 0/1 Выполняется 0 90 с
app2--1-42ssl 0/1 OutOfmemory 0 93 с
app3--1-gxgwr 0/1 Завершено 0 94 с

События OutOfMemory Pod следующие:

События:
  Тип Причина Возраст от сообщения
  ---- ------ ---- ---- -------
  Предупреждение FailedScheduling 3m41s (x2 over 5m2s) планировщик по умолчанию Доступно 0/2 узла: 1 Недостаточно памяти, 1 узел (узлы) не удалось запланировать.
  Обычный Запланировано 3 м 38 с Планировщик по умолчанию Успешно назначен test/app2--1-42ssl для мастера
  Предупреждение OutOfmemory 3m38s kubelet Узлу не хватило ресурса: памяти, запрошено: 16000000000, использовано: 31946743808, емкость: 37634150400

Кажется, что Pod назначен узлу, хотя для него недостаточно места, так как другой Pod только что был запущен.

Я предполагаю, что это не ожидаемое поведение Kubernetes, кто-нибудь знает причину этой проблемы?

Mikolaj S. avatar
флаг cn
Вы правы, такое поведение не ожидается - как я тестировал локально (такой же конфиг, как у вас - 3 задания с установленными лимитами и запросами) - каждое задание завершалось, когда заканчивалось предыдущее. Я вижу, что у вас есть два узла. Вы хотите запустить задание на конкретном? Почему на одном из узлов есть `node.kubernetes.io/unreachable:`? Вы пытались дождаться окончания `app1--1-8pp6l `, а затем проверить? Какое именно решение Kubernetes вы используете для «голого железа»? Ошибка может быть связана с конкретным решением.
Daigo avatar
флаг ao
Я прикрепил неправильное сообщение, извините. У меня на самом деле две ноды и рабочий оцеплен. (Я также отредактировал свой пост). После завершения `app1`, `app2` все еще находился в состоянии OutOfMemory. Я использую kubeadm для создания своего кластера k8s.
Рейтинг:1
флаг cn

Это известная проблема для 1.22.х версии — об этом можно найти несколько тем на GitHub и Stackoverflow, например:

Исправление проблемы включено в версию 1.23.:

  • Исправлена ​​регрессия, из-за которой Kubelet не мог исключить уже завершенные модули из расчетов того, сколько ресурсов он использует в настоящее время, при принятии решения о разрешении дополнительных модулей. (#104577, @smarterclayton)

Поэтому, пожалуйста, просто обновите свой кластер Kubernetes до последней стабильной версии.

Я надеюсь, что это поможет вам, но имейте в виду еще одна похожая проблема открыта на Github даже с примененным исправлением (упомянул здесь около 10 дней назад - состояние на 13 января 2022 г.):

Ссылка здесь для полноты — аналогичный симптом может появиться после этого исправления, как описано в #106884. kubelet считает, что ресурсы для завершающих модулей используются (они используются!), но планировщик игнорирует завершающие модули и планирует новые модули. Поскольку kubelet теперь рассматривает завершение pod, он отклоняет быстро перепланированные pod'ы.

Тогда, вероятно, единственное решение — перейти на версию 1.21.

Рейтинг:0
флаг us

Не могли бы вы опубликовать yaml модуля?

У меня было что-то похожее у одного из моих клиентов, где была опечатка в лимите памяти (860м вместо 860Ми) стоит посмотреть

Ответить или комментировать

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