Enterprise Distributed Application Service (EDAS) は、Elastic Compute Service (ECS) 環境と Kubernetes 環境をサポートしています。どちらの環境でもアプリケーションをホストできます。ただし、ECS と Kubernetes は異なる機能を提供します。ビジネス上の意思決定を行う際、またはワークロードを移行する環境を決定する際に、疑問が生じる場合があります。このトピックでは、ECS 環境と Kubernetes 環境について説明し、比較します。ビジネス要件に基づいて環境を選択できます。
背景情報
EDAS は、ECS 環境と Kubernetes 環境をサポートしています。ECS または Kubernetes クラスターにアプリケーションをデプロイできます。ECS と Kubernetes はどちらも、Spring Cloud、Apache Dubbo、High-Speed Service Framework (HSF) マイクロサービスフレームワークをサポートしています。EDAS を使用すると、上記のフレームワークを使用する Java アプリケーションをホスト、管理、および監視できます。ECS と Kubernetes には、アプリケーションとテクノロジスタックに関して異なる要件があります。EDAS はまた、ECS と Kubernetes に異なるアプリケーション管理機能を提供します。
選択方法
Kubernetes はほとんどのシナリオに適用できます。EDAS は Container Service for Kubernetes (ACK) と統合されており、リソース使用率を高めるのに役立つ幅広いアプリケーション管理機能を提供します。
実際のビジネス要件に基づいて環境を選択することをお勧めします。
| シナリオ | 環境 |
| Kubernetes |
| ECS |
ECS または Kubernetes でサポートされる機能
| 機能 | ECS | Kubernetes | 備考 |
| アプリケーションのデプロイ | Y | Y | Kubernetes は、インスタンスをデプロイするためのより多くの種類のスケジューリングポリシーを提供し、同じインスタンスに複数のアプリケーションをデプロイできます。 |
| アプリケーションの起動 | Y | Y | 該当なし |
| アプリケーションの停止 | Y | Y | 該当なし |
| アプリケーションの削除 | Y | Y | 該当なし |
| アプリケーションのスケーリング | Y | Y | 該当なし |
| アプリケーションのリセット | Y | N | この機能は Kubernetes 環境では必要ありません。アプリケーションをリセットするには、アプリケーションがデプロイされている Kubernetes ポッドを削除します。 |
| コンテナーのアップグレードまたはダウングレード | Y | Y | 該当なし |
| アプリケーションのロールバック | Y | Y | 該当なし |
| 水平スケーリング | Y | Y | ECS と Kubernetes の方法とルールは異なります。 |
| スケジュールされたスケーリング | N | Y | 該当なし |
| バッチデプロイ | Y | Y | 該当なし |
| アプリケーショングループ | Y | N | 該当なし |
| アプリケーショングループの構成 | Y | N | 該当なし |
| リアルタイムログ配信 | Y | Y | 該当なし |
| ログディレクトリ | Y | Y | 該当なし |
| Log Service | Y | Y | 該当なし |
| 負荷分散 | Y | Y | 該当なし |
| ヘルスチェック | Y | Y | Kubernetes は、readiness プローブと liveness プローブを使用してヘルスチェックを実行します。ヘルスチェックのメカニズムは ECS のものとは異なります。 |
| Java 仮想マシン (JVM) パラメーター | Y | Y | 該当なし |
| Tomcat パラメーター | Y | Y | 該当なし |
| ライフサイクルフック | Y | Y | Kubernetes は、PostStart フックと PreStop フックをサポートしています。これらは ECS が提供するものとは異なります。 |
| 環境変数 | Y | Y | 該当なし |
| カナリアリリース | Y | Y | 該当なし |
| トラフィック監視 | Y | Y | 該当なし |
| トラフィック調整 | Y | Y | Kubernetes は、アプリケーションコードを変更することなく、アプリケーションのトラフィック調整を実装します。 |
| サービスリスト | Y | Y | 該当なし |
| 構成プッシュ | Y | Y | 該当なし |
| イベントセンター | Y | Y | 該当なし |
| アラート | Y | Y | 該当なし |
| アプリケーション診断 | Y | Y | Kubernetes は、監視サービスと統合された高度なアプリケーション診断機能を提供します。 |
| リソース購入 | Y | N | 該当なし |
| サービスメッシュ | N | Y | 該当なし |
| イメージからのデプロイ | N | Y | 該当なし |
| さまざまなプログラミング言語で記述されたアプリケーション | N | Y | 該当なし |
| ネットワークアタッチトストレージ (NAS) | N | Y | 該当なし |
FAQ
ECS 環境では、同じインスタンスに複数のアプリケーションをデプロイできますか?
いいえ。ECS では、同じインスタンスに複数のアプリケーションをデプロイすることはできません。同じインスタンスに複数のアプリケーションをデプロイする場合は、Kubernetes 環境を選択してください。
ECS 環境は、さまざまなプログラミング言語で記述されたアプリケーションをサポートしていますか?
いいえ。ECS は、異なるプログラミング言語で記述されたアプリケーションをサポートしていません。異なるプログラミング言語で記述されたアプリケーションをデプロイする場合は、Kubernetes 環境を選択してください。
ECS 環境と Kubernetes 環境は開発者ツールをサポートしていますか?
- Alibaba Cloud Toolkitの詳細については、「Alibaba Cloud Toolkitの概要」をご参照ください。
- toolkit-maven-pluginの詳細については、「toolkit-maven-pluginの概要」をご参照ください。
- Terraformの詳細については、「Terraformの概要」をご参照ください。
- Jenkinsの詳細については、「Jenkinsの概要」をご参照ください。
Kubernetes 環境では、ノードはどのようにスケールアウトされますか?
Kubernetes環境は、Podを自動的にスケールインおよびスケールアウトします。ほとんどの場合、Kubernetesクラスターは新しいノード(ECSインスタンス)を作成したり、既存のノードを解放したりしません。
ACK が提供する機能を使用して、ノードを自動的にスケールインおよびスケールアウトできます。
ECSインスタンスにデプロイされたアプリケーションにスクリプトをマウントしている場合、これらのアプリケーションをKubernetesクラスターに移行するにはどうすればよいですか?
ECS 環境では、アプリケーションにマウントされたスクリプトを使用して、変更オーダーが指定されたステージに入ったときに指定されたコマンドを実行します。 ECS では、インスタンスの作成、アプリケーションの開始、アプリケーションの停止、インスタンスの解放など、アプリケーションのライフサイクルの以下のステージにスクリプトをマウントできます。
- インスタンスの作成時にスクリプトをマウントする場合は、スクリプトを Dockerfile にコンパイルし、Dockerfile からイメージを作成できます。
- アプリケーションを起動する前にスクリプトをマウントする場合は、スクリプトを Dockerfile にコンパイルし、Dockerfile からイメージを作成できます。
Kubernetes ポッドでは、インスタンスの作成とアプリケーションの起動は同じプロセスと見なされます。
- アプリケーションの起動後にスクリプトをマウントするには、PostStart フックとしてマウントします。
- インスタンスを停止する前にスクリプトをマウントするには、PreStop フックとしてマウントします。
- インスタンスの停止後にマウントされたスクリプトを削除できるように、アプリケーションを正常にシャットダウンすることをお勧めします。たとえば、Java アプリケーションに Shutdown フックを追加したり、削除するスクリプトに SIGTERM シグナルを送信したりできます。または、スクリプトを PreStop フックに移動することもできます。
- インスタンスの解放前にマウントされたスクリプトを削除できるように、アプリケーションを正常にシャットダウンすることをお勧めします。たとえば、Java アプリケーションに Shutdown フックを追加したり、削除するスクリプトに SIGTERM シグナルを送信したりできます。または、スクリプトを PreStop フックに移動することもできます。
Kubernetes ポッドでは、インスタンスの停止と解放は同じプロセスと見なされます。