Проблема
Я пытаюсь развернуть модуль, который завершается ошибкой, которую я не могу понять. Модуль запускается через Airflow для выполнения определенной задачи. Airflow показывает, что модуль неисправен, без каких-либо журналов. Когда я запускаю kubectl describe pod my-pod
, я получаю следующий вывод.
Что мне делать, чтобы определить основную причину проблемы?
Неудачный раздел контейнера:
base:
Container ID: <ID>
Image: <IMAGE>
Image ID: <ID>
Port: <none>
Host Port: <none>
Command:
airflow
run
/var/airflow/my_dag_name.py
task_name
2023-02-20T23:15:00+00:00
--local
--pool
default_pool
-sd
/var/airflow/my_dag_name.py
State: Terminated
Reason: Error
Exit Code: 1
Started: Mon, 20 Feb 2023 20:55:07 -0600
Finished: Mon, 20 Feb 2023 20:55:11 -0600
Ready: False
Restart Count: 0
Limits:
cpu: 1
ephemeral-storage: 100Gi
memory: 8Gi
Requests:
cpu: 500m
ephemeral-storage: 1Gi
memory: 8Gi
Environment:
<ENV VARS>
Mounts:
<VARIOUS MOUNTS>
Раздел событий (на этом все):
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 58s default-scheduler Successfully assigned <TASK> to <IP>
Normal Pulled 58s kubelet Container image <SIDECAR IMAGE 1> already present on machine
Normal Created 57s kubelet Created container <SIDECAR CONTAINER 1>
Normal Started 57s kubelet Started container <SIDECAR CONTAINER 1>
Normal Pulling 54s kubelet Pulling image <SIDECAR IMAGE 2>
Normal Pulled 53s kubelet Successfully pulled image <SIDECAR IMAGE 2> in 125.691281ms
Normal Created 53s kubelet Created container <SIDECAR CONTAINER 2>
Normal Started 53s kubelet Started container <SIDECAR CONTAINER 2>
Normal Pulled 52s kubelet Container image <FAILING POD IMAGE> already present on machine
Normal Created 52s kubelet Created container <FAILING POD CONTAINER>
Normal Started 52s kubelet Started container <FAILING POD CONTAINER>
Normal Pulled 52s kubelet Container image <SIDECAR IMAGE 3> already present on machine
Normal Created 52s kubelet Created container <SIDECAR CONTAINER 3>
Normal Started 52s kubelet Started container <SIDECAR CONTAINER 3>
Normal Pulled 52s kubelet Container image <SIDECAR IMAGE 4> already present on machine
Normal Created 52s kubelet Created container <SIDECAR CONTAINER 4>
Normal Started 51s kubelet Started container <SIDECAR CONTAINER 4>
Контекст
Поды используют эти временные сайдкары для подключения к системам/вставки информации/и т. д.
Основной процесс контейнера завершился с кодом 1. Если это произошло, вы, вероятно, не найдете больше информации от диагностики Kubernetes.
мы закончили тем, что использовали kubectl logs --follow <pod-name>
в перезапущенной версии модуля и определили основную причину (нечетный конфликт зависимостей)
Почему люди такие негативные?? Если вы можете объяснить отрицательный голос, я мог бы понять, но это законная проблема, заданная четко, с твердым ответом. Я никогда не пойму желание людей минусовать без объяснения причин...
В Kubernetes для диагностики проблем с модулями очень полезны коды выхода контейнера. Если модуль неисправен, проблему можно найти с помощью приведенной ниже команды.
kubectl describe pod [POD_NAME]
вы уже предоставили его вывод, который показывает следующую информацию:
State: Terminated
Reason: Error
Exit Code: 1
Поскольку контейнер завершается с кодом выхода 1, необходимо провести тщательное исследование контейнера и его приложений, поскольку это в основном связано с ошибкой приложения или недопустимой ссылкой.
В качестве первого шага, предложенного Харшем Манваром, проверьте журналы соответствующего модуля, используя приведенную ниже команду, чтобы получить журналы для первого контейнера в модуле.
kubectl logs <pod-name> -p
-p означает -previous, что означает, что если модуль был перезапущен, он вернет журналы для предыдущего экземпляра модуля.
Журналы покажут основную причину кода выхода 1, и эту информацию можно использовать для исправления поля команды в файле YAML модуля. После обновления повторно примените его к кластеру с помощью команды kubectl apply.
Приведенная выше информация взята из ссылки, написанной Джеймсом Уокером.
попробуйте
kubectl logs <pod-name> -p
я сомневаюсь, что он вышел из-за ошибки в коде.