Elastic Container Instance は、Kubernetes クラスターに基本的な Pod ランタイム環境を提供します。サービス間の依存関係、負荷分散、自動スケーリング、定期スケジューリングなどのその他の機能は、引き続き Kubernetes によって提供される必要があります。このトピックでは、Container Service for Kubernetes (ACK) を Elastic Container Instance に接続し、Elastic Container Instance 上で Pod を実行する方法について説明します。
接続方法
Elastic Container Instance は、Kubernetes リソースを管理するための階層型ソリューションを提供します。Elastic Container Instance はインフラストラクチャ層で Pod のスケジューリングと管理を行い、Kubernetes はプラットフォーム層でデプロイメント、サービス、ステートフルセット、CronJob などのワークロードを管理します。
Elastic Container Instance は、Kubernetes コミュニティによって提供される Virtual Kubelet に基づく仮想ノードを使用して Kubernetes に接続されます。このようにして、Kubernetes クラスターは高い弾力性を備え、クラスターノードの計算能力によって制限されなくなります。 Elastic Container Instance を Kubernetes に接続すると、Elastic Container Instance は Pod のインフラストラクチャと Pod のリソースを含む Pod の管理を引き継ぎます。 Kubernetes は、基盤となる VM のライフサイクルとリソースを管理する必要がなくなります。
Elastic Container Instance は ACK とシームレスに統合されています。 ACK Serverless クラスターまたは ACK クラスターを使用して、コンテナーの実行に関して Elastic Container Instance の機能を体験できます。
ACK Serverless クラスター(Pod は Elastic Container Instance 上でのみ実行)
この接続方法では、すべての Kubernetes Pod は Elastic Container Instance 上で実行されます。 Elastic Container Instance は、基盤となるインフラストラクチャを管理します。 Kubernetes は、基盤となる VM の O&M と容量に焦点を当てることなく、ビジネスの信頼性を確保するためにワークロードのみを管理します。
Kubernetes クラスターのタイプを選択する場合は、ACK Serverless クラスターを選択することをお勧めします。 ACK Serverless クラスターは、Elastic Container Instance 上でのみ Pod を実行するように最適化されています。 ACK Serverless クラスターは、完全に管理された費用対効果の高い Kubernetes クラスターです。 ACK Serverless クラスターは、オンラインおよびオフラインビジネス、シミュレーション環境、開発およびテスト環境に適しています。
費用対効果
ACK Serverless クラスターを使用すると、ノードを購入および管理したり、ノード容量を計画したりすることなく、コンテナー化されたアプリケーションをデプロイできます。 アプリケーションに割り当てる CPU とメモリリソースの量に対してのみ課金されます。
ゼロ O&M
Kubernetes の API 操作またはコマンドラインを使用して、コンテナー化されたアプリケーションを管理できます。 ACK Serverless クラスターは他の Alibaba Cloud サービスと統合されており、Kubernetes での開発を簡素化し、基盤となるリソースの管理ではなくアプリケーションに集中できます。
ACK Serverless クラスターでは、仮想ノードを手動でデプロイすることなく、Elastic Container Instance ベースの Pod を作成できます。 ACK Serverless クラスターの Pod は、Elastic Container Instance に基づく安全で隔離されたコンテナーランタイム環境で実行されます。 各 Pod は Elastic Container Instance です。 詳細については、「ACK Serverless とは」をご参照ください。

ACK クラスター(Pod は Elastic Container Instance と Elastic Compute Service (ECS) 上で実行)
ACK は、世界で初めて Certified Kubernetes Conformance Program に参加したサービスの 1 つです。 ACK は、Alibaba Cloud によって提供される仮想化、ストレージ、ネットワーキング、セキュリティ機能と統合されており、クラスターの作成と拡張を簡素化し、コンテナー化されたアプリケーションの開発と管理に集中できます。
ACK クラスターを作成済みの場合は、クラスターに仮想ノードをデプロイして Elastic Container Instance を使用できます。 仮想ノードをデプロイした後、仮想ノードの計算容量を計画することなく、仮想ノードでオンデマンドで Elastic Container Instance を作成して ACK クラスターを拡張できます。 Elastic Container Instance は、クラスターの実ノード上の Pod と通信できます。 長期にわたるワークロードの過剰なトラフィックを Elastic Container Instance 上で実行するようにスケジュールできます。 これにより、スケールアウトの進捗が加速し、アイドルリソースとスケーリングコストが削減されます。 ビジネストラフィックが減少した場合、Elastic Container Instance ベースの Pod を解放してコストを削減できます。
ACK クラスターでは、Elastic Container Instance ベースの Pod を作成する前に、Virtual Kubelet コンポーネントを使用して仮想ノードを手動でデプロイする必要があります。 仮想ノード上の Pod は、Elastic Container Instance に基づく安全で隔離されたコンテナー環境で実行されます。 各 Pod は Elastic Container Instance として実行されます。 詳細については、「ACK クラスターの概要」をご参照ください。

データセンターまたは ECS に自己管理型 Kubernetes クラスターをデプロイする場合は、Elastic Container Instance を使用するために VNode ベースの仮想ノードをデプロイする必要があります。 詳細については、「概要」をご参照ください。
管理ツール
Virtual Kubelet テクノロジーを使用して Elastic Container Instance を Kubernetes に接続し、仮想ノードをデプロイした後、次のツールのいずれかを使用して Kubernetes クラスターを管理し、Elastic Container Instance の実行状態を表示できます。
Elastic Container Instance コンソール
Elastic Container Instance コンソールで Elastic Container Instance の実行状態を表示できます。 手順:
Elastic Container Instance コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
[コンテナーグループ] ページで、リージョン内の既存の Elastic Container Instance を表示できます。
ACK コンソール
ACK コンソールで ACK Serverless クラスターと ACK クラスターを管理し、Elastic Container Instance の実行状態を表示できます。 Elastic Container Instance の実行状態を表示するには、次の操作を実行します。
ACK コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、表示するクラスターを見つけてクラスター名をクリックし、詳細ページに移動します。
左側のナビゲーションウィンドウで、[ワークロード] > [pod] を選択します。
[pod] ページで、[名前空間] ドロップダウンリストから名前空間を選択します。 次に、名前空間内の Elastic Container Instance を表示できます。
Cloud Shell
Alibaba Cloud によって提供される Cloud Shell を使用して Kubernetes クラスターにアクセスし、Cloud Shell 上で kubectl コマンドを実行してクラスターを管理できます。 詳細については、「kubectl を使用して Cloud Shell 上の ACK クラスターを管理する」をご参照ください。
kubectl クライアント
コンピューター上の kubectl クライアントを使用してリモート Kubernetes クラスターにアクセスし、kubectl コマンドを実行してクラスターを管理できます。 詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
制限事項
Elastic Container Instance は、Alibaba Cloud パブリッククラウドのセキュリティ制限と仮想ノードによる制限のため、hostPath や DaemonSet などの一部の Kubernetes 機能をサポートしていません。 次の表に、サポートされていない機能を示します。
サポートされていない機能 | 説明 | 推奨される代替手段 |
HostPath | オンプレミスホストからコンテナーにファイルをマウントできます。 | emptyDir ボリューム、ディスク、または NAS ファイルシステム (NAS) を使用します。 |
HostNetwork | ホストポートをコンテナーにマップできます。 | LoadBalancer タイプのサービスを作成します。 |
DaemonSet | コンテナーのホストに静的 Pod をデプロイできます。 | sidecar コンテナーを使用して、1 つの Pod に複数のイメージをデプロイします。 |
NodePort タイプのサービス | ホストポートをコンテナーにマップできます。 | LoadBalancer タイプのサービスを作成します。 |
ACK ベースの Elastic Container Instance を使用する場合は、次の点に注意してください。
イメージのプルを簡素化するために、コンテナーイメージを事前にイメージリポジトリにアップロードできます。 Alibaba Cloud Container Registry と仮想プライベートクラウド (VPC) 内のイメージアドレス (registry-vpc.xxx) を使用してコンテナーイメージをアップロードすることをお勧めします。
このトピックで説明されている両方の接続方法は、デプロイメント、レプリカセット、CronJob、ステートフルセットなどの一般的なコントローラーをサポートしています。
このトピックで説明されている両方の接続方法は、PrivateZone を使用してサービスディスカバリを実装します。 クラスターを作成するときに PrivateZone を有効にすることをお勧めします。
このトピックで説明されている両方の接続方法は、負荷分散をサポートしています。これは、サービスのタイプが LoadBalancer であることを示しています。
Elastic Container Instance を使用する
ACK Serverless クラスター
ACK Serverless クラスターを作成します。 詳細については、「ACK Serverless クラスターを作成する」をご参照ください。
コンテナーイメージを準備します。
Elastic Container Instance ベースの Pod を作成します。 Elastic Container Instance ベースの Pod の詳細については、「概要」をご参照ください。
ACK クラスター
ACK クラスターを作成します。 詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
ack-virtual-node コンポーネントをデプロイして仮想ノードを生成します。 詳細については、「手順 1: ACK クラスターに ack-virtual-node をデプロイする」をご参照ください。
説明Elastic Container Instance 機能を使用するには、ack-virtual-node を更新する必要があります。
ack-virtual-node のバージョンの詳細については、「ack-virtual-node」をご参照ください。
ack-virtual-node を更新する方法の詳細については、「コンポーネントを管理する」をご参照ください。
コンテナーイメージを準備します。
Elastic Container Instance ベースの Pod を作成します。 Elastic Container Instance ベースの Pod の詳細については、「概要」をご参照ください。
スケジューリング方法
ACK Serverless クラスターの場合、Pod は Elastic Container Instance 上でのみ実行されます。 Pod をスケジュールする必要はありません。 ACK クラスターの場合、Pod は Elastic Container Instance と ECS 上で実行されます。 要件に基づいて、Elastic Container Instance 上で実行するように Pod をスケジュールできます。 次のリストに、スケジューリング方法を示します。
Pod を Elastic Container Instance 上で実行するように手動でスケジュールする
Pod ラベルと topologySpreadConstraints を構成し、nodeSelector を追加することで、Pod を指定された仮想ノードに手動でスケジュールし、Elastic Container Instance 上で実行できます。 詳細については、以下のトピックをご参照ください。
Pod を Elastic Container Instance 上で実行するように自動的にスケジュールする
eci-profile は、mutating webhook に基づく新しいスケジューリングメカニズムを実装するための ECI スケジューラー機能を提供します。 eci-profile で一致させる名前空間または Pod ラベルを指定できます。 指定されたラベルを持つ Pod は、Elastic Container Instance 上で実行するように自動的にスケジュールされます。 詳細については、「eci-profile を構成する」をご参照ください。
Elastic Container Instance の機能を実装する
Kubernetes クラスターの Pod を Elastic Container Instance 上で実行するようにスケジュールする場合、Pod にアノテーションを追加して、Elastic Container Instance の機能を最大限に活用できます。 追加するアノテーションが Kubernetes 構文に準拠していることを確認してください。 Pod の構成ファイルのメタデータにアノテーションを追加する必要があります。 追加できるアノテーションとアノテーションの構成例については、「Pod アノテーション」をご参照ください。
Pod を作成するときに手動でアノテーションを追加できます。 また、eci-profile 構成ファイルを編集することもできます。 その後、Elastic Container Instance は、指定されたラベルを持つ Pod にアノテーションを自動的に追加します。