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 パブリッククラウドのセキュリティ制限と仮想ノードによる制限のため、hostPaths や DaemonSets などの一部の Kubernetes 機能をサポートしていません。次の表に、サポートされていない機能を示します。
サポートされていない機能 | 説明 | 推奨される代替手段 |
HostPath | オンプレミスホストからコンテナにファイルをマウントできます。 | emptyDir ボリューム、ディスク、または File Storage NAS (NAS) ファイルシステムを使用します。 |
HostNetwork | ホストポートをコンテナにマッピングできます。 | LoadBalancer タイプのサービスを作成します。 |
DaemonSet | コンテナのホストに静的 Pod をデプロイできます。 | サイドカーコンテナを使用して、Pod に複数のイメージをデプロイします。 |
NodePort タイプのサービス | ホストポートをコンテナにマッピングできます。 | LoadBalancer タイプのサービスを作成します。 |
ACK ベースの Elastic Container Instance を使用する場合は、次の点に注意してください。
イメージのプルを簡素化するために、コンテナイメージを事前にイメージリポジトリにアップロードできます。Alibaba Cloud Container Registry と仮想プライベートクラウド (VPC) 内のイメージアドレス (registry-vpc.xxx) を使用してコンテナイメージをアップロードすることをお勧めします。
このトピックで説明されている両方の接続方法は、デプロイメント、ReplicaSet、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 にアノテーションを自動的に追加します。