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

:SLBインスタンスを使用してレイヤー4カナリアリリースを実装する

最終更新日:Jan 23, 2025

Kubernetesクラスターでは、レイヤー7 Ingressはカナリアリリース展開でTCPまたはUDPを介してアクセスされるサービスの要件を満たすことができません。 このトピックでは、Classic Load Balancer (CLB) インスタンスを使用してレイヤー4カナリアリリースを実装する方法について説明します。

前提条件

ステップ1: デプロイの作成

  1. ACKコンソールにログインします。

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

  3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  4. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。

  5. [デプロイメント] ページで、右上隅の [YAMLから作成] をクリックします。

  6. [サンプルテンプレート] フィールドで、ドロップダウンリストからテンプレートを選択します。 次のテンプレートを [テンプレート] フィールドにコピーし、[作成] をクリックします。

    Sample template

    次のコードは、CLBインスタンスを介して外部アクセスを提供するNGINXアプリケーションを作成する方法の例を示しています。

     apiVersion: extensions/v1beta1
     kind: Deployment
     metadata:
       labels:
         run: old-nginx
       name: old-nginx
     spec:
       replicas: 1
       selector:
         matchLabels:
           run: old-nginx
       template:
         metadata:
           labels:
             run: old-nginx
             app: nginx
         spec:
           containers:
           - image: registry.cn-hangzhou.aliyuncs.com/xianlu/old-nginx
             imagePullPolicy: Always
             name: old-nginx
             ports:
             - containerPort: 80
               protocol: TCP
           restartPolicy: Always
     ---
     apiVersion: v1
     kind: Service
     metadata:
       labels:
         run: nginx
       name: nginx
     spec:
       ports:
       - port: 80
         protocol: TCP
         targetPort: 80
       selector:
         app: nginx
       sessionAffinity: None
       type: LoadBalancer                       # Enable external access to the application through an SLB instance.

    アプリケーションのデプロイ後、[デプロイメント] ページで作成したデプロイメントを確認できます。

  7. 左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。 [サービス] ページで、サービスの右側にある外部エンドポイントをクリックして、NGINXのウェルカムページにアクセスします。 この例では、ウェルカムページにoldが表示されます。 これは、バックエンドのold-nginxコンテナにアクセスすることを示します。

    old

    マスターノードにログインし、curlを使用してリクエストを送信することを推奨します。 次の例では、要求はcurlを使用して送信されます。

    bash  
    for x in {1..10} ; do curl EXTERNAL-IP; done                    # Replace EXTERNAL-IP with the external endpoint of the Service.
    old
    old
    old
    old
    old
    old
    old
    old
    old
    old

ステップ2: デプロイメントを使用して新しいアプリケーションバージョンをリリースする

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

  2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  3. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。

  4. [デプロイメント] ページで、右上隅の [YAMLから作成] をクリックします。

  5. [サンプルテンプレート] フィールドで、ドロップダウンリストからテンプレートを選択し、[作成] をクリックします。

    この例では、NGINXアプリケーションの新しいバージョンをデプロイするためのデプロイが作成されます。 このデプロイには、app:nginxラベルも追加されます。 このラベルにより、NGINXアプリケーションの両方のバージョンをサービスによって検出できます。 このようにして、トラフィックは両方のアプリケーションバージョンに分散されます。

    例として次のテンプレートを使用します。

     apiVersion: apps/v1
     kind: Deployment
     metadata:
       labels:
         run: new-nginx
       name: new-nginx
     spec:
       replicas: 1
       selector:
         matchLabels:
           run: new-nginx
       template:
         metadata:
           labels:
             run: new-nginx
             app: nginx
         spec:
           containers:
           - image: registry.cn-hangzhou.aliyuncs.com/xianlu/new-nginx
             imagePullPolicy: Always
             name: new-nginx
             ports:
             - containerPort: 80
               protocol: TCP
           restartPolicy: Always
  6. 新しいバージョンのアプリケーションがデプロイされた後、[デプロイメント] ページでnew-nginxという名前のデプロイメントを見つけることができます。

  7. マスターノードにログインし、curlを使用してNGINXアプリケーションにリクエストを送信します。

    bash  
    for x in {1..10} ; do curl EXTERNAL-IP; done                    # Replace EXTERNAL-IP with the external endpoint of the Service.
    new
    new
    new
    old
    new
    old
    new
    new
    old
    old

    この結果は、5つの要求が古いバージョンのアプリケーションにルーティングされ、他の5つが新しいバージョンにルーティングされることを示しています。 これは、サービスの負荷分散ポリシーがトラフィックを均等に分散するためです。 両方のデプロイメントは1つのポッドを実行します。 したがって、2つのポッドに送信されるリクエストの比率は1:1です。

ステップ3: トラフィックの重みを調整する

SLBインスタンスを使用して実装されたカナリアリリースでトラフィックの重みを調整するには、バックエンドのポッド数を変更する必要があります。 新しいアプリケーションバージョンにより多くのトラフィックをルーティングする場合は、新しいバージョンを実行するポッドの数を増やします。 この例では、ポッドの数が4つに増えています。

説明

cURLコマンドを使用して10個のリクエストを送信した後、結果は調整されたトラフィックの重みに厳密に準拠しない場合があります。 より正確な結果を得るために、より多くのリクエストを送信することを推奨します。

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

  2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  3. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。

  4. 、デプロイがデプロイされている名前空間を選択し、デプロイを見つけて、[操作] 列の [スケール] をクリックします。

  5. 表示されるダイアログボックスで、[目的のポッド数] を4に設定します。

    説明

    デフォルトでは、デプロイメントはrollingUpdate戦略に基づいて更新されます。 これにより、更新中に使用できるポッドの数が最小限に抑えられます。 この番号はYAMLファイルで変更できます。

  6. デプロイが更新されたら、マスターノードにログインし、cURLコマンドを使用してリクエストを送信します。

    bash  
     for x in {1..10} ; do curl EXTERNAL-IP; done                    # Replace EXTERNAL-IP with the external endpoint of the Service.
     new
     new
     new
     new
     new
     old
     new
     new
     new
     old

    この例では、10個の要求が送信される。 結果は、8つの要求が新しいバージョンのアプリケーションにルーティングされ、2つの要求が古いバージョンのアプリケーションにルーティングされることを示しています。

    バックエンドでポッドの数を動的に変更して、古いバージョンと新しいバージョンのトラフィックの重みを調整し、カナリアリリースを実装できます。