Elastic Container Instance (ECI) は、Kubernetes の Pod にコンテナランタイム環境を提供します。一方、Kubernetes は、サービス依存関係、負荷分散、弾性スケーリング、定期的なスケジューリングなどの機能を提供します。このトピックでは、Container Service for Kubernetes (ACK) が ECI と統合し、ECI を Pod のコンピューティングリソースとして使用する方法について説明します。
統合方法
ECI は、Kubernetes 向けの階層化されたソリューションを提供します。ECI はインフラストラクチャレイヤーで Pod コンテナリソースのスケジューリングと管理を処理し、Kubernetes は ECI 上の PaaS レイヤーとして機能し、Deployment、Service、StatefulSet、CronJob などのビジネスワークロードを管理します。
Kubernetes コミュニティの Virtual Kubelet (VK) に基づいて、ECI は仮想ノードとして Kubernetes クラスターに追加できます。これにより、クラスターはクラスターノードのコンピューティング容量に制約されることなく弾性的にスケーリングします。ECI は、基盤となる Pod インフラストラクチャを管理します。Pod が必要とするリソースを準備し、Pod インスタンスを起動します。そのため、基盤となる仮想マシンのリソースを監視する必要はありません。ECI は、Pod が必要とするリソースが常に利用可能であることを保証します。クラスターは、お客様のスケジューリング設定に基づいて、どの Pod を ECI 上で実行するかを引き続き決定します。
ECI 上で実行される Pod は、安全で分離されたコンテナランタイム環境を使用します。各 Pod は 1 つの ECI インスタンスに対応します。
ECI 上で Pod を実行する場合、次の Kubernetes 機能がサポートされます。
ワークロードコントローラー — Deployment、ReplicaSet、Job、CronJob、StatefulSet などの一般的なコントローラーをサポートしており、直接実行できます。
サービスディスカバリー — サービスディスカバリーでは、PrivateZone がサポートされています。
負荷分散 — 負荷分散がサポートされています。
LoadBalancerタイプの Service を設定してください。
ECI は、Alibaba Cloud ACK と統合されています。次の表では、ECI 上で Pod を実行できるクラスタータイプと、それぞれを選択する場合について説明します。
クラスタータイプ | 選択する場合 | 仮想ノードの要件 |
ACK サーバーレスクラスター (推奨) | 完全に ECI 上で実行される Kubernetes 環境が必要な場合。オンラインおよびオフラインサービス、シミュレーション環境、または開発およびテスト環境に適しています。 | 不要です。ECI Pod を直接作成します。 |
ACK クラスター (ECI と ECS のハイブリッド) | 既に ACK クラスターがあり、長時間実行されるワークロードのバーストトラフィックなど、必要に応じて ECI Pod を追加したい場合。 | VK に基づいて仮想ノードをデプロイする必要があります。 |
自己管理型 Kubernetes クラスター | Kubernetes クラスターが Alibaba Cloud ECS 上またはオンプレミスデータセンター内で実行されている場合。 | VNode に基づいて仮想ノードをデプロイする必要があります。 |
ACK サーバーレスクラスター (完全に ECI ベース)
ACK サーバーレスクラスターは、完全に ECI 上で実行される Kubernetes 環境を提供します。すべての Pod が ECI 上で実行され、Kubernetes はビジネスワークロードの管理のみを担当します。
(推奨) Kubernetes クラスタータイプを評価している場合は、オンラインおよびオフラインサービス、シミュレーション環境、開発およびテスト環境には ACK サーバーレスクラスターを選択してください。
コスト効率が高い — ノードを購入したり、ノードのメンテナンスを実行したり、クラスター容量を計画したりする必要はありません。コンテナ化されたアプリケーションを直接デプロイし、アプリケーション用に設定された CPU およびメモリリソースに対してのみ料金が発生します。
インフラストラクチャのメンテナンスが不要 — Kubernetes API またはコマンドラインを使用して、コンテナ化されたアプリケーションを直接管理します。ACK サーバーレスクラスターは、さまざまな Alibaba Cloud サービスとも統合されており、Kubernetes 開発を簡素化するため、インフラストラクチャの管理ではなく、アプリケーションの構築に集中できます。
ACK サーバーレスクラスターでは、仮想ノードを手動でデプロイする必要はありません。ECI Pod を直接作成できます。詳細については、「ACK サーバーレスの概要」をご参照ください。
次の図は、すべての Pod が ECI 上で実行されるクラスターを示しています。

ACK クラスター (ECI と ECS のハイブリッド)
ACK は、Kubernetes 準拠認定に世界で初めて合格したプラットフォームの 1 つです。Alibaba Cloud の仮想化、ストレージ、ネットワーク、セキュリティ機能を統合した高性能なコンテナ化アプリケーション管理サービスを提供し、クラスターの作成とスケーリングを簡素化します。
既に ACK クラスターがある場合は、VK に基づいて仮想ノードをデプロイし、ECI を使用します。次に、必要に応じて ECI Pod を作成して、ノードのコンピューティング容量を計画することなくクラスターをスケーリングできます。ECI Pod は、クラスター内の実際のノード上の Pod と通信できます。
バーストトラフィックを ECI にスケジューリングすると、スケールアウト時間が短縮され、スケーリングコストが削減され、既存のリソースを最大限に活用できます。トラフィックが減少した場合は、ECI にデプロイされた Pod を迅速に解放してコストを削減できます。
詳細については、「ACK 製品概要」をご参照ください。
次の図は、Pod が ECI と Elastic Compute Service (ECS) ノードの両方で実行される ACK クラスターを示しています。

自己管理型 Kubernetes クラスター
Alibaba Cloud ECS 上またはオンプレミスデータセンター内に自己管理型 Kubernetes クラスターがある場合は、VNode に基づいて仮想ノードをデプロイし、ECI を使用する必要があります。詳細については、「自己管理型 Kubernetes クラスターと ECI の統合」をご参照ください。
制限事項と注意事項
パブリッククラウドのセキュリティ制約と仮想ノードの固有の制限により、ECI は、次の表に示すように、HostPath や DaemonSet などの一部の Kubernetes 機能をサポートしていません。
| サポートされていない機能 | サポートされていない理由 | 代替案 |
|---|---|---|
| HostPath | ホストのファイルシステムへの直接アクセスが必要 | emptyDir ボリューム、ディスク、または File Storage NAS (NAS) を使用 |
| HostNetwork | ホストポートをコンテナにマッピングする必要がある | LoadBalancer タイプの Service を作成 |
| DaemonSet | 固定されたコンテナホスト上に静的 Pod が必要 | サイドカーコンテナを使用して Pod に複数のイメージをデプロイ |
| NodePort タイプの Service | ホストポートをコンテナにマッピングする必要がある | LoadBalancer タイプの Service を作成 |
以下の項目の一部は、クラスターを作成する前に決定する必要があります。ACK で ECI を使用する場合は、次の点に注意してください。
コンテナイメージ — イメージのプルを高速化するために、コンテナイメージを事前にイメージリポジトリにアップロードしてください。ベストプラクティスとして、Alibaba Cloud Container Registry (ACR) を使用し、イメージリポジトリの VPC エンドポイントアドレス (例:
registry-vpc.xxx) を使用してください。サービスディスカバリー — (推奨) クラスターを作成する際に PrivateZone を有効にしてください。
アドオンバージョン — 新しい ECI 関連機能を使用するには、ACK クラスターの
ack-virtual-nodeアドオンをアップグレードする必要があります。ack-virtual-nodeコンポーネントのバージョンについては、「ack-virtual-nodeコンポーネント」をご参照ください。コンポーネントのアップグレード方法については、「コンポーネントの管理」をご参照ください。
ワークフロー
ACK サーバーレスクラスター
ACK サーバーレスクラスターを作成します。手順については、「クラスターの作成」をご参照ください。
このトピックの「制限事項と注意事項」セクションで説明されているように、コンテナイメージを準備し、イメージリポジトリにアップロードします。
ECI Pod を作成します。手順については、「ECI Pod の作成」をご参照ください。
Pod に対応する ECI インスタンスの実行ステータスを表示します。詳細については、このトピックの「ECI インスタンスの表示と管理」セクションをご参照ください。
ACK クラスター
ACK クラスターを作成します。手順については、「マネージド ACK クラスターの作成」をご参照ください。
ack-virtual-nodeアドオンをデプロイして仮想ノードを作成します。手順については、「ACK 仮想ノードコンポーネントのデプロイ」をご参照ください。このトピックの「制限事項と注意事項」セクションで説明されているように、コンテナイメージを準備し、イメージリポジトリにアップロードします。
Pod がクラスターの ECS ノードではなく ECI 上で実行されるようにスケジューリング方法を設定します。詳細については、このトピックの「Pod を ECI にスケジューリング」セクションをご参照ください。
ECI Pod を作成します。手順については、「ECI Pod の作成」をご参照ください。
Pod に対応する ECI インスタンスの実行ステータスを表示します。詳細については、このトピックの「ECI インスタンスの表示と管理」セクションをご参照ください。
Pod を ECI にスケジューリング
ACK サーバーレスクラスターの場合、クラスター全体が ECI 上で実行されるため、特定のスケジューリングは必要ありません。ECI と ECS ノードの両方を使用するハイブリッド ACK クラスターの場合、次の方法を使用して Pod を ECI 上で実行するようにスケジューリングできます。個々のワークロードを手動でスケジューリングするか、名前空間または Pod ラベルによって Pod を自動的にスケジューリングします。
Pod を ECI に手動でスケジューリング
Pod ラベルの設定、
nodeSelectorの追加、またはtopologySpreadConstraintsの設定により、指定された仮想ノード上の ECI で実行されるように Pod を手動でスケジューリングできます。仮想ノードのアーキテクチャに一致するトピックを選択してください。ECI Pod をゾーン間に分散したり、アフィニティルールを適用したりするには、「ECI Pod をゾーン間に分散またはアフィニティの設定」をご参照ください。
Pod を ECI に自動的にスケジューリング
eci-profileは、mutating webhook に基づく新しいスケジューリングメカニズムである ECI Scheduler 機能を提供します。eci-profile設定ファイルで、一致させる名前空間または Pod ラベルを指定できます。一致するラベルを持つ Pod は、自動的に ECI にスケジューリングされます。詳細については、「eci-profile の設定」をご参照ください。
ECI 機能の使用
Kubernetes クラスター内の ECI 上で Pod を作成する場合、Kubernetes のセマンティクスを変更することなく ECI 機能を使用するために、Pod レベルのメタデータにアノテーションを追加できます。サポートされているアノテーションと設定例のリストについては、「ECI Pod アノテーション」をご参照ください。
Pod を作成する際にアノテーションを手動で追加するか、eci-profile を設定して、一致するラベルを持つ Pod にアノテーションを自動的に追加できます。eci-profile の詳細については、このトピックの「Pod を ECI にスケジューリング」セクションをご参照ください。
ECI インスタンスの表示と管理
次のツールを使用して、Kubernetes クラスターを管理し、ECI インスタンスの実行ステータスを監視します。これらのツールは、ACK サーバーレスクラスターと仮想ノードを使用する ACK クラスターの両方に適用されます。
Elastic Container Instance コンソール
Elastic Container Instance コンソールで ECI インスタンスの実行ステータスを表示するには、次の手順を実行します。
Elastic Container Instance コンソールにログインします。
上部メニューでリージョンを選択します。
[コンテナグループ] ページで、選択したリージョンで作成された ECI インスタンスを表示します。
ACK コンソール
ACK コンソールを使用して、ACK サーバーレスクラスターまたは ACK クラスターを管理し、ECI インスタンスの実行ステータスを表示できます。ECI インスタンスを表示するには、次の手順を実行します。
ACK コンソールにログインします。
上部メニューでリージョンを選択します。
左側メニューで クラスターリスト をクリックします。
[クラスター] ページで、対象のクラスターを見つけ、クラスター ID をクリックして詳細ページに移動します。
左側メニューで、ワークロード > ポッド を選択します。
ポッド ページで、名前空間を選択して、その名前空間内の ECI インスタンスを表示します。
Alibaba Cloud CloudShell
Alibaba Cloud CloudShell を使用して Kubernetes クラスターにアクセスし、
kubectlコマンドを使用してクラスターを管理できます。手順については、「kubectl を使用して Workbench または CloudShell でクラスターに接続」をご参照ください。kubectl クライアント
ローカルの
kubectlクライアントを使用してリモートの Kubernetes クラスターにアクセスし、kubectlコマンドを使用してクラスターを管理できます。手順については、「kubectl を使用した Kubernetes クラスターへの接続」をご参照ください。