達成したいこと:
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
を実行できると思いますが、これは最も洗練されたソリューションとは思えません。
何かご意見は?どのように対処しますか?
Airflowには Kubernetes Executor と Kubernetes Operator の両方があります。
Kubernetesオペレーターを使用して、Airflowから任意のAirflowExecutorを介してタスクを(Dockerイメージの形式で)Kubernetesに送信できます。
ただし、説明に基づいて、Kubernetesクラスターに対してすべてのタスクをスケジュールするKubernetesExecutorを探していると思います。ソースコードからわかるように、Kubernetesとの統合ははるかに緊密です。
これにより、Kubernetesオペレーターで必要とされるように、事前にDockerイメージを作成することを心配する必要がなくなります。