web-dev-qa-db-ja.com

KubernetesクラスターでApacheAirflowタスクを最適に実行する方法は?

達成したいこと:

Airflowを使用して機械学習とデータパイプラインを管理し、Kubernetesを使用してリソースを管理してジョブをスケジュールしたいと考えています。私たちが達成したいのは、Airflowがワークフローを調整し(例:さまざまなタスクの依存関係。障害時にジョブを再実行する)、Kubernetesがインフラストラクチャを調整する(例:クラスターの自動スケーリングやノードへの個々のジョブの割り当て)ことです。つまり、AirflowはKubernetesクラスターに何をすべきかを指示し、Kubernetesが作業の分散方法を決定します。同時に、Airflowが個々のタスクのステータスを監視できるようにする必要もあります。たとえば、5つのノードのクラスターに10個のタスクが分散している場合、Airflowはクラスターと通信できるはずであり、レポートには次のように表示されます。3つの「小さなタスク」が実行され、1つの「小さなタスク」が失敗し、次のようにスケジュールされます。再実行しても、残りの6つの「大きなタスク」はまだ実行中です。

質問:

AirflowにはKubernetes-Operatorがないことを理解しています。未解決の問題については、 https://issues.Apache.org/jira/browse/AIRFLOW-1314 を参照してください。そうは言っても、Airflowがサービスアカウント、環境変数の管理、クラスターの作成などのリソースを管理するのではなく、既存のKubernetesクラスターにタスクを送信し、ジョブが完了したときにAirflowに通知するだけです。別の方法としてApacheMesosを使用することもできますが、Kubernetesに比べて柔軟性が低く、わかりにくいように見えます。

Airflowのbash_operatorを使用してkubectlを実行できると思いますが、これは最も洗練されたソリューションとは思えません。

何かご意見は?どのように対処しますか?

15
Ricky Lui

Airflowには Kubernetes ExecutorKubernetes Operator の両方があります。

Kubernetesオペレーターを使用して、Airflowから任意のAirflowExecutorを介してタスクを(Dockerイメージの形式で)Kubernetesに送信できます。

ただし、説明に基づいて、Kubernetesクラスターに対してすべてのタスクをスケジュールするKubernetesExecutorを探していると思います。ソースコードからわかるように、Kubernetesとの統合ははるかに緊密です。

これにより、Kubernetesオペレーターで必要とされるように、事前にDockerイメージを作成することを心配する必要がなくなります。

6
andscoop