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 주소를 사용함으로써 로그 접근 문제를 해결합니다.