Устранение неполадок Apache Airflow™
- Общая диагностика
- Форма создания недоступна или список версий пуст
- Ошибка импорта DAG
- DAG виден, но запуск не появляется
- Задача ожидает выполнения
- Задача завершилась с ошибкой
- Кластер остается в Provisioning
- Ошибки Git
- Ошибки S3-синхронизации DAG
- Пароль из Secret не подходит
- Ошибки базы данных
- Ошибки установки пакетов
- Не публикуется веб-интерфейс
- Удаление не завершается
Начните диагностику с состояния AirflowCluster и условий состояния в status.conditions.
Общая диагностика
Через консоль управления
- Выберите проект и пространство имен. В левом меню выберите Кластеры Airflow. Если пункт скрыт, раскройте Ещё. Откройте нужный кластер.
- Проверьте состояние кластера в заголовке страницы.
- Откройте вкладку Состояния. Найдите условия со значением
Falseи прочитайте причину и сообщение об ошибке. Значения условий описаны ниже. - На вкладке Основное проверьте источник DAG, хранение логов, компоненты и дополнительные зависимости. В разделе Связанные ресурсы доступны ссылки на созданные базу метаданных и ресурсы хранилища.
- При необходимости откройте вкладку YAML, чтобы проверить полную конфигурацию и
status.conditions. Изменение YAML доступно при наличии прав на изменение кластера.
Если кластер готов, но DAG отсутствует или задача не выполняется, перейдите к ошибкам импорта, диагностике запуска или состояниям задач. Состояние Ready не подтверждает, что DAG-файлы успешно загружены и выполняются без ошибок.
Через CLI
-
Посмотрите состояние кластера:
kubectl get airflowcluster <имя_кластера> \ -n <пространство_имен> \ -o wide -
Получите условия состояния и события кластера:
kubectl describe airflowcluster <имя_кластера> \ -n <пространство_имен> -
Получите UID кластера для поиска его ресурсов:
kubectl get airflowcluster <имя_кластера> \ -n <пространство_имен> \ -o jsonpath='{.metadata.uid}' -
Проверьте поды Apache Airflow™, подставив полученный UID:
kubectl get pods -n <пространство_имен> \ -l 'tier=airflow,airflow.stackland.yandex.cloud/owner-uid=<UID_кластера>'
Форма создания недоступна или список версий пуст
- Проверьте выбранные проект и пространство имен, участие в проекте и права на ресурсы.
- Если список версий не загружается, передайте администратору установки текст ошибки. Он должен проверить, что компонент включен, каталог
AirflowImageCatalog airflowсуществует и у пользователя есть право его чтения. - Если ошибка возникает при создании кластера с приватным Git, сертификатами или закрытыми репозиториями пакетов, проверьте права на создание, чтение, привязку и очистку Secret и ConfigMap. Одного разрешения на создание
AirflowClusterнедостаточно.
Ошибка импорта DAG
-
Откройте веб-интерфейс Apache Airflow™ и перейдите на Home.
-
Если есть ошибки разбора файлов, откройте Dag Import Errors. Найдите файл по имени, раскройте запись и прочитайте traceback. Проверьте время ошибки, чтобы не принять старую запись за результат последнего обновления.
-
Исправьте причину:
SyntaxError— исправьте Python-код и обновите файл в источнике.ModuleNotFoundErrorилиImportError— проверьте путь импорта, совместимость кода с Apache Airflow™ 3.1.8 и наличие нужного provider или библиотеки. При необходимости добавьте зависимости.- Ошибка чтения Variable или Connection при разборе файла — проверьте идентификатор и перенесите обращение к настройкам или внешнему сервису внутрь выполняемой задачи, если оно не требуется для построения DAG.
-
Дождитесь синхронизации и нового разбора. Убедитесь, что ошибка исчезла, а DAG появился в Dags с ожидаемым кодом.
Если Dag Import Errors отсутствует, проверьте Git или S3, путь к файлу и Git ref. Убедитесь, что файл создает объект DAG, а его имя и путь не исключены через .airflowignore. Подробнее — в описании загрузки DAG
DAG виден, но запуск не появляется
- Проверьте, что кластер находится в
Ready, а DAG включен переключателем рядом с именем. - На вкладке Code проверьте актуальное значение
schedule,start_dateи, если задано,end_date. Приschedule=Noneавтоматических запусков не будет. Для проверки используйте ручной запуск. - Для расписания проверьте часовой пояс и наступление очередного времени запуска. Не ожидайте, что логическая дата всегда совпадает с фактическим временем начала выполнения.
- На вкладке Runs проверьте активные запуски. Лимит
max_active_runsможет задерживать создание или начало следующих запусков. - Если ручной запуск также не выполняется, проверьте состояние его задач по инструкции ниже.
Задача ожидает выполнения
Откройте Dags → нужный DAG → Runs → запуск → задачу. Проверьте состояние и вкладку Details. На графе посмотрите состояния предшествующих задач.
|
Состояние |
Что проверить |
|
|
Зависимости задачи, правила запуска и завершение предыдущих задач. |
|
|
Задача запланирована. Проверьте доступные слоты ее пула в Admin → Pools, ограничения параллелизма DAG и готовность планировщика в консоли Stackland. |
|
|
Задача передана исполнителю. В Stackland используется KubernetesExecutor: если ожидание длительное, администратор должен проверить создание и запуск пода задачи, квоты, ресурсы и загрузку образа. |
|
|
У задачи остались автоматические попытки. Прочитайте лог последней попытки и проверьте заданный в коде интервал |
|
|
Задача ожидает условие или событие. Проверьте его источник; для |
|
|
Сначала устраните ошибку предшествующей задачи, затем повторите нужные задачи, проверив выбор Downstream. |
До начала выполнения лог задачи может отсутствовать. Если ожидание не объясняется зависимостями и ограничениями, передайте администратору имя кластера, пространство имен, dag_id, идентификатор запуска, task_id, время и состояние задачи. Для пода в Pending полезны события kubectl describe pod; для ошибки загрузки образа — ее точный текст. Подробнее о состояниях — в документации Apache Airflow™
Задача завершилась с ошибкой
- Откройте логи нужной попытки и найдите исходную ошибку.
- При ошибке подключения проверьте Connection ID и настройки подключения, права во внешнем сервисе и сетевой доступ из задачи.
- При отсутствии переменной проверьте ее ключ в Variables. При ошибке импорта в выполняемой задаче проверьте установленные зависимости.
- После исправления повторите задачу через Clear и проверьте новую попытку. Перед повтором убедитесь, что частично выполненная обработка допускает повторный запуск.
Кластер остается в Provisioning
Проверьте условия состояния, у которых поле status имеет значение False:
|
Условие состояния |
Что проверить |
|
|
Версия из |
|
|
Готовность автоматически создаваемой базы метаданных. При длительном ожидании воспользуйтесь рекомендациями из раздела Ошибки базы данных. |
|
|
Secret с учетными данными Git или S3, ConfigMap |
|
|
Настройки |
|
|
Список дополнительных пакетов, их версии, репозитории и учетные данные. Рекомендации приведены в разделе Ошибки установки пакетов. |
|
|
Административный Secret, непустые ключи |
|
|
Подготовка защитных настроек кластера. При ошибке обратитесь к администратору установки. |
|
|
Обновление базы метаданных. При |
|
|
Настройка учетной записи администратора Apache Airflow™, в том числе после изменения Secret с паролем. При ошибке обратитесь к администратору установки. |
|
|
Состояние подов Apache Airflow™ в пространстве имен кластера и сообщения об ошибках их запуска. |
Точная причина указана в полях reason и message соответствующего условия. Проверяйте, что его observedGeneration совпадает с текущим metadata.generation.
Если устранить ошибку по инструкциям ниже не удалось, передайте администратору установки имя кластера, пространство имен и значения reason и message.
Ошибки Git
Если учетные данные вводились в форме консоли, проверьте раздел Доступ к репозиторию при редактировании кластера. Не заполняйте скрытые поля повторно, если не требуется заменить учетные данные.
Для приватного HTTPS-репозитория Secret должен содержать непустые ключи username и password. Для SSH необходимы:
- ключ
ssh-privatekeyв Secret изauthSecretRef; - ключ
known_hostsв ConfigMap изknownHostsConfigMapRef.
Имена ключей фиксированы. Также проверьте URL репозитория, наличие ветки, тега или коммита из ref и путь subPath.
Ошибки загрузки DAG-файлов смотрите в журнале контейнера git-sync:
kubectl get pods -n <пространство_имен> \
-l 'tier=airflow,component=dag-processor,airflow.stackland.yandex.cloud/owner-uid=<UID_кластера>'
kubectl logs -n <пространство_имен> <имя_пода> -c git-sync
Ошибки S3-синхронизации DAG
Если DAG-файлы из S3 не появляются в веб-интерфейсе, проверьте:
- имя бакета, эндпоинт, регион и режим
forcePathStyle; - ключи, указанные в
credentialsSecretRef, и права доступа к бакету; - CA-сертификат для эндпоинта с частным центром сертификации;
- наличие DAG-файлов под префиксом из
subPath; - сетевой доступ из пространства имен к S3.
Посмотрите журнал синхронизации:
kubectl get pods -n <пространство_имен> \
-l 'tier=airflow,component=dag-processor,airflow.stackland.yandex.cloud/owner-uid=<UID_кластера>'
kubectl logs -n <пространство_имен> <имя_пода> -c dag-sync
Если поды остаются в Pending, посмотрите их события:
kubectl describe pod <имя_пода> -n <пространство_имен>
Учитывайте ограничения S3-источника. Если поды не запускаются из-за нехватки ресурсов или недоступности хранилища, передайте события администратору установки.
Пароль из Secret не подходит
Найдите административный Secret по UID кластера. Если изменялся ключ username, восстановите исходное имя пользователя: изменение имени администратора не поддерживается.
После изменения ключа password дождитесь обработки Secret и проверьте InitialUserReady в status.conditions. При ошибке передайте значения reason и message администратору установки.
Если кластер вернулся в состояние Ready, но вход с новым паролем не работает, пароль существующего пользователя мог остаться прежним. Чтобы восстановить доступ, вручную установите в Apache Airflow™ пароль из Secret. Для этого нужны права на выполнение команд в подах (pods/exec); при отсутствии прав обратитесь к администратору установки.
-
Если кластер приостановлен, возобновите его. Найдите работающий под API server, подставив UID из инструкции Найти Secret:
kubectl get pods -n <пространство_имен> \ -l 'tier=airflow,component=api-server,airflow.stackland.yandex.cloud/owner-uid=<UID_кластера>' -
Запустите команду смены пароля
в найденном поде:kubectl exec -it <имя_пода> \ -n <пространство_имен> \ -c api-server -- \ airflow users reset-password --username <имя_пользователя>Используйте имя пользователя из ключа
usernameадминистративного Secret. В интерактивном запросе введите пароль из ключаpasswordи подтвердите его. -
Выйдите из веб-интерфейса, затем войдите снова с паролем из Secret.
Ошибки базы данных
База метаданных создается и настраивается автоматически. Если DatabaseReady=False долго сохраняется или Apache Airflow™ сообщает об ошибке подключения к базе, обратитесь к администратору установки. Передайте имя кластера, пространство имен и сообщение об ошибке.
Ошибки установки пакетов
Если DependenciesReady=False, начните с reason и message:
SecretNotFound,InvalidSecretилиInvalidCABundle— проверьте Secret изspec.dependencies.repositories: учетные данные, CA и ключ подписи APT. Требования приведены в разделе Репозитории пакетов;ImageBuildPendingилиImageReplicationPending— зависимости еще подготавливаются к использованию. Дождитесь завершения обновления; если состояние долго не меняется, обратитесь к администратору установки;ImageBuildFailed— проверьте имена и версии пакетов, доступность репозиториев и совместимость зависимостей с версией Apache Airflow™ изspec.version.
Исправьте spec.dependencies или используемый Secret. Если причина неясна из message, передайте это сообщение администратору установки.
При ImagePullBackOff в событиях пода также обратитесь к администратору установки.
Не публикуется веб-интерфейс
Проверьте spec.publicAccess и состояние кластера. При spec.publicAccess: false используйте внутренний доступ или измените настройку.
При spec.publicAccess: true дождитесь состояния Ready и получите адрес из status.apiServerURL по инструкции Открыть веб-интерфейс. Если адрес не появляется или недоступен, передайте администратору установки имя кластера, пространство имен и сообщение об ошибке.
Удаление не завершается
Удаление кластера включает удаление его данных и автоматически созданных бакетов и может занять время. Если состояние Deleting долго не меняется, передайте администратору установки результат команды kubectl describe airflowcluster <имя_кластера> -n <пространство_имен>.
Не отключайте компонент Managed Service for Apache Airflow™ до завершения удаления всех кластеров.