Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
이 페이지에서는 KubernetesExecutor에서 실행하는 태스크 관련 문제를 해결하는 방법을 설명하고 일반적인 문제에 대한 솔루션을 제공합니다.
KubernetesExecutor 문제 해결을 위한 일반적인 접근 방식
KubernetesExecutor로 실행된 태스크 관련 문제를 해결하려면 다음 작업을 나열된 순서대로 실행합니다.
DAG UI 또는 Airflow UI에서 작업 로그를 확인합니다.
Google Cloud 콘솔에서 스케줄러 로그를 확인합니다.
Google Cloud 콘솔에서 환경 페이지로 이동합니다.
환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.
로그 탭으로 이동하여 Airflow 로그 > 스케줄러 섹션을 확인합니다.
지정된 기간 동안 태스크를 실행 중이었던 KubernetesExecutor 작업자 포드를 검사합니다. 포드가 더 이상 존재하지 않으면 이 단계를 건너뜁니다. 포드 이름에
airflow-k8s-worker
프리픽스와 DAG 또는 태스크 이름이 있습니다. 실패한 태스크 또는 예약할 수 없는 태스크와 같이 신고된 문제가 있는지 확인합니다.
KubernetesExecutor의 일반적인 문제 해결 시나리오
이 섹션에는 KubernetesExecutor에서 발생할 수 있는 일반적인 문제 해결 시나리오가 나와 있습니다.
태스크가 Running
상태가 된 후 실행 중에 실패합니다.
증상
- Airflow UI 및 작업자 섹션의 로그 탭에 태스크 로그가 있습니다.
솔루션: 태스크 로그에 문제가 표시됩니다.
태스크 인스턴스가 queued
상태가 된 후 일정 시간이 지나면 UP_FOR_RETRY
또는 FAILED
로 표시됩니다.
증상
- Airflow UI 및 작업자 섹션의 로그 탭에 태스크 로그가 없습니다.
- 스케줄러 섹션의 로그 탭에 태스크가
UP_FOR_RETRY
또는FAILED
로 표시되었다는 메시지가 포함된 로그가 있습니다.
솔루션:
- 스케줄러 로그에서 문제의 세부정보를 검사합니다.
가능한 원인:
- 스케줄러 로그에
Adopted tasks were still pending after...
메시지가 포함되고 태스크 인스턴스가 출력된 경우 CeleryKubernetesExecutor가 사용자 환경에서 사용 설정되어 있는지 확인합니다.
태스크 인스턴스가 Queued
상태가 되고 즉시 UP_FOR_RETRY
또는 FAILED
로 표시됩니다.
증상
- Airflow UI 및 작업자 섹션의 로그 탭에 태스크 로그가 없습니다.
- 스케줄러 섹션의 로그 탭에 있는 스케줄러 로그에
Pod creation failed with reason ... Failing task
메시지와 태스크가UP_FOR_RETRY
또는FAILED
로 표시된 메시지가 있습니다.
솔루션:
- 스케줄러 로그에서 정확한 응답과 실패 이유를 확인합니다.
원인
오류 메시지가 quantities must match the regular expression ...
인 경우 태스크 작업자 포드의 k8s 리소스(요청/한도)에 설정된 커스텀 값이 원인일 가능성이 높습니다.
많은 수의 태스크가 실행될 때 KubernetesExecutor 태스크가 로그 없이 실패함
환경에서 KubernetesExecutor 또는 KubernetesPodOperator를 사용하여 동시에 많은 태스크를 실행하는 경우 Cloud Composer 3는 일부 기존 태스크가 완료될 때까지 새 태스크를 수락하지 않습니다. 추가 태스크는 실패로 표시되며, 태스크의 재시도를 정의하는 경우 나중에 Airflow에서 재시도합니다 (Airflow는 기본적으로 이 작업을 실행함).
증상: KubernetesExecutor 또는 KubernetesPodOperator로 실행된 태스크가 Airflow UI 또는 DAG UI의 태스크 로그 없이 실패합니다. 스케줄러 로그에 다음과 유사한 오류 메시지가 표시될 수 있습니다.
pods \"airflow-k8s-worker-*\" is forbidden: exceeded quota: k8s-resources-quota,
requested: pods=1, used: pods=*, limited: pods=*","reason":"Forbidden"
가능한 해결 방법:
- 시간 경과에 따라 태스크가 더 균등하게 분산되도록 DAG 실행 일정을 조정합니다.
- 작은 작업을 통합하여 작업 수를 줄입니다.
해결 방법:
환경에서 태스크를 실행할 수 있을 때까지 태스크가 예약된 상태로 유지되도록 하려면 Airflow UI에서 제한된 수의 슬롯으로 Airflow 풀을 정의한 다음 모든 컨테이너 기반 태스크를 이 풀과 연결하면 됩니다. 풀의 슬롯 수를 50개 이하로 설정하는 것이 좋습니다. 추가 태스크는 Airflow 풀에 실행할 여유 슬롯이 생길 때까지 예약된 상태로 유지됩니다. 가능한 해결 방법을 적용하지 않고 이 해결 방법을 사용하면 Airflow 풀에 여전히 많은 태스크 대기열이 표시될 수 있습니다.