LoginSignup
3
0

More than 1 year has passed since last update.

OKE + Airflow ことはじめ

Last updated at Posted at 2022-12-22

2022年11月2日 Oracle Cloud Hangout Cafe Season6 #3 「ワークフローツールで楽々Job管理」 で実施したデモをベースに Oracle Container Engine for Kubernetes (OKE) + Airflow の環境構築から公式チュートリアルを実行しながら、 Airflow の最初の一歩を踏み出してみましょう。

以下、スライド資料と公開動画を合わせてご利用頂くとより理解が深まると思います。

What is Airflow ?

Airflow は、オープンソースのワークフロー管理プラットフォームです。2014年に Airbnb 社が開発した OSS であり、2016年から Apache Software Foundation のプロジェクトになりました。Python と DAG ベースにワークフローを表現できることが特徴です。

Airflow

DEMO Environment

以下の環境を構築して、実施します。

  • Kubernetes Cluster : Oracle Container Engine for Kubernetes
  • Node Shape (3 Nodes) : VM.Standard.E3.Flex
  • Airflow : v2.4.1

OKE Set Up

OKE のプロビジョニングについては、以下チュートリアルを参考にしてください。

Oracle Container Engine for Kubernetes(OKE)をプロビジョニングしよう

Airflow Set Up

1.Airflow Install

Airflow は、PyPi, Docker, Helm を利用してインストールできます。ここでは、Helm を利用します。

事前に Helm クライアントをインストールが必要となります。

Oracle Cloud Infrastructure(OCI) の場合は、Cloud Shell を利用することで Helm クライアントのインストールは不要です。

helm repo add apache-airflow https://airflow.apache.org
helm repo update
helm install airflow apache-airflow/airflow --create-namespace --namespace airflow
NAME: airflow
LAST DEPLOYED: Sun Oct 16 13:30:17 2022
NAMESPACE: airflow
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing Apache Airflow 2.4.1!

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 airflow
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 airflow 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

7個の Pod が Running であることを確認します。

kubectl get pods -n airflow
NAME                                 READY   STATUS    RESTARTS   AGE
airflow-postgresql-0                 1/1     Running   0          2m46s
airflow-redis-0                      1/1     Running   0          2m46s
airflow-scheduler-5754fc7746-cdkvb   2/2     Running   0          2m47s
airflow-statsd-5b4964646f-nqqzc      1/1     Running   0          2m47s
airflow-triggerer-7795dfffcb-ln22d   1/1     Running   0          2m47s
airflow-webserver-7bf76fd7fc-qccj5   1/1     Running   0          2m47s
airflow-worker-0                     2/2     Running   0          2m46s

2.Airflow UI Access

Service としてインストールされる argo-workflow-service の type を LoadBalancer に変更して、ブラウザからアクセスできるようにします。

kubectl edit service/airflow-webserver -n airflow
・
・ <省略>
・
  selector:
    component: webserver
    release: airflow
    tier: airflow
  sessionAffinity: None
  type: ClusterIP # type: LoadBalancer に変更
・
・ <省略>
・

EXTERNAL-IP を確認

kubectl get service airflow-webserver -n airflow
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE
airflow-webserver   LoadBalancer   10.96.110.188   144.xxx.xxx.xxx   8080:31703/TCP   4h5m

ブラウザを起動して、UI にアクセスします。

34.png

Default Username : admin
Default Password : admin

ログイン完了です。

35.png

3.サンプルワークフローのロード設定

チュートリアルを含めた、サンプルワークフローを読み込むことができるので有効化します。

values.yaml ファイルを書き出して、編集します。

helm show values apache-airflow/airflow > values.yaml

extraEnv の箇所を以下内容に変更します。

vim values.yaml
・
・ <省略>
・
extraEnv: |
 - name: AIRFLOW__CORE__LOAD_EXAMPLES
  value: 'True'
・
・ <省略>
・

変更した values.yaml を適用します。

helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml
Release "airflow" has been upgraded. Happy Helming!
NAME: airflow
LAST DEPLOYED: Mon Oct 17 06:00:39 2022
NAMESPACE: airflow
STATUS: deployed
REVISION: 3
TEST SUITE: None
NOTES:
Thank you for installing Apache Airflow 2.4.1!

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 airflow
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 airflow 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

ステータスを確認します。

 helm ls -n airflow
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
airflow airflow         3               2022-10-17 06:00:39.789334761 +0000 UTC deployed        airflow-1.7.0   2.4.1 

以下のようにサンプルワークフローがリスト表示されます。

36.png

Airflow Demo

読み込んだサンプルワークフローの tutorial ワークフローを実施します。

print_date タスクは、Airflow の BashOperator から date コマンドを実行、sleep タスクは5秒間 sleep 、templated は、Airflow の jinja テンプレートコードを実行するタスクです。

37.png

サンプルワークフロー tutrial を有効化して、テキストリンクをクリックします。

38.png

画面右上部にある実行ボタンをクリックして、Trigger Dag を選択します。

39.png

40.png

各タスクの緑四角をクリックすると右側に詳細情報が表示されます。
Logs クリックします。

41.png

print_date タスクの date コマンド実行結果を確認できます。

42.png

sleep タスクの結果は以下となります。

43.png

templated タスクの結果は以下となります。

44.png

上部メニューの Code ボタンをクリックして、tutorial ワークフローのソースコードが表示されるので、templated タスクの jinja テンプレートコードを確認してみます。

45.png

実装内容は以下となります。

46.png

実行ログと照らし合わせてみます。

47.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0