全部產品
Search
文件中心

Microservices Engine:配置灰階發布

更新時間:Oct 22, 2025

MSE註冊配置中心支援灰階發布,即在配置正式發布前先進行小部分的發布驗證,降低配置推送的風險。本文介紹如何在MSE上為Nacos執行個體配置灰階發布。

前提條件

說明
  • 用戶端Nacos Client建議使用2.x版本。

背景資訊

在使用配置中心對叢集配置進行集中管理時,如果對某個配置進行了修改,一般情況下新的配置將會覆蓋舊的配置,同時會全量地推送到叢集中。這種情況下,由於是全量推送,一旦配置出錯,可能會導致整個叢集都無法運行,風險極大。

因此,在需要對配置進行編輯時,推薦先進行灰階發布,讓叢集中一部分機器先收到新版本的配置內容,預先進行功能的驗證,如果驗證通過,再逐步擴大灰階,直至全量正式發布,降低配置變更風險。

在配置變更過程中,需要選擇灰階節點來進行灰階發布。目前,MSE Nacos支援兩種灰階發布的方式:基於IP地址的灰階和基於標籤的灰階。

基於IP地址灰階

基於IP的灰階發布是一種基礎的灰階方式,可以通過選擇IP地址清單來確定需要灰階的機器,在一些小型業務系統中,這種方式可以滿足灰階的需求,能夠大大降低配置推送的風險,減少因配置出錯導致的故障。

建立Beta配置

  1. 登入MSE註冊配置中心控制台,並在頂部功能表列選擇地區。

  2. 在左側導覽列,選擇注册配置中心 > 实例列表

  3. 实例列表頁面,單擊目標執行個體名稱。

  4. 在左側導覽列,選擇配置管理 > 配置列表

  5. 在目標配置的操作列單擊编辑。在编辑配置面板,发布方式選擇基於IP灰階發布

    Beta發布

  6. 單擊應用節點 IP輸入框,在IP地址清單中選擇待灰階推送的IP地址。

    您也可以選擇手動輸入IP地址,手動輸入支援IP地址補全。

    說明

    IP地址指訂閱了該配置的機器IP,多個IP用英文逗號(,)分隔。

  7. 修改完配置後,單擊发布灰度。在配置内容对比對話方塊中確認當前正式版本內容本次發布內容,然後單擊发布

查看Beta配置

  1. 登入MSE註冊配置中心控制台,並在頂部功能表列選擇地區。

  2. 在左側導覽列,選擇注册配置中心 > 实例列表

  3. 实例列表頁面,單擊目標執行個體名稱。

  4. 在左側導覽列,選擇配置管理 > 配置列表

  5. 在正在Beta發布的目標配置的操作列單擊编辑

  6. 编辑配置面板,單擊Beta(IP)頁簽,查看Beta(IP)發布資訊。

    BETA

其他動作

  • 停止灰階:在编辑配置Beta(IP)頁簽中,單擊停止灰度,即可取消Beta發布。

  • 全量發布:在编辑配置Beta(IP)頁簽中,單擊全量发布,在彈出的配置内容对比對話方塊中確認配置資訊,單擊全量发布,Beta發布的內容將會發布為正式版本,當前Beta版本也將終止。

基於IP地址的灰階存在以下問題:

  • 在Nacos1.x版本的用戶端中,因為經過了一層SLB的中轉,服務端無法精準擷取用戶端的IP地址。

  • 基於K8s的架構,節點的重建可能會導致機器的IP地址變化,導致基於IP的灰階版本失效。

基於應用標籤灰階

在MSE Nacos 2.2.3.3及以上版本中,支援基於應用標籤灰階的方式進行灰階發布,您可以在用戶端對應用節點進列標籤設定並針對標籤進行灰階發布。

重要
  • MSE Nacos版本在2.2.3.3及以上支援應用標籤灰階,您需要升級引擎版本至2.2.3.3及以上。

  • 開源Nacos-Client版本在2.3.2及以上支援自訂應用標籤灰階,您需要升級用戶端版本至2.3.2及以上。

  • 通過環境變數注入標籤的能力,需升級Nacos-Client至2.4.2及以上。

用戶端設定應用標籤

您可以通過以下方式設定應用的標籤,應用標籤為key-value格式。可以通過properties,JVM參數和環境變數三種方式指定。相同key的情況下,預設優先順序:properties > JVM參數 > env環境變數,nacos.config.gray.label是Nacos內建的預設配置灰階標籤。

//1.properties形式傳入
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "your endpoint");
properties.put("project.name", "your app name");
properties.put("nacos.config.gray.label","yourgrayname");


//2.JVM參數設定
設定啟動參數-Dnacos.config.gray.label=yourgrayname

//3.env環境變數指定
設定環境變數 nacos_config_gray_label=yourgrayname

 String dataId = "gray_test_dataid";
 String group = "test-group";
        
 configService.addListener(dataId, group, new Listener() {
        @Override
        public Executor getExecutor() {
            return null;
        }
            
        @Override
        public void receiveConfigInfo(String configInfo) {
            System.out.println("receiveConfig:" + configInfo);
        }
 });

服務端發布標籤灰階

  • 查看監聽者標籤

    用戶端完成應用標籤注入後,可以通過服務端查看配置的監聽者列表,查看每個監聽者攜帶的標籤。

    image

  • 發布灰階標籤配置

    單擊編輯配置,選擇基於標籤灰階發布,然後選擇應用節點當前存在的標籤索引值對,可以看到選擇的索引值對所匹配到的節點數。image.png

發布灰階標籤版本後,在監聽查詢可以看到當前用戶端所匹配的配置版本。在配置詳情可以看到當前灰階版本的詳情。

在進行第一批灰階觀察後,可以通過擴大編輯標籤的值範圍來逐步擴大灰階,直到進行全量發布,單擊全量發布後,將停止對應的灰階版本。如果在灰階過程中發現業務異常,可以單擊停止灰階進行一鍵自動復原。

相關問題

應用標籤設定的進階用法

除了設定單個標籤nacos.config.gray.label之外,Nacos還支援設定多個標籤以及自訂標籤Collector SPI的形式來設定標籤,支援更加靈活自訂標籤擷取邏輯。

  • 設定多值標籤。

    Nacos支援在應用標籤中注入多個標籤索引值對。可以在properties和JVM參數中指定nacos.app.conn.labels參數(格式樣本:nacos.app.conn.labels="k1=v1,k2=v2,k3=v3"),或者在環境變數中指定nacos_app_conn_labels參數。

    //1.properties形式傳入
    Properties properties = new Properties();
    properties.put(PropertyKeyConst.SERVER_ADDR, "your endpoint");
    properties.put("project.name", "your app name");
    properties.put("nacos.app.conn.labels","app=demo,site=hangzhou-c,otherkey=othervaue");
    
    //2.JVM參數設定
    設定啟動參數-Dnacos.app.conn.labels="app=demo,site=hangzhou-c,otherkey=othervaue"
    
    //3.env環境變數指定
    設定環境變數 nacos_app_conn_labels="app=demo,site=hangzhou-c,otherkey=othervaue"
    
    NacosConfigService configService = new NacosConfigService(properties);
    
    String dataId = "gray_test_dataid";
    String group = "test-group";
            
    configService.addListener(dataId, group, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }
                
            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("receiveConfig:" + configInfo);
            }
    });
    
  • 自訂應用標籤SPI

    Nacos-Client定義了自訂應用標籤的SPI,可以通過實現com.alibaba.nacos.common.labels.LabelsCollector介面,並將具體實作類別發布為service的方式實現自訂的應用標籤SPI。

    package your.demo.test;
    
    import com.alibaba.nacos.common.labels.LabelsCollector;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    /**
     * TestLabelsCollector.
     *
     * @author yourname
     */
    public class TestLabelsCollector implements LabelsCollector {
        
        @Override
        public String getName() {
            return "testlables";
        }
        
        @Override
        public Map<String, String> collectLabels(Properties properties) {
            Map<String, String> labels = new HashMap<>();
            labels.put("test", "implements your lables logic");
            return labels;
        }
    
      
        @Override
        public int getOrder() {
            return 1;
        }
    }

多灰階版本並行

對於一個配置來說,可能存在多個配置的版本,包括正式版本,基於IP的灰階版本,基於標籤的灰階版本,其中基於標籤的灰階發行就緒多個版本。當一個配置存在多個版本時,Nacos服務端的配置查詢及推送將以如下的優先順序規則進行匹配。 基於IP的灰階版本>基於標籤的灰階版本>正式版本。

在處理多個基於標籤的灰階版本時,按照優先順序priority欄位的值進行排序,優先順序priority值越大,優先順序越高;如果優先順序priority值相等,則按照灰階版本名稱進行排序,建議將不同的灰階版本設定明確的優先順序。

當設定了一個應用標籤的應用節點,優先匹配是否存在針對當前應用節點IP的灰階版本,如果存在,則返回基於IP灰階的配置版本,如果不存在,則嘗試按照優先順序匹配基於標籤的灰階版本,如果匹配成功,則返回對應的配置灰階版本,如果沒有匹配的標籤灰階版本,則返回當前配置的正式版本。可以在MSE控制台的監聽查詢介面查看每個應用節點當前所匹配到的配置版本。

說明

MSE Nacos 2.3.0+版本支援多灰階版本並行,對一個配置所發布的最大灰階版本數量有一定限制,預設最大支援5個標籤灰階的版本,超過上限時,灰階發布將被攔截。

應用標籤規劃

在規劃應用節點的標籤時,推薦根據業務影響範圍的大小維度進列標籤規劃,以逐步灰階並降低變更風險。以下是常見的最佳實務:

  • 將應用程式名稱作為標籤。先對部分非關鍵鏈路上的應用進行灰階,觀察確認無異常之後再擴大灰階至核心鏈路的應用。

  • 業務側可以通過流量入口側對系統上下遊的機器進行流量隔離。例如,針對公司內部使用者確定一批灰階機器,可以為這部分機器設定單獨的灰階標籤,以達到內部使用者灰階的效果。

應用標籤的格式

標籤索引值key-value允許使用的字元包括英文字母大小寫、數字、底線“_”、橫杠“-”和點“.”。如果傳入其他格式的標籤將被忽略處理。如果通過參數nacos.app.conn.labels指定多個索引值對時,格式必須遵循 "k1=v1,k2=v2,k3=v3" 格式。如果傳入"k1=v1,k2",那麼k2參數將會被忽略,最終解析成k1=v1