すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:仮想ノードを使用した ECI への Pod のスケジューリング

最終更新日:Mar 27, 2026

多数の Pod を迅速に作成する必要がある場合、ECS インスタンスのスケーリングでは速度が不十分なことがあり、予備のインスタンスを予約するとリソースの無駄になります。Container Service for Kubernetes (ACK) の仮想ノードを使用すると、ECS インスタンスをプロビジョニングまたは管理することなく、Pod を Elastic Container Instance (ECI) にスケジューリングできます。このトピックでは、ACK マネージドクラスターで Pod を ECI 上で実行するようにスケジューリングする方法について説明します。

注意事項

kube-scheduler v6.11.0 以降の場合、ラベルを追加して 1,000 を超える ECI Pod を同時に作成するときは、最新バージョンにアップグレードし、SchedulerBatchMoveEvents=true フィーチャーゲートを有効にしてください。

利用シーン

ECI で Pod を実行することは、トラフィックスパイクへの対応やコンピューティングコストの削減に最適です。典型的な利用シーンは次のとおりです。

  • トラフィックパターンが変動するオンラインサービス

    ECI Pod を使用すると、トラフィックスパイクへの迅速な対応、固定リソースプールのメンテナンス削減、コンピューティングコストの低減が可能になります。

  • 短期間またはバッチ処理のコンピューティングタスク

    コンピューティングタスクを ECI Pod として実行する場合、専用のノードを維持する必要がなく、タスク実行中に使用したコンピューティングリソースに対してのみ料金が発生します。このアプローチにより、Spark や AI ジョブなどのワークロードのコストを削減できます。

前提条件

ご利用の ACK クラスターは Kubernetes 1.16 以降を実行しており、ECI をサポートするリージョンにある必要があります。

説明

クラスターのリージョンがサポートされているかを確認するには、「ECI がサポートするリージョンとゾーン」をご参照ください。その後、Elastic Container Instance コンソールにログインして、ECI サービスを有効化します。

操作手順

ステップ 1: ack-virtual-node コンポーネントのデプロイ

説明

以下の手順では、ACK マネージドクラスターを例として使用します。ACK 専用クラスターの場合、Marketplace ページから ack-virtual-node コンポーネントをデプロイする必要があります。詳細については、「ack-virtual-node コンポーネントのデプロイ」をご参照ください。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[コンポーネントとアドオン] をクリックします。

  3. [アドオン] ページで、[コアコンポーネント] タブをクリックし、[ACK Virtual Node] を見つけて、[インストール] をクリックします。画面の指示に従ってインストールを完了します。

    インストール中、クラスターのデフォルト vSwitch とセキュリティグループが、初期の ECI 構成パラメーターとして使用されます。パラメーターを変更するには、「eci-profile の設定」によって更新できます。

ステップ 2: Pod の ECI へのスケジューリング

説明

以下の例では、Pod または Namespace にラベルを追加することで、Pod を仮想ノードにスケジューリングして ECI で実行する方法を示します。その他のスケジューリング方法については、「Pod の仮想ノードへのスケジューリング」をご参照ください。

Pod

個別の Pod を ECI で実行するには、Pod に alibabacloud.com/eci: "true" ラベルを追加します。これにより、Pod は x86 アーキテクチャの仮想ノードにスケジューリングされ、ECI Pod として実行されます。

  1. 次の YAML ファイルから Deployment を作成します。

    kubectl create -f eci-pod.yaml

    以下に `eci-pod.yaml` ファイルの例を示します。

    説明

    以下の YAML では、k8s.aliyun.com/eci-use-specs アノテーションが ECI Pod のコンピューティング仕様を指定します。ECI Pod の仕様設定の詳細については、「ECI Pod のコンピューティング仕様の指定」をご参照ください。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"             # このラベルを追加して Pod を ECI にスケジューリングします。 
          annotations:
            k8s.aliyun.com/eci-use-specs: "2-4Gi"   # ECI Pod に 2 vCPU と 4 GiB のメモリを指定します。
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
  2. Pod が仮想ノードで実行されていることを確認します。

    kubectl get pod -o wide -l app=nginx

    期待される出力では、NODE 列に示されているように、Pod が仮想ノードにスケジューリングされていることがわかります。

    NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE                            NOMINATED NODE   READINESS GATES
    test-86f7fbc94f-g5m22   1/1     Running   0          38s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    test-86f7fbc94f-r4wcn   1/1     Running   0          38s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
  3. ECI Pod の詳細を表示します。

    kubectl get pod <pod-name> -o yaml

    YAML 出力で、k8s.aliyun.com/eci-instance-id アノテーションに対応する ECI インスタンス ID を見つけ、k8s.aliyun.com/eci-instance-spec アノテーションで課金に使用される ECI Pod のコンピューティング仕様を確認します。

Namespace

特定のカテゴリの Pod を ECI で実行したい場合は、Namespace を作成し、それに alibabacloud.com/eci: "true" ラベルを追加できます。この Namespace で作成されたすべての Pod は、x86 アーキテクチャの仮想ノードにスケジューリングされ、ECI Pod として実行されます。

  1. vk という名前の Namespace を作成し、必要なラベルを追加します。

    kubectl create ns vk
    kubectl label namespace vk alibabacloud.com/eci=true
  2. 次の YAML を使用して、vk Namespace に Deployment を作成します。

    kubectl create -f eci-namespace.yaml

    以下に `eci-namespace.yaml` ファイルの例を示します。

    説明

    以下の YAML では、k8s.aliyun.com/eci-use-specs アノテーションが ECI Pod のコンピューティング仕様を指定します。ECI Pod の仕様設定の詳細については、「ECI Pod のコンピューティング仕様の指定」をご参照ください。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      namespace: vk       # ラベル付けされた Namespace を指定して Pod を ECI にスケジューリングします。
      labels:
        app: test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: test
          labels:
            app: nginx
          annotations:
            k8s.aliyun.com/eci-use-specs: "2-4Gi"   # ECI Pod に 2 vCPU と 4 GiB のメモリを指定します。
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
  3. Pod が仮想ノードで実行されていることを確認します。

    kubectl get pod -o wide -l app=nginx -n vk

    期待される出力では、NODE 列に示されているように、Pod が仮想ノードにスケジューリングされていることがわかります。

    NAME                   READY   STATUS    RESTARTS   AGE   IP            NODE                            NOMINATED NODE   READINESS GATES
    test-8f54bcfb5-86pvc   1/1     Running   0          14s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    test-8f54bcfb5-skvkg   1/1     Running   0          14s   10.16.XX.XX   virtual-kubelet-cn-hangzhou-j   <none>           <none>
  4. ECI Pod の詳細を表示します。

    kubectl get pod <pod-name> -o yaml -n vk

    YAML 出力で、k8s.aliyun.com/eci-instance-id アノテーションに対応する ECI インスタンス ID を見つけ、k8s.aliyun.com/eci-instance-spec アノテーションで課金に使用される ECI Pod のコンピューティング仕様を確認します。