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

Microservices Engine:段階的リリースの設定

最終更新日:Mar 12, 2026

構成変更をすべてのノードに一度に適用すると、変更内容に誤りがある場合、クラスター全体が停止するリスクがあります。カナリアリリースは、このリスクを軽減するために、まず少数のノードに対して変更を配信します。その後、変更内容を確認してから、残りのすべてのノードへ段階的に展開します。

MSE Nacos では、以下の 2 種類のカナリアリリース戦略をサポートしています:

戦略動作の仕組み推奨される利用シーン
IP アドレスベース特定のノード IP アドレスを対象とするIP アドレスが固定された小規模な業務システム
タグベースアプリケーションタグ(キーと値のペア)でノードを対象とするKubernetes など、IP アドレスが頻繁に変更される環境

前提条件

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

IP アドレスベースのカナリアリリースによる構成のリリース

IP アドレスベースのカナリアリリースでは、指定した IP アドレスを持つノードのみが新しい構成を受信します。IP リストに含まれないノードは、現在の正式版構成を引き続き使用します。

この手法は小規模クラスターには有効ですが、以下の 2 つの制限があります。

  • Nacos Client 1.x では、SLB インスタンスを経由した接続において、サーバーがクライアントの IP アドレスを正確に取得できません。

  • Kubernetes 環境では、ノードが再構築されると Pod の IP アドレスが変更されるため、カナリアリリースが誤ったノードを対象としてしまう可能性があります。

動的な環境では、代わりにタグベースのカナリアリリースをご利用ください。

IP アドレスベースのカナリア構成の作成

  1. MSE コンソールにログインし、上部のナビゲーションバーからリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、マイクロサービスレジストリ > インスタンス を選択します。

  3. インスタンス ページで、対象のインスタンス名をクリックします。

  4. 左側のナビゲーションウィンドウで、構成管理 > 構成 を選択します。

  5. 対象の構成を探し、[アクション] 列の [編集] をクリックします。

  6. 構成の編集 パネルで、リリースタイプIP アドレスベースのカナリアリリース に設定します。

    Set the release type to IP-based Canary Release

  7. アプリケーションノード IP 入力ボックスをクリックし、カナリアリリース対象の IP アドレスを選択します。手動で IP アドレスを入力することも可能です。入力欄では自動補完が有効です。

    説明

    ここにリスト表示される IP アドレスは、本構成をサブスクライブするノードの IP アドレスです。複数の IP アドレスをカンマ(,)で区切って指定します。

  8. 構成内容を編集し、カナリアリリース をクリックします。

  9. 構成内容の比較 ダイアログボックスで、現在の正式版 および リリース対象の内容 を確認し、リリース をクリックします。

カナリア構成の確認

  1. 対象インスタンスの 構成 ページへ移動します(上記の手順 1~4 を実行)。

  2. アクティブなカナリアリリースがある構成を見つけ、[操作] 列の [編集] をクリックします。

  3. 構成の編集 パネルで、ベータ(IP) タブをクリックして、カナリアリリースの詳細を確認します。

    View the Beta(IP) tab for canary release details

カナリアリリースの停止または本番リリースへの昇格

Beta(IP)」タブの「設定の編集」パネルで:

  • カナリアリリースの停止: カナリアリリースの停止 をクリックします。カナリア構成は破棄され、すべてのノードが正式版構成を引き続き使用します。

  • 本番リリースへの昇格: 本番リリース をクリックします。構成内容の比較 ダイアログボックスで構成内容を確認し、本番リリース をクリックします。カナリア構成が新しい正式版となり、カナリアリリースは終了します。

タグベースのカナリアリリースによる構成のリリース

タグベースのカナリアリリースでは、IP アドレスではなくアプリケーションタグでノードを対象とします。タグは Pod の再起動やノードの再構築後も維持されるため、Kubernetes やその他の動的環境において、より高い耐障害性を実現します。

重要
  • タグベースのカナリアリリースを利用するには、MSE Nacos 2.2.3.3 以降が必要です。エンジンをバージョン 2.2.3.3 以降にアップグレードしてください。

  • カスタムアプリケーションタグを利用するには、オープンソース版 Nacos Client 2.3.2 以降が必要です。

  • 環境変数によるタグ注入を利用するには、Nacos Client 2.4.2 以降が必要です。

ステップ 1:クライアントでのアプリケーションタグの設定

アプリケーションノードにキーと値のペア形式でタグを割り当てます。タグはプロパティ、JVM パラメーター、または環境変数のいずれかで設定できます。同一のキーが複数の場所で定義されている場合、優先順位は次のとおりです:プロパティ > JVM パラメーター > 環境変数

nacos.config.gray.label は、カナリアリリース用の組み込みデフォルトタグキーです。

// オプション 1:プロパティで設定
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "<your-nacos-endpoint>");
properties.put("project.name", "<your-app-name>");
properties.put("nacos.config.gray.label", "<your-canary-tag>");

// オプション 2:JVM パラメーターとして設定
// -Dnacos.config.gray.label=<your-canary-tag>

// オプション 3:環境変数として設定
// nacos_config_gray_label=<your-canary-tag>

// 構成サービスを作成し、構成をサブスクライブ
NacosConfigService configService = new NacosConfigService(properties);

String dataId = "<your-data-id>";
String group = "<your-group>";

configService.addListener(dataId, group, new Listener() {
    @Override
    public Executor getExecutor() {
        return null;
    }

    @Override
    public void receiveConfigInfo(String configInfo) {
        System.out.println("Received config: " + configInfo);
    }
});

以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<your-nacos-endpoint>Nacos サーバーエンドポイントmse-xxx.nacos.mse.aliyuncs.com:8848
<your-app-name>アプリケーション名order-service
<your-canary-tag>カナリアリリースのタグ値canary-v2
<your-data-id>Nacos 構成のデータ IDcom.example.app.properties
<your-group>Nacos 構成のグループDEFAULT_GROUP

ステップ 2:サーバーでのリスナータグの確認

クライアントがタグ付きで接続した後、サーバーがそれらのタグを正しく認識しているかを確認します。対象構成のリスナー一覧を開きます。各リスナーには関連付けられたタグが表示されます。

View listener tags on the server

ステップ 3:タグベースのカナリア構成のリリース

  1. 構成の編集 をクリックし、リリースタイプタグベースのカナリアリリース に設定します。

  2. 既存のキーと値のペアのタグを選択します。コンソールには、選択したタグに一致するノード数が表示されます。

    Select a tag pair for the canary release

  3. 構成内容を編集し、カナリアリリース をクリックします。

ステップ 4:リリースの確認と範囲の拡大

カナリアバージョンをリリースした後:

  1. カナリアグループの確認: リスナー照会 タブで、各ノードがどの構成バージョンを受信したかを確認します。

  2. カナリア詳細の表示: 構成詳細 タブで、現在のカナリアバージョンの内容を確認します。

  3. リリース範囲の拡大: カナリアグループが正常であることを確認した後、タグ値を拡張してより多くのノードを含めます。対象となるすべてのノードがカバーされるまで繰り返します。

  4. 本番リリースへの昇格: 本番リリース をクリックして、カナリア構成を新しい正式版に昇格させます。カナリアバージョンは自動的に停止します。

  5. 必要に応じたロールバック: 問題が発生した場合は、カナリアリリースの停止 をクリックしてカナリア構成を破棄します。すべてのノードは正式版に戻ります。

並列カナリアバージョンの実行

単一の構成に対して、同時に複数のアクティブなバージョンを設定できます。

  • 1 つの 正式版

  • 1 つの IP アドレスベースのカナリアバージョン

  • 最大 5 つの タグベースのカナリアバージョン(デフォルト)

バージョンのマッチング優先順位

ノードが構成をリクエストすると、MSE Nacos は以下の順序でバージョンを評価します。

  1. IP アドレスベースのカナリアバージョン: ノードの IP アドレスがカナリア IP リストと一致する場合、このバージョンが返されます。

  2. タグベースのカナリアバージョン: IP の一致がない場合、priority フィールド(数値が高いほど優先度が高い)に基づいてソートされたタグベースのカナリアバージョンがチェックされます。優先度が同じ場合は、名前順にソートされます。

  3. 正式版: カナリアバージョンに一致するものが存在しない場合、正式版が返されます。

MSE コンソールの リスナー照会 ページで、各ノードにマッチした構成バージョンを確認できます。

説明

並列カナリアバージョンを利用するには、MSE Nacos 2.3.0 以降が必要です。構成あたりのタグベースのカナリアバージョン数は、デフォルトで最大 5 つまでです。この上限を超えると、新たなカナリアリリースはブロックされます。

高度なタグ構成

複数のタグの設定

Nacos では、nacos.app.conn.labels パラメーターを使用して、アプリケーションに複数のキーと値のペアのタグを注入できます。フォーマットは "k1=v1,k2=v2,k3=v3" です。

// オプション 1:プロパティで設定
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "<your-nacos-endpoint>");
properties.put("project.name", "<your-app-name>");
properties.put("nacos.app.conn.labels", "app=order-service,site=hangzhou-c,env=staging");

// オプション 2:JVM パラメーターとして設定
// -Dnacos.app.conn.labels="app=order-service,site=hangzhou-c,env=staging"

// オプション 3:環境変数として設定
// nacos_app_conn_labels="app=order-service,site=hangzhou-c,env=staging"

NacosConfigService configService = new NacosConfigService(properties);

String dataId = "<your-data-id>";
String group = "<your-group>";

configService.addListener(dataId, group, new Listener() {
    @Override
    public Executor getExecutor() {
        return null;
    }

    @Override
    public void receiveConfigInfo(String configInfo) {
        System.out.println("Received config: " + configInfo);
    }
});

カスタムタグコレクターの実装(SPI)

動的または複雑なタグロジックを実現するには、com.alibaba.nacos.common.labels.LabelsCollector SPI インターフェイスを実装し、サービスとして登録します。

package com.example.labels;

import com.alibaba.nacos.common.labels.LabelsCollector;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class CustomLabelsCollector implements LabelsCollector {

    @Override
    public String getName() {
        return "custom-labels";
    }

    @Override
    public Map<String, String> collectLabels(Properties properties) {
        Map<String, String> labels = new HashMap<>();
        // タグを決定するカスタムロジックを追加
        labels.put("env", System.getenv("DEPLOY_ENV"));
        labels.put("region", System.getenv("DEPLOY_REGION"));
        return labels;
    }

    @Override
    public int getOrder() {
        return 1;
    }
}

この実装を利用するには、サービスとして公開します。

タグのフォーマット要件

タグのキーおよび値には、大文字・小文字、数字、アンダースコア(_)、ハイフン(-)、ピリオド(.)が使用可能です。それ以外のフォーマットのタグは無視されます。

nacos.app.conn.labels を使用して複数のキーと値のペアを指定する場合、"k1=v1,k2=v2,k3=v3" のフォーマットを使用します。値が指定されていないエントリは無視されます。たとえば、"k1=v1,k2" という指定では、k1=v1 のみが解析されます。

タグ計画のベストプラクティス

ビジネスへの影響範囲に基づいてアプリケーションタグを計画し、段階的な展開を可能にしてリスクを最小限に抑えます。

  • アプリケーション名によるタグ付け: まず非重要アプリケーションに対してリリースします。問題がないことを確認した後、コアアプリケーションへ展開を拡大します。

  • トラフィックグループによるタグ付け: 内部ユーザー向けに、トラフィックの入り口でカナリアマシンのグループを分離します。これらのマシンに専用のカナリアタグを割り当てることで、本番ユーザーに公開する前に内部トラフィックで変更内容を検証できます。