Search

Airflow worker node dns resolution 문제 (Airflow Worker 로그 접근 문제 해결방법)

Airflow worker node dns resolution 문제 (Airflow Worker 로그 접근 문제 해결방법)

현재 적용 중이던 옵션

CeleryKubernetes Executor
EKS

당면한 에러

에러 유형: DNS 해석 실패 및 연결 오류
Name Resolution Error (이름 해석 실패)
Connection Error (연결 실패)
Max Retries Exceeded (최대 재시도 초과)로 인한 웹서버 재시작
발생 원인:
Airflow 웹서버가 워커 노드의 로그 파일에 접근하려고 시도
워커 파드의 호스트네임을 DNS로 해석하지 못함
포트 8793으로의 연결 시도 실패
문제의 배경:
Kubernetes 환경에서 실행 중인 Airflow
워커와 웹서버 간의 네트워크 통신 문제
DNS 해석이나 네트워크 연결성 문제 발생
socket.gaierror: [Errno -2] Name or service not known [이전 트레이스백 생략...] urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPConnection object at 0x****>: Failed to resolve 'airflow-worker-****' urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='airflow-worker-****', port=8793): Max retries exceeded requests.exceptions.ConnectionError: HTTPConnectionPool(host='airflow-worker-****', port=8793): Max retries exceeded *.*.*.* - - [14/Dec/2024:10:10:58 +0000] "GET /api/v1/dags/*****/dagRuns/manual__2024-12-14T10:06:1 [2024-12-14 10:10:58 +0000] [36] [INFO] Parent changed, shutting down: <Worker 36> [2024-12-14 10:10:58 +0000] [36] [INFO] Worker exiting (pid: 36)
Shell
복사
기타 적용해본 옵션들
- name: "AIRFLOW__LOGGING__WORKER_LOG_SERVER_PORT" value: "8793" - name: "AIRFLOW__LOGGING__TRIGGER_LOG_SERVER_PORT" value: "8794" - name: "AIRFLOW__LOGGING__BASE_LOG_FOLDER" value: "/opt/airflow/logs"
Shell
복사
에러에 관해서 찾아보던 중, 아래와 정확하게 동일한 이슈임을 발견하였습니다.

문제 해결책

Worker 파드의 deployment.yaml에 환경변수 AIRFLOW__CORE__HOSTNAME_CALLABLE를 설정해야 합니다.

hostname_callable이란?

호스트명을 확인할 수 있는 callable 경로를 제공하여 호스트명을 해석합니다
형식: "package.function"
기본값: airflow.utils.net.getfqdn
함수에는 별도의 인자가 필요하지 않아야 합니다
IP 주소를 호스트명으로 사용하려면 airflow.utils.net.get_host_ip_address 값을 사용

구성 정보

타입: string
기본값: airflow.utils.net.getfqdn
환경변수명: AIRFLOW__CORE__HOSTNAME_CALLABLE

적용 방법

helm의 values.yaml 역활을 담당하는 deployment.yaml에 아래 환경변수를 추가 후, 전체 에어플로우 클러스터 재배포 시도
env: - name: AIRFLOW__CORE__HOSTNAME_CALLABLE value: 'airflow.utils.net:get_host_ip_address'
YAML
복사

동작 원리

이 설정을 통해 Airflow는 파드의 IP를 사용하여 로그에 접근을 시도합니다
파드가 포트 8793을 노출하고 있다면 정상적으로 작동합니다
Airflow 2.10.2에서 발생하는 Could not read served logs: [Errno -2] Name or service not known 오류도 해결됩니다
DNS 해석 오류를 우회하여 직접 IP 주소를 사용함으로써 로그 접근 문제를 해결합니다.

참고