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

:サーバーレス ASM ゲートウェイをデプロイして、エラスティックサービスをサポートする

最終更新日:Jan 13, 2025

仮想ノードとエラスティックコンテナインスタンスに基づいて、サーバーレス サービスメッシュ(ASM)ゲートウェイが提供されます。 エラスティックリソースが必要で、ノードのメンテナンスが不要なサービスシナリオに適用できます。 このトピックでは、サーバーレス ASM ゲートウェイをデプロイする方法について説明します。

前提条件

用語

用語

説明

Elastic Container Instance

Elastic Container Instance は、サーバーレスのエラスティックコンピューティングサービスです。 Alibaba Cloud が提供するこのコンテナサービスは、お客様を O&M から解放し、コンテナランタイム環境に強力な分離と迅速な起動を提供します。 Elastic Container Instance を使用すると、基盤となる Elastic Compute Service(ECS)サーバーを購入および管理したり、基盤となるインフラストラクチャを維持したりする必要なく、コンテナアプリケーションに集中できます。 ビジネス要件に基づいてエラスティックコンテナインスタンスを作成し、コンテナ用に構成したリソースに対してのみ、数量と秒数に基づいて料金を支払うことができます。 詳細については、Elastic Container Instance とはおよび課金概要をご参照ください。

仮想ノード

仮想ノードは、コンピューティング負荷の変動が顕著なシナリオにおいて、コンピューティングコストの大幅な削減とエラスティックコンピューティング効率の向上に役立ちます。

Taint

Taint を使用すると、ノードは一連のポッドを拒否できます。

デフォルトでは、ACK クラスター内のすべての仮想ノードに virtual-kubelet.io/provider=alibabacloud:NoSchedule Taint が追加されます。 これにより、誤ってエラスティックコンテナインスタンスを使用することを防ぎます。

Toleration

Toleration はポッドに適用され、ポッドを一致する Taint を持つノードにスケジュールできるようにします。

ACK クラスター内のポッドがエラスティックコンテナインスタンスを使用できるようにするには、次の tolerations を構成して virtual-kubelet.io/provider=alibabacloud:NoSchedule Taint を許容します。 詳細については、仮想ノードコントローラーをデプロイし、それを使用してエラスティックコンテナインスタンスベースのポッドを作成するをご参照ください。

      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
説明

Taint と Toleration は連携して、システムがポッドを不適切なノードにスケジュールするのを防ぎます。 1 つ以上の Taint をノードに適用できます。

  • ポッドが特定の Taint を許容しない場合、一致する Taint を持つノードはポッドを受け入れません。 具体的には、ポッドは一致する Taint を持つノードにスケジュールできません。

  • ポッドが特定の Taint を許容する場合、ポッドは一致する Taint を持つノードにスケジュールできますが、必須ではありません。

詳細については、Taint と Toleration をご参照ください。

ノードアフィニティ

ノードアフィニティは、ポッドを一連のノードに引き寄せます。 ノードアフィニティルールは必須または優先にすることができます。 ソフトルールまたは優先ルールが満たされない場合、ポッドは他のノードにスケジュールされます。

ステップ 1:目的のノードにラベルを追加する

  1. 次のコマンドを実行して、特定のクラスター内のノードの名前を取得します。

    kubectl get nodes
  2. 次のコマンドを実行して、目的のノードにラベルを追加します。

    # コマンド形式
    kubectl label nodes <node-name> <label-key>=<label-value>
    
    # サンプルコマンド
    kubectl label nodes node1 mykey4pod=asmgateway

ステップ 2:ノードに Taint を追加する

次のコマンドを実行して、ノードに Taint を追加します。

kubectl taint nodes node1 mykey=myvalue:NoSchedule

このコマンドは、node1 に Taint を追加します。 キーは mykey、値は myvalue、効果は NoSchedule です。 これにより、Taint を許容するポッドのみが node1 にスケジュールできます。

ステップ 3:ASM ゲートウェイのノードアフィニティと Toleration を設定する

ASM ゲートウェイの nodeAffinity 関連のパラメーターを構成して、ASM ゲートウェイのポッドが対応するノードにスケジュールされるようにします。 ステップ 2 で作成された Taint と一致するように tolerations 関連のパラメーターを構成して、ASM ゲートウェイのポッドを node1 にスケジュールできるようにします。

  1. ASM コンソール にログインします。 左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページで、設定するゲートウェイを見つけて、右側の [YAML] をクリックします。

  4. [編集] ダイアログボックスで、次のコンテンツを spec フィールドに追加し、[OK] をクリックします。

       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

    次の表は、主要なパラメーターについて説明しています。 パラメーターの詳細については、ノードへのポッドの割り当て をご参照ください。

    パラメーター

    説明

    preferredDuringSchedulingIgnoredDuringExecution

    スケジューラーは、ルールを満たすノードを見つけようとします。 一致するノードが見つからない場合でも、スケジューラーはポッドをスケジュールします。 このパラメーターは、2 つの matchExpressions フィールドに関連付けられています。 weight フィールドの値は相対値であり、値が大きい構成が優先されます。 weight20 の構成を使用すると、ポッドはエラスティックコンテナインスタンスを使用するようにスケジュールされます。 weight80 の構成を使用すると、ポッドは指定されたラベルを持つ ECS ノードにスケジュールされます。

    requiredDuringSchedulingIgnoredDuringExecution

    スケジューラーは、ルールが満たされた場合にのみポッドをスケジュールします。 このパラメーターは、2 つの matchExpressions フィールドに関連付けられています。 1 つは、ポッドが指定されたラベルを持つ ECS ノードにスケジュールされることを示し、もう 1 つは、ポッドがエラスティックコンテナインスタンスを使用するようにスケジュールされることを示します。

    tolerations

    上記の例の構成は、ポッドが virtual-kubelet.io/provider=alibabacloud:NoSchedule Taint を許容し、エラスティックコンテナインスタンスを使用できることを示しています。

  5. ゲートウェイポッドのノードが期待どおりかどうかを確認します。

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

    2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、[ワークロード] > [ポッド] を選択します。

    3. [ポッド] ページの上部にある [名前空間] ドロップダウンリストから istio-system を選択し、ゲートウェイポッドのノードを確認します。

      ゲートウェイポッドのノードが期待どおりであれば、ASM ゲートウェイに目的のノードアフィニティと Toleration が設定されています。