Airflow On K8s (Kubernetes) - 외부 DB를 Airflow Metadata DB로 설정하기

bradley·2023년 2월 15일
2

Airflow

목록 보기
15/16
post-thumbnail

Airflow의 Default Helm Chart는 Metadata DB로 Container에서 동작하는 Postgre DB를 사용한다.
하지만 실무에서는 AWS RDS 같은 DB를 사용한다.
따라서 Airflow Metadata DB를 외부 DB로 설정하는 방법을 알아본다.

Helm Chart 내려받기


우선 Chart 설정 정보를 파일로 저장한다.
helm show values apache-airflow/airflow > values.yaml

Default DB 비활성화


Chart에서 우선 Default Postgres Container를 비활성화시킨다.


외부 DB에 대한 Credential을 저장한 K8s Secret 만들기


이제 외부 DB를 연결하기 위해 DB 연결정보를 담은 Secret을 만들어야 한다.
두 가지 방법이 있다.

  • values.yaml에 연결정보 직접 입력
  • K8s Secret 만들어서 매핑

values.yaml에 연결정보 직접 입력

연결정보 입력

values.yaml 파일의 data.metadataConnection에 외부 DB 연결정보를 입력한다.
이렇게 하면 Chart가 간단하게 K8s Secret을 만들어준다.

고급 옵션이 필요한 경우 secret을 만들어 매핑하는 방법을 사용하면 될 듯

values.yaml

Helm Chart를 배포해보면(배포 방법은 아래에) 다음과 같이 airflow-airflow-metadata secret이 생성된 걸 볼 수 있다.

Secret 조회

secret을 YAML 포맷으로 조회해보자.
kubectl get secret airflow-airflow-metadata -n airflow -o yaml

base64 인코딩된 연결정보를 디코딩해보자.

echo <base64_encoded_connection_string> | base64 --decode

<protocol>://<user>:<password>@<host>:<port>/<db> 형태의 Connection String이 Base64 인코딩된 채로 K8s Secret이 생성되었다는 것을 알 수 있다.

DB 조회

DB에도 Airflow Metadata Table들이 생성된 것을 볼 수 있다.


K8s Secret 만들어서 매핑

YAML 파일에 정의 후 Cluster에 적용시켜주거나, 아래 Command로 Credential을 저장한 Secret을 생성해준다.
kubectl create secret generic <secret name> --from-literal=connection='<protocol>://<user>:<password>@<host>:<port>/<db>' -n airflow

values.yaml에 생성한 Secret을 설정한다.


Helm Chart 배포


위와 같이 K8s Secret이 만들어졌다면 Helm Chart를 배포한다.

helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml --debug




참고
https://airflow.apache.org/docs/helm-chart/stable/production-guide.html

profile
데이터 엔지니어링에 관심이 많은 홀로 삽질하는 느림보

0개의 댓글