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

Периодические сбои DNS в Google Container Engine

[Вопрос переписан с подробным описанием результатов.]

Я использую кластер Google Container Engine с примерно 100 контейнерами, которые выполняют около 100 000 вызовов API в день. Некоторые из модулей начали отказывать на 50% в разрешении DNS. Я углубился в это, и это происходит только для модулей на узлах, которые работают kube-dns. Я также заметил, что это происходит только перед тем, как узел в системе отключается из-за нехватки памяти.

Фоновые задания восстановления прикрепляются к API Google и затем загружают данные в S3. Когда я вижу неудачные задания, они терпят неудачу со статусом «Временный сбой в разрешении имен». Это происходит с аккаунтами "accounts.google.com" и "s3.amazonaws.com".

Когда я вхожу на сервер и пытаюсь подключиться к этим (или другим хостам) с помощью host, nslookup, или dig кажется, работает нормально. Когда я подключаюсь к консоли rails и запускаю тот же код, который не работает в очередях, я не могу получить сбой. Хауэрвер, как я уже сказал, эти фоновые сбои кажутся периодическими (около 50% времени для рабочих, работающих на узлах, kube-dns).

До сих пор мое временное исправление заключалось в том, чтобы удалить поды, которые выходили из строя, и позволить кубернетам перепланировать их и продолжать делать это до тех пор, пока кубернеты не запланировали их на узел, который не работает. kube-dns.

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

Я решил это, обновившись до Kubernetes 1.4.

В выпуск 1.4 было внесено несколько исправлений, чтобы уберечь кубернетов от сбоев при нехватке памяти. Я думаю, что это помогло снизить вероятность возникновения этой проблемы, хотя я не уверен, что основная проблема была устранена (если только проблема не была в одной из kube-dns экземпляры были разбиты или не отвечали из-за нестабильности системы кубернетов, когда узел попал в OOM).