카테고리 없음

[kubectl] Airflow Pod가 재시작되며 db없어지는 이슈 해결기

0hyeon의 2025. 5. 12. 16:26
반응형

Helm + Kubernetes 환경에서 발생한 PostgreSQL emptyDir 문제 및 해결 과정 기록

 

 

❗ 문제 개요

  • Kubernetes 환경에서 Airflow를 Helm으로 배포하는 과정에서 발생한 Pod 무한 재시작(CrashLoopBackOff) 이슈
  • Web, Scheduler Pod가 계속해서 CreateContainerConfigError, Database does not exist 오류 발생
  • 원인은 PostgreSQL StatefulSet이 emptyDir로 구성되어 Pod 재시작 시 DB 초기화가 발생한 것

=> 즉 팟이 쿠버네티스위에서 재시작되는경우, emptyDir 상태로 DB명이 없어짐

 

💻 증상 요약

kubectl get pods

airflow-0hyeon-web-0        0/1  CreateContainerConfigError
airflow-0hyeon-scheduler-0  0/1  Init:0/1

kubectl logs airflow-0hyeon-scheduler-0 -c init-db

FATAL:  database "airflow-0hyeon" does not exist

 

 

  • emptyDir는 ephemeral volume이므로, Pod가 재시작되면 데이터가 전부 날아감
  • PostgreSQL은 DB를 초기화하지만 Airflow는 매번 새 DB에 접속 시도 → 실패 반복 → 팟재시작 -> 실패 반복 (무한실패)

 

 

✅ 해결 전략

1. emptyDir → PersistentVolumeClaim 변경

 

volumes:
  - name: dbvol
    persistentVolumeClaim:
      claimName: nfs-pvc

 

  • 데이터가 Pod 생존과 무관하게 영속화

 

 

이럴경우 nfs-pvc안에 db를 저장해놓는 걸로 해결

반응형