當您在進行應用迭代升級時面臨新版本兼容性和穩定性挑戰時,可以在Knative on ASM中基于流量灰度發布服務。創建Knative服務時,系統會自動創建第一個修訂版本Revision,隨著服務配置的每次更新變化,Knative都會自動生成新的修訂版本,并通過靈活調整發往不同修訂版本的流量比例,實現對新版本的精準、實時驗證,從而顯著降低大規模部署新版本可能引發的潛在風險,保障服務的連續性、用戶體驗以及問題的及時發現與修復。
前提條件
已使用Knative on ASM創建Knative服務。具體操作,請參見使用Knative on ASM部署Serverless應用。
本示例以默認域名example.com為例為您演示功能。如需使用自定義域名, 請參見在Knative on ASM中使用自定義域名。
通過控制臺創建修訂版本
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
單擊服務管理頁簽,在服務列表,單擊目標服務名稱,然后在頁面右上角,單擊創建修訂版本。
在基本信息配置向導的下方,單擊高級設置,然后單擊環境變量右側的新增,設置最新修訂版本的類型為自定義,變量名稱為TARGET,變量/變量引用為Knative on ASM,然后單擊下一步。
在流量設置配置向導,設置最新修訂版本的流量比例%為0,舊版本服務為100,然后單擊創建。
說明所有修訂版本的流量比例百分比之和需等于100。
創建完成后,您可以單擊服務管理頁簽,在服務列表,單擊目標服務名稱,然后在修訂版本信息區域查看新創建服務版本的詳細信息。
執行以下命令,訪問服務。
curl http://helloworld-go.default.example.com
預期輸出:
Hello Knative!
預期輸出表明,由于新版本服務的流量比例為0,訪問helloworld-go服務時仍然會請求到舊版本的服務。
修改流量比例灰度發布服務
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
單擊服務管理頁簽,在服務列表單擊目標服務名稱,在頁面右上角單擊設置流量比例,在設置流量比例對話框,將新版本和舊版本的流量比例均設置為50,然后單擊確定。
服務流量比例設置成功后,單擊服務管理頁簽,在服務列表,單擊目標服務名稱,然后在修訂版本信息區域查看新版本和舊版本服務的詳細信息。
執行以下命令,訪問服務。
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;
預期輸出:
Hello Knative on ASM! Hello Knative on ASM! Hello Knative! Hello Knative on ASM! Hello Knative! Hello Knative! Hello Knative! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative! Hello Knative on ASM! Hello Knative! Hello Knative on ASM! Hello Knative on ASM! Hello Knative! Hello Knative!
預期輸出表明,由于新、舊版本的流量比例各為50%,所以當前訪問helloworld服務時,基本按照50%的比例進行流量分配,修改流量比例灰度發布服務成功。
繼續設置流量比例灰度發布服務,直到新版本服務的流量比例為100%。
流量比例調整過程中,如果發現新版本存在問題,請隨時調整流量比例進行回滾操作。
執行以下命令,再次訪問服務。
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;
預期輸出:
Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM!
預期輸出表明,由于新版本服務的流量比例為100%,訪問helloworld-go服務時,所有流量都分配至新版本,即灰度發布服務成功。
相關文檔
Knative Serving為每個Pod注入QUEUE代理容器(queue-proxy)。該容器負責向Autoscaler報告業務容器的并發指標。接收到這些指標之后,Autoscaler會根據并發請求數及縮放算法,調整Deployment的Pod數量,從而實現自動擴縮容。具體操作,請參見基于流量請求數實現服務自動擴縮容。