Amazon Web Services ブログ

Amazon ECS でのデーモンサービスの改善

この記事は、Improving daemon services in Amazon ECS を翻訳したものです。

Amazon EC2 を Amazon Elastic Container Service (Amazon ECS) クラスターのコンピュートキャパシティに使用する場合、お客様がよく行うパターンはタスクの単一インスタンスをクラスター内のすべてのノードまたは一部のノードでスケジュールすることです。このタスクには Fluentd や DataDog エージェントなどのログやメトリクスの収集を処理するタスク、ノード監視、セキュリティエージェント、またはカスタムの自社サービスが含まれます。ユースケースに関わらず、自分たちだけでこれを実現するのは難しいため、手間のかかる作業をスケジューラに頼っています。この要件をサポートするために、Amazon ECS には、サービスを定義するときにデーモンの配置戦略を使用してタスクをスケジュールする機能が含まれています。デーモンの配置戦略は、クラスターで指定されたタスク配置制約をすべてを満たすアクティブなコンテナインスタンスごとに 1 つのタスクを配置します。またサービススケジューラは実行中のタスクのタスク配置制約を評価し、配置制約を満たさないタスクを停止します。この配置戦略を使用する場合、希望するタスク数やタスク配置戦略を指定したり、サービスの Auto Scaling ポリシーを使用したりする必要はありません。デーモンのスケジューリングの詳細については、Amazon ECS のドキュメントを参照してください。

Amazon ECS を使用する多くの利点の 1 つは、クラスターレベルのアップグレードを実行することなくコントロールプレーンの機能のアップデートや強化を利用できることです。クラスターのアップグレードを計画することなく、最新の機能を利用できるというのは、お客様がよく言われる価値の 1 つです。このような背景から、過去数ヶ月の間に ECS がデーモンサービスを処理する方法や、スケジューリング時に優先順位をつける方法についていくつかの改善を行いました。このブログでは最適化された機能の一部をご紹介します

デーモンタスクの起動の改善

ECS クラスターで EC2 起動タイプを使用する場合の一般的なシナリオは、スケールアウトやスケジューラが新しいホストにデーモンタスクを配置する方法に関するものです。このシナリオでは、スケジューラはレプリカとデーモンの両方をスケジュールするために競合しており、レプリカサービスの実行数や要求される数によってはデーモンがホストに配置されない可能性があります。お客様からのご意見を受けて、スケジューラがデーモンタスクを処理する方法をいくつか改善しました。

最もインパクトのある改善点は、スケジューラのレプリカタスクに対するデーモンタスクの起動頻度に関するものです。最近、私たちはデーモンタスクのスケジュール間隔をレプリカタスクに比べて短くするという変更を行いました。この変更により、スケールアウトイベント時のデーモンサービスの応答性が向上しスケジュールされる確率が高くなりました。インターナルのテストでは、インスタンスの起動からデーモンタスクの配置までの間隔が 7.6 秒の場合、96 % の成功率でデーモンタスクのスケジューリングが成功しました。これはデーモンサービスを向上させるための小さな一歩に過ぎませんが、より信頼性の高い体験を提供します。

タスクのドレイン

前述の通り、需要の増減に応じて ECS クラスターへ EC2 インスタンスが登録または登録解除されることが予想されます。オートスケーリングのイベント、AMI のアップデート、OS パッチの適用など、これらのスケーリングアクティビティには様々な理由がありますが、インスタンスをリサイクルしたいときにはインスタンスを DRAINING ステータスにするのが良い方法です。これにはいくつかの理由があります

1) スケジューラは EC2 インスタンスが DRAINING ステータスの場合、新しいタスクをスケジュールしません。

2) スケジューラはこれらのタスクを停止し、コンテナ内で中断をハンドリングしてコンテナが正常に終了したかを確認します。

先に述べたように、デーモンサービスの一般的なユースケースは、ホスト上で実行されているタスクから集中的に依存されるような役割(例えば、ログの集約やメトリクスの収集など)です。デーモンタスクが他の非デーモンタスクよりも先に強制終了された場合、デーモンタスクに依存する非デーモンタスクはデーモンタスクと通信することができなくなります。これはスケジューラがデーモンかレプリカに関係なくタスクを強制終了してしまうという、お客様から寄せられた問題でした。2020 年 11月、ECS のスケジューラに、デーモンタスクをホスト上で最後にドレインするアップデートを追加しました。これによりインスタンスが DRAINING ステータスになると、ECS はデーモンタスクを終了する前に他のすべてのタスクを終了します。

まとめ

私たちは ECS の機能と強化を継続的に繰り返しています。機能の注目度は様々ですが、サービスの利用者は ECS クラスターのコントロールプレーンのアップグレードを行うことなく、これらの機能や拡張機能を利用することができます。デーモンサービスの機能強化は過去数ヶ月に渡って展開されており、今後も継続して改善していきます。つまり、これらの機能改善をアップデートを意識せずに利用している可能性があるということです。最終的には、お客様がビジネスの重要性にもっと集中できるようにし、お客様の時間を奪うような定型作業をさらに減らすことができるようにします。

翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。