投稿日: May 7, 2021
本日より、Amazon EKS の Amazon EMR でポッドテンプレートのサポートを開始し、共有 EKS クラスターで Spark ジョブを簡単に実行できるようにします。ポッドとは、共有ストレージとネットワークリソース、およびコンテナの実行方法の仕様を備えた 1 つ以上のコンテナのグループです。ポッドテンプレートは、各ポッドの実行方法を決定する仕様です。多くの場合、お客様は共有 EKS クラスターで複数のアプリケーションを統合して、使用率を向上させ、コストを節約しています。ただし、それぞれのアプリケーションごとに要件が異なる場合があります。例えば、SSD でバックアップされたインスタンスで ML モデルトレーニングジョブなどのパフォーマンスを重視するワークロードを実行したり、スポットインスタンスでアドホックワークロードを実行してコストを削減したりすることがあります。また、別のログコンテナをスケジュールして、ログを既存の監視アプリケーションに転送することもできます。今回のリリースでは、EKS 上の EMR でポッドテンプレートを使用して、共有 EKS クラスターで Spark ジョブを実行する方法を設定することができます。
コストを削減するために、Spark ドライバーポッドを EC2 オンデマンドインスタンスで実行するようにスケジュールし、Spark エグゼキューターポッドを EC2 スポットインスタンスで実行するようにスケジュールすることができます。Kubernetes のお客様は、頻繁に taint、許容範囲、ラベルを使用して、ポッドが適切なワーカーノードにスケジュールされるようにしています。taint は、ノードで実行できるポッドを制限できるようにするワーカーノードのプロパティです。逆に、許容範囲を設定すると、一致する taint に対してポッドをスケジュールできます。ラベルは、ポッドをワーカーに向けるために nodeSelectors で使用されます。今回、ポッドテンプレートを使用して、Spark ドライバーポッドに許容範囲を適用して EC2 オンデマンドインスタンスで実行できるようになりました。また、Spark エグゼキューターポッドに個別の許容範囲を適用して、EC2 スポットインスタンスでのみ実行できるようになりました。
ログを一元化されたログアプリケーションに転送するために、Spark ジョブでサイドカーコンテナをデプロイすることもできます。サイドカーコンテナは、アプリケーションコンテナと同じポッドにデプロイされますが、追加機能を提供します。この場合、ジョブのログを転送します。EKS 上の EMR は、Amazon CloudWatch および Amazon S3 への組み込みのログ転送を備えています。ただし、お客様がログを独自のログレポートアプリケーションに転送する場合は、ログフォワーダーを Daemonsets としてデプロイします。Daemonsets は、kubernetes のワーカーノードで直接実行されます。現在、ポッドテンプレートを使用すると、ジョブごとまたはポッドごとにサイドカーコンテナとしてログ転送をデプロイすることができます。
リソースの使用率を高めるために、同じ EKS クラスターでワークロードを実行している複数のチームをサポートすることができます。多くの場合、各チームは、ワークロードを実行するために指定された EC2 ノードグループを取得します。以前は、ワークロードを適切なノードグループに送信するには、ラベルとアフィニティを使用するのみでした。現在は、チームのノードグループに taint を適用し、ポッドテンプレートを使用して、対応する許容範囲をワークロードに適用できるようになりました。これにより、指定されたチームだけがノードグループにジョブをスケジュールできるようになります。
チームベースのノードグループを実装するには、チームを表すラベルと taint を含むノードグループを作成することから始めます。taint は、ノードで実行できるポッドを制限できるようにするワーカーノードのプロパティです。逆に、許容範囲を設定すると、一致する taint に対してポッドをスケジュールできます。ラベルは、アフィニティを使用して、アプリケーションをチームの指定されたノードグループに転送し、許容範囲によって、taint をスケジュールすることができます。対応する許容範囲とアフィニティを含むポッドテンプレートを作成し、ジョブがアクセスできる S3 バケットに保存します。Spark ドライバーポッドとエグゼキューターポッド用にポッドテンプレートを作成して、さまざまなデプロイメントオプションを提供し、ジョブの送信時にテンプレートの場所を指定することができます。
ポッドテンプレートの機能と使用例の詳細については、ドキュメントを参照してください。EKS での Amazon EMR の詳細については、EKS での Amazon EMR のドキュメントにアクセスするか、EKS での Amazon EMR についてのdeep-dive tech talk をご覧ください。