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

Container Service for Kubernetes:仮想ノードとしてデプロイされた Elastic Container Instance にポッドをスケジュールする

最終更新日:Apr 22, 2025

Container Service for Kubernetes (ACK) クラスタを使用する場合、短期間で多数のポッドを作成する必要がある場合があります。 ポッド用に Elastic Compute Service (ECS) インスタンスを作成することを選択した場合、スケーリングプロセスは時間がかかります。 ECS インスタンスを予約することを選択した場合は、リソースが無駄になります。 ACK 仮想ノードを使用すると、ECS インスタンスを購入または管理することなく、ポッドを Elastic Container Instance にすばやくスケジュールできます。 このトピックでは、ACK マネージドクラスター で Elastic Container Instance にポッドをスケジュールする方法について説明します。

シナリオ

Elastic Container Instance を使用してトラフィックの急増を処理し、コンピューティングコストを削減できます。 Elastic Container Instance は、次のシナリオに適しています。

  • トラフィックの変動が大きいオンラインサービス

    オンライン教育、e コマース、その他のサービスのトラフィックは、通常、変動が大きくなります。 Elastic Container Instance ベースのポッドを使用すると、トラフィックの急増に迅速に対応し、固定リソースプールのメンテナンスを削減できます。 これにより、コンピューティングコストを削減できます。

  • 非連続コンピューティングタスク

    Elastic Container Instance ベースのポッドを使用してコンピューティングタスクを実行します。 この方法では、ノードを保持する必要はありません。 タスク実行中に使用されたコンピューティングリソースに対してのみ料金を支払います。 これにより、コンピューティングコストが削減されます。 タスクには、Spark タスクと AI タスクが含まれます。

前提条件

ACK クラスタの Kubernetes バージョンは 1.16 以降であり、クラスタが配置されているリージョンで Elastic Container Instance がサポートされています。

説明

クラスタのリージョンがサポートされているかどうかを確認します。 詳細については、「リージョンとゾーン」をご参照ください。 Elastic Container Instance コンソール にログオンして、Elastic Container Instance サービスをアクティブ化します。

手順

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

説明

次の操作では、ACK マネージドクラスター を例として使用します。 ACK 専用クラスター の場合は、[マーケットプレイス] ページで ack-virtual-node コンポーネントをデプロイする必要があります。 詳細については、「ack-virtual-node コンポーネントをデプロイする」をご参照ください。

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページの [コアコンポーネント] タブで、[ACK Virtual Node] を見つけて、[インストール] をクリックします。 ページに表示される手順に従います。

    インストール中に、クラスターのデフォルトの vSwitch とセキュリティグループを Elastic Container Instance のデフォルト構成として使用します。 構成の変更方法の詳細については、「eci-profile を構成する」をご参照ください。

ステップ 2: Elastic Container Instance にポッドをスケジュールする

説明

次の操作では、ポッドまたは名前空間にラベルを追加する方法を例として使用して、Elastic Container Instance で実行するために仮想ノードにポッドをスケジュールする方法を示します。 スケジューリングソリューションの詳細については、「仮想ノードにポッドをスケジュールする」をご参照ください。

ポッドにラベルを追加する

特定のポッドを Elastic Container Instance で実行するようにスケジュールする必要がある場合は、alibabacloud.com/eci: "true" などの特定のラベルをポッドに追加できます。 ポッドは、Elastic Container Instance として実行するために、x86 アーキテクチャの仮想ノードにスケジュールされます。

  1. 次の YAML ファイルを使用してデプロイメントを作成します。

    kubectl create -f eci-pod.yaml

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

    説明

    次の YAML ファイルでは、k8s.aliyun.com/eci-use-specs アノテーションを使用して、Elastic Container Instance ベースのポッドの仕様を指定しています。 Elastic Container Instance ベースのポッドの仕様の構成方法の詳細については、「Elastic Container Instance のコンピューティング仕様を指定する」をご参照ください。

    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"             # ポッドを Elastic Container Instance にスケジュールするための特定のラベルを追加します
          annotations:
            k8s.aliyun.com/eci-use-specs: "2-4Gi"   # Elastic Container Instance ベースのポッドに 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. ポッドが仮想ノードで実行されているかどうかを確認します。

    kubectl get pod -o wide -l app=nginx

    想定される出力は次のとおりです。 NODE フィールドに、ポッドが仮想ノードにスケジュールされていることが示されます。

    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. Elastic Container Instance ベースのポッドの詳細を表示します。

    kubectl get pod <pod-name> -o yaml

    返された YAML ファイルで、k8s.aliyun.com/eci-instance-id フィールドに基づいて対応する Elastic Container Instance の ID を取得し、k8s.aliyun.com/eci-instance-spec フィールドに基づいて Elastic Container Instance ベースのポッドの実際の課金仕様を確認できます。

名前空間にラベルを追加する

あるカテゴリのポッドを Elastic Container Instance で実行するようにスケジュールする必要がある場合は、名前空間を作成し、alibabacloud.com/eci: "true" などの特定のラベルを追加できます。 この名前空間のすべてのポッドは、Elastic Container Instance として実行するために x86 アーキテクチャの仮想ノードにスケジュールされます。

  1. vk という名前の名前空間を作成し、名前空間に特定のラベルを追加します。

    kubectl create ns vk
    kubectl label namespace vk alibabacloud.com/eci=true
  2. 次の YAML ファイルを使用して、vk 名前空間にデプロイメントを作成します。

    kubectl create -f eci-namespace.yaml

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

    説明

    次の YAML ファイルでは、k8s.aliyun.com/eci-use-specs アノテーションを使用して、Elastic Container Instance ベースのポッドの仕様を指定しています。 Elastic Container Instance ベースのポッドの仕様の構成方法の詳細については、「Elastic Container Instance のコンピューティング仕様を指定する」をご参照ください。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      namespace: vk       # 特定のラベルを持つ名前空間を指定して、ポッドを Elastic Container Instance にスケジュールします
      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"   # Elastic Container Instance ベースのポッドに 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. ポッドが仮想ノードで実行されているかどうかを確認します。

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

    想定される出力は次のとおりです。 NODE フィールドに、ポッドが仮想ノードにスケジュールされていることが示されます。

    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. Elastic Container Instance ベースのポッドの詳細を表示します。

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

    返された YAML ファイルで、k8s.aliyun.com/eci-instance-id フィールドに基づいて対応する Elastic Container Instance の ID を取得し、k8s.aliyun.com/eci-instance-spec フィールドに基づいて Elastic Container Instance ベースのポッドの実際の課金仕様を確認できます。