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

Alibaba Cloud Service Mesh:サーバーレスインフラストラクチャへの ASM イングレスゲートウェイのデプロイ

最終更新日:Mar 12, 2026

トラフィックスパイクが Elastic Compute Service (ECS) ノードの処理能力を超える場合、ASM イングレスゲートウェイの Pod はオーバーフロー先を必要とします。Elastic Container Instance (ECI) によってバックアップされた仮想ノードへゲートウェイ Pod をスケジュールすることで、ノードのプロビジョニングやメンテナンスを伴わずに、Pod を自動的にサーバーレスインフラストラクチャへスケールできます。

通常の状態では、ゲートウェイ Pod はラベル付き ECS ノード上で実行されます。当該ノードのリソースが上限に達すると、Pod は仮想ノードを経由して ECI へオーバーフローします。この構成では、Kubernetes のスケジューリングプリミティブ(ノードアフィニティ、Taint、Toleration)を活用して、Pod の配置先を制御します。

説明

ASM ゲートウェイが Serverless Kubernetes (ASK) クラスター上で実行されている場合は、Pod はデフォルトで ECI 上で実行されます。本トピックはスキップし、「イングレスゲートウェイサービスの作成」をご参照ください。

仕組み

この構成は、3 つの Kubernetes スケジューリングメカニズムを連携させて動作します:

メカニズム役割
Taint + Toleration仮想ノードには、ECI の誤った使用を防ぐためのデフォルトの virtual-kubelet.io/provider=alibabacloud:NoSchedule Taint が設定されています。ECS ノードには、ゲートウェイ Pod のみを許可するカスタム Taint を追加します。ゲートウェイ Pod は、この 2 つの Taint に対する Toleration を両方とも定義する必要があります。
必須ノードアフィニティPod の配置先を「ラベル付き ECS ノード」と「仮想ノード」の 2 種類のノードに厳密に制限するハード制約です。関係のないノードへの配置は許可されません。
推奨ノードアフィニティ重み付けによるソフト制約です。ECS ノードには重み 80(強く推奨)、仮想ノードには重み 20(フォールバック)が設定されます。ECS に空き容量がある場合は Pod がそこに配置され、ECS が満杯になると Pod は ECI へオーバーフローします。

詳細については、Kubernetes ドキュメントの「Taints and Tolerations」および「Assigning Pods to Nodes」をご参照ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

ゲートウェイの弾力的オーバーフローの構成

本プロシージャは、以下の 4 つの手順で構成されます:ゲートウェイ Pod 用に ECS ノードにラベルを付与、他のワークロードを除外するためにノードに Taint を設定、ゲートウェイ YAML にアフィニティルールおよび Toleration を構成、デプロイメントを検証します。

ステップ 1:対象ノードへのラベル付与

ゲートウェイ Pod をデフォルトで実行する ECS ノードにラベルを追加します。

  1. クラスター内のノード名を取得します。

       kubectl get nodes
  2. 対象ノードにラベルを追加します:ステップ 1 で取得した実際のノード名を <node-name> に置き換えてください。

       # 構文
       kubectl label nodes <node-name> <label-key>=<label-value>
    
       # 例
       kubectl label nodes node1 mykey4pod=asmgateway

ステップ 2:ノードへの Taint 設定

マッチする Toleration を持つ Pod のみがこのノード上で実行されるよう、カスタム Taint を追加します。

kubectl taint nodes node1 mykey=myvalue:NoSchedule

この Taint はキー mykey、値 myvalue、効果 NoSchedule を使用します。node1 へのスケジュールは、明示的にこの Taint を許容する Pod のみが可能です。

ステップ 3:ゲートウェイへのノードアフィニティおよび Toleration の追加

ゲートウェイ YAML を更新し、デフォルトではラベル付き ECS ノードへ Pod を配置し、ノードのリソースが上限に達した際に自動的に ECI へオーバーフローするようにします。

  1. ASM コンソールにログインします。左側ナビゲーションウィンドウで、Service MeshMesh Management を選択します。

  2. Mesh Management ページで、ASM インスタンスの名前をクリックします。左側ナビゲーションウィンドウで、ASM GatewaysIngress Gateway を選択します。

  3. 対象のゲートウェイを見つけ、YAML をクリックします。

  4. 編集 ダイアログボックスで、spec フィールドに以下の内容を追加し、OK をクリックします。下記の表では、スケジューリング動作について説明しています。

    重要

    matchExpressions 内のラベルのキーと値のペアが、ステップ 1 で追加したラベルと一致すること、および Toleration のキーと値のペアが、ステップ 2 で追加した Taint と一致することを確認してください。不一致の場合、Pod は Pending 状態のままになります。

    フィールド機能
    preferredDuringSchedulingIgnoredDuringExecution相対的な重みによるソフトスケジューリングの優先順位を設定します。ECS ノード(重み 80)は ECI(重み 20)よりも強く推奨されます。ECS ノードに空き容量がある場合は Pod がそこに配置され、満杯になると仮想ノードを経由して ECI へオーバーフローします。
    requiredDuringSchedulingIgnoredDuringExecutionハード制約を定義します。Pod は、カスタムラベル(mykey4pod=asmgateway)または仮想ノードラベル(type=virtual-kubelet)のいずれかに一致するノードでのみスケジュール可能です。これにより、関係のないノードへの配置が防止されます。
    tolerations[0]デフォルトの virtual-kubelet.io/provider=alibabacloud:NoSchedule Taint を許容することで、Pod が仮想ノード上で実行できるようになります。この Toleration がない場合、Pod は ECI を利用できません。
    tolerations[1]ステップ 2 で追加したカスタム Taint(mykey=myvalue:NoSchedule)と一致し、ラベル付き ECS ノード上で Pod を実行可能にします。
       affinity:
           nodeAffinity:
             preferredDuringSchedulingIgnoredDuringExecution:
               - preference:
                   matchExpressions:
                     - key: type
                       operator: In
                       values:
                         - virtual-kubelet
                 weight: 20
               - preference:
                   matchExpressions:
                     - key: mykey4pod
                       operator: In
                       values:
                         - asmgateway
                 weight: 80
             requiredDuringSchedulingIgnoredDuringExecution:
               nodeSelectorTerms:
                 - matchExpressions:
                     - key: mykey4pod
                       operator: In
                       values:
                         - asmgateway
                 - matchExpressions:
                     - key: type
                       operator: In
                       values:
                         - virtual-kubelet
         tolerations:
           - effect: NoSchedule
             key: virtual-kubelet.io/provider
             operator: Equal
             value: alibabacloud
           - effect: NoSchedule
             key: mykey
             operator: Equal
             value: myvalue

ステップ 4:デプロイメントの検証

ゲートウェイ Pod が期待されるノード上で実行されていることを確認します。

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

  2. Clusters ページで、ご利用のクラスター名をクリックします。左側ナビゲーションウィンドウで、WorkloadsPods を選択します。

  3. Pods ページで、Namespace のドロップダウンリストから istio-system を選択します。

  4. Node 列で、ゲートウェイ Pod の配置先を確認します。

    • 通常の負荷下では、Pod はラベル付き ECS ノード(node1)上に表示される必要があります。

    • ECS のリソースが枯渇した場合、Pod は仮想ノード上に表示される必要があります。

関連トピック