Стручки Kubernetes исчезают после неудачной работы - PullRequest
0 голосов
/ 08 января 2019

Я выполняю задания Kubernetes через cron. В некоторых случаях задания могут потерпеть неудачу, и я хочу, чтобы они перезапустились. Я планирую работу следующим образом:

kubectl run collector-60053 --schedule=30 10 * * * * --image=gcr.io/myimage/collector --restart=OnFailure --command node collector.js

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

Например:

$ kubectl get jobs | grep 60053
collector-60053-1546943400     1         0            1h
$ kubectl get pods -a | grep 60053
$    // nothing returned

Это на Google Cloud Platform под управлением 1.10.9-gke.5

Любая помощь будет высоко ценится!

EDIT:

Я обнаружил еще немного информации. У меня есть настройка автоматического масштабирования на моем кластере GCP. Я заметил, что когда серверы удаляются, стручки также удаляются (и их метаданные). Это ожидаемое поведение? К сожалению, это не дает мне простой способ просмотреть журналы стручков.

Моя теория состоит в том, что при сбое модулей происходит включение CrashLoopBackOff, и в конечном итоге автоматическое масштабирование решает, что узел больше не нужен (он не видит модуль в качестве активной рабочей нагрузки). В этот момент узел исчезает, как и стручки. Я не думаю, что это ожидаемое поведение с Restart OnFailure, но я в основном засвидетельствовал это, внимательно наблюдая за этим.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

После более глубокого изучения этой проблемы у меня возникло недоразумение. Согласно выпуску 54870 в хранилище Kubernetes, при задании Restart = OnFailure возникают некоторые проблемы с заданиями.

Я изменил свою конфигурацию, чтобы использовать Restart = Never и установить backoffLimit для задания. Несмотря на то, что restart настроен на никогда, в моем тестировании с restart never, Kubernetes фактически перезапустит блоки до значения backoffLimit и сохранит блоки ошибок для проверки.

0 голосов
/ 08 января 2019

Получить название задания

kubectl get jobs --watch

Найти модуль для этой последней запланированной работы

pods=$(kubectl get pods --selector=job-name=nameofjob-xxxxx --output=jsonpath={.items..metadata.name})

Получить журналы pod

echo $pods
kubectl logs $pods
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...