DUICUO

Kubernetes 上で分散スケジューリングタスク Airflow をデプロイする

[[437218]]

I. 展開要件

Apache Airflow は次のテストに合格しました。

注: MySQL バージョン 5.x では複数のスケジューラを実行できないか、実行に制限があります。スケジューラのドキュメントを参照してください。MariaDB はテストおよび推奨されていません。

注: SQLite は Airflow のテスト専用です。本番環境では使用しないでください。ローカル開発には、最新の安定版 SQLite を使用することをお勧めします。

PS: この記事では、Airflow 安定バージョン 2.1.4、Kubernetes バージョン 1.20.x、PostgreSQL バージョン 12.x、および Helm Charts を使用してデプロイメントを行っています。

II. Helmチャート構成の生成

PS: Helm バージョン 3 を使用してデプロイされました。

  1. # Kubernetes Airflow 名前空間を作成する
  2. $ kubectl名前空間エアフローを作成する
  3.  
  4. # Airflow Chartsリポジトリソースを追加する
  5. $ helm リポジトリにapache-airflowを追加しますhttps://airflow.apache.org
  6.  
  7. # aiarflow ソースを更新
  8. $ helm リポジトリの更新 
  9.  
  10. # Airflow Charts のすべてのバージョンを表示します (ここでは、Charts 1.2.0 (Airflow 2.1.4) をデプロイすることを選択します)
  11. $ helm リポジトリを検索 apache-airflow/airflow -l
  12.  
  13. 名前チャートバージョン アプリバージョン 説明
  14. apache-airflow/airflow 1.3.0 2.2.1 Apache Airflow をデプロイするための公式 Helm チャート...
  15. apache-airflow/airflow 1.2.0 2.1.4 Apache Airflow をデプロイするための公式 Helm チャート...
  16. apache-airflow/airflow 1.1.0 2.1.2 Apache Airflow をデプロイするための公式 Helm チャート...
  17. apache-airflow/airflow 1.0.0 2.0.2プラットフォームである Apache Airflow をデプロイするためのHelm チャート...
  18.  
  19. # エアフローチャート値の.yamlファイルをエクスポートします
  20. $ helm show values ​​apache-airflow/airflow --version 1.2.0 > airflow_1.2.4_values.yaml  

III. エアフロー構成の変更

3.1 永続ストレージのStorageClassを構成する

PS: Alibaba Cloud NAS高速ストレージの使用

  1. # StorageClassファイルを編集する
  2. $ vim alicloud-nas-airflow-test.yaml
  3.  
  4. APIバージョン: storage.k8s.io/v1
  5. 種類: ストレージクラス
  6. メタデータ:
  7. 名前: alicloud-nas-airflow-test
  8. マウントオプション:
  9. - nolock、tcp、noresvport
  10. - ヴァース=3
  11. パラメータ:
  12. volumeAs: サブパス
  13. サーバー: "xxxxx.cn-beijing.extreme.nas.aliyuncs.com:/share/airflow/"  
  14. プロビジョナー: nasplugin.csi.alibabacloud.com
  15. 回収ポリシー: 保持
  16.  
  17. # Kubernetesに適用する
  18. $ kubectl apply -f alicloud-nas-airflow-test.yaml

3.2 Airflow DagsストレージリポジトリgitSshKeyを構成する

  1. airflow-ssh-secret.yaml ファイルを編集するには、まず SSH 公開キーを git プロジェクト リポジトリに追加する必要があります。
  2. $ vim エアフロー-ssh-シークレット.yaml
  3.  
  4. apiバージョン: v1
  5. 種類: 秘密
  6. メタデータ:
  7. 名前: airflow-ssh-secret
  8. 名前空間: エアフロー
  9. データ:
  10. #キーはgitSshKeyである必要があります
  11. gitSshKey: "SSH秘密鍵、base64"  
  12.  
  13. # Kubernetesに適用する
  14. $ kubectl apply -f エアフロー-ssh-secret.yaml

3.3 Docker 12 を使用した PostgreSQL のデプロイ

  1. # PostgreSQLストレージディレクトリを作成する
  2. $ mkdir /data/postgresql_data
  3.  
  4. # 起動ファイルを作成する
  5. $ vim docker-compose.yaml
  6.  
  7. バージョン: "3"  
  8.  
  9. サービス:
  10. エアフロー-postgres:
  11. 画像: postgres:12
  12. 再起動: 常に
  13. コンテナ名: airflow-postgres
  14. 環境:
  15. TZ: アジア/上海
  16. POSTGRES_USER: エアフロー
  17. POSTGRES_パスワード: Airflow123
  18. ボリューム:
  19. -/data/postgresql_data:/var/lib/postgresql/data
  20. ポート:
  21. - 「5432:5432」  
  22.  
  23. # PostgreSQL Dockerを起動する
  24. $ docker-compose up -d

3.4 airflow_1.2.4_values.yaml設定を変更する

PS: この記事の airflow_1.2.4_values.yaml 構成ファイルには、Redis、ワーカー (デプロイする必要があるワーカーは 1 つだけですが、複数のワーカーをデプロイできます)、および dags の 3 つの PVC が必要です。

設定ファイルは長すぎるため、ここでは表示できません。詳細については、以下のリンクを参照してください。

https://github.com/yangpeng14/DevOps/blob/master/config_dir/airflow_1.2.4_values.yaml

IV. Airflowの展開

  1. # Airflowの最初の展開
  2. $ helm インストール airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml  
  3.  
  4. # 将来 Airflow 設定を変更するには、次のコマンドを使用してください。
  5. $ helm アップグレード--install airflow apache-airflow/airflow --namespace airflow --version 1.2.0 -f airflow_1.2.4_values.yaml  

V. Airflow Ingress Nginx アクセス ポイントを構成する

  1. # Ingress nginx 設定ファイルを生成する
  2. $ vim エアフローイングレス.yaml
  3.  
  4. apiバージョン: networking.k8s.io/v1
  5. 種類: イングレス
  6. メタデータ:
  7. 名前:エアフロー
  8. 名前空間: エアフロー
  9. 注釈:
  10. kubernetes.io/ingress.class: nginx
  11. nginx.ingress.kubernetes.io/ssl-redirect: "false"  
  12. nginx.ingress.kubernetes.io/proxy-connect-timeout : "60 "  
  13. nginx.ingress.kubernetes.io/proxy-read-timeout : "60 "  
  14. nginx.ingress.kubernetes.io/プロキシ送信タイムアウト: "60"  
  15. 仕様:
  16. ルール:
  17. - ホスト: "airflow.example.com"  
  18. http:
  19. パス:
  20. - パス:​​ /
  21. パスタイプ: プレフィックス
  22. バックエンド:
  23. サービス:
  24. 名前: airflow-webserver
  25. ポート:
  26. 番号: 8080
  27.  
  28. # Kubernetesに適用する
  29. $ kubectl apply -f エアフローイングレス.yaml

VI. 参考リンク

1. https://github.com/apache/airflow/tree/2.1.4

2. https://airflow.apache.org/docs/helm-chart/1.2.0/index.html

関連するおすすめ記事