티스토리 뷰

개발/Apache Airflow

EKS 위에 Airflow 구성

Jaeyeon Baek 2022. 5. 23. 22:15

EKS 생성은 모두 끝났다고 가정하고 진행합니다. 이 글은 Kubernetes를 설명하는 글이 아니므로 namespace, pod, kubectl, helm 등 K8S와 함께 등장하는 용어에 대한 깊이 있는 설명은 하지 않습니다. 


 

로컬 PC에서 aws 명령어를 통해 EKS 컨텍스트를 추가합니다. 무슨 의미인지 해석하실 필요 없습니다. 쉽게 생각해서 로컬에서 kubectl 명령을 사용할 때 바라보게 되는 곳이 AWS EKS라고 생각하시면 됩니다[1].  --name 뒤에 transformer-dev는 각자의 설정에 맞게 변경해주시기 바랍니다. transformer-dev는 이 글이 작성될 때 기준으로 테스트한 EKS 클러스터 이름입니다. 

$ aws eks --region ap-northeast-2 update-kubeconfig --name transformer-dev --profile default
Added new context arn:aws:eks:ap-northeast-2:XXXXXXXXXXXX:cluster/transformer-dev to /Users/jybaek/.kube/config

 

EKS 클러스터를 잘 바라보고 있는지 cluster-info를 확인해봅시다

$ kubectl cluster-info
Kubernetes control plane is running at https://XXXXXXXXXX474D20C5953489D83.yl4.ap-northeast-2.eks.amazonaws.com
CoreDNS is running at https://XXXXXXXXXX474D20C5953489D83.yl4.ap-northeast-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

 

Kubernetes 클러스터는 namespace라고 하는 논리적 공간을 필요로 합니다. 이 공간의 이름을 transformer로 만들어줍시다.

$ kubectl create namespace transformer


잘 추가되었는지 확인해볼까요? 아래 명령어로 확인해보면 가장 밑에 방금 추가한 transformer가 확인됩니다. 나머지 것들은 추가한 적이 없죠? 클러스터를 생성하면 Kubernetes를 관리하기 위해 기본적으로 생성되는 namespace입니다. 신경 쓰지 않으셔도 됩니다.

$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   2d6h
kube-node-lease   Active   2d6h
kube-public       Active   2d6h
kube-system       Active   2d6h
transformer       Active   2d2h

 

이제 준비가 끝났으니 airflow를 올려보도록 하겠습니다. 여기서는 apache airflow에서 관리하는 헬름 차트를 통해 설치하는 방식을 사용합니다. 헬름은 Kubernetes의 패키지 관리자입니다. 차트라고 하는 명세서를 통해 설치하게 됩니다. 먼저 airflow 레포를 등록해줍니다.

$ helm repo add apache-airflow https://airflow.apache.org

 

다음으로 설치를 진행해줍니다.

$ helm upgrade --install airflow apache-airflow/airflow --namespace transformer --create-namespace
Release "airflow" does not exist. Installing it now.
NAME: airflow
LAST DEPLOYED: Thu May 12 21:00:58 2022
NAMESPACE: transformer
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing Apache Airflow 2.2.4!

Your release is named airflow.
You can now access your dashboard(s) by executing the following command(s) and visiting the corresponding port at localhost in your browser:

Airflow Webserver:     kubectl port-forward svc/airflow-webserver 8080:8080 --namespace transformer
Flower dashboard:      kubectl port-forward svc/airflow-flower 5555:5555 --namespace transformer
Default Webserver (Airflow UI) Login credentials:
    username: admin
    password: admin
Default Postgres connection credentials:
    username: postgres
    password: postgres
    port: 5432

You can get Fernet Key value by running the following:

    echo Fernet Key: $(kubectl get secret --namespace transformer airflow-fernet-key -o jsonpath="{.data.fernet-key}" | base64 --decode)

###########################################################
#  WARNING: You should set a static webserver secret key  #
###########################################################

You are using a dynamically generated webserver secret key, which can lead to
unnecessary restarts of your Airflow components.

Information on how to set a static webserver secret key can be found here:
https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#webserver-secret-key

 

자, 끝났습니다. pod가 정상적으로 올라왔는지 확인해봅시다.

$ kubectl get pods --namespace transformer
NAME                                 READY   STATUS    RESTARTS   AGE
airflow-flower-6695746489-g92wr      1/1     Running   0          20m
airflow-postgresql-0                 1/1     Running   0          20m
airflow-redis-0                      1/1     Running   0          20m
airflow-scheduler-7597fd78d9-29hnj   2/2     Running   0          20m
airflow-statsd-5bcb9dd76-zq6m9       1/1     Running   0          20m
airflow-triggerer-697f8bcf44-h74lw   1/1     Running   0          20m
airflow-webserver-6b59698f6b-pv54q   1/1     Running   0          20m
airflow-worker-0                     2/2     Running   0          20m


airflow가 잘 설치가 되었는지 webserver 접속을 통해 확인하게 되는데요. 중간에 메시지를 확인해보면 포트 포워딩으로 EKS 안에 있는 airflow webserver로 접속이 가능한 걸 알 수 있습니다.

$ kubectl port-forward svc/airflow-webserver 8080:8080 --namespace transformer
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080


브라우저를 열고 localhost:8080으로 접속해봅니다.

계정은 admin, 패스워드도 admin

 

Username과 Password는 위에서 헬름 차트를 통해 설치될 때 출력된 것처럼 admin을 사용하시면 됩니다.

접속 성공!



서버 접속에 성공했습니다. 여기까지가 기본코스입니다. 현재 airflow에서 사용되는 Executor는 CeleryExecutor입니다. 다음 글에서는 Executor를 KubernetesExecutor로 변경하는 과정을 살펴보도록 하겠습니다.

 


[1] : 좀 더 깊게 들어가면 관리 가능한 context는 계속 추가될 수 있으며 kubectl이 바라볼 context를 선택해서 사용할 수 있습니다.

 

'개발 > Apache Airflow' 카테고리의 다른 글

EKS Airflow에 git-sync 적용  (0) 2022.05.23
KubernetesExecutor 적용  (0) 2022.05.23
airflow 파라미터 튜닝  (6) 2021.07.05
docker-compose로 Airflow 한방에 설치하기  (1) 2021.06.21
Hello, Apache Airflow  (4) 2021.06.16
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday