Knative會管理不同Revision(修訂版本)之間的流量分配。您可以在控制台為不同Revision設定版本對應的流量比例,然後不斷調整流量比例進行觀察,直到100%的業務流量全部切流至新版本服務,以完成灰階發布服務。
前提條件
已在叢集中部署Knative,請參見部署Knative。
步驟一:建立Knative服務
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊建立服務,部署一個名為helloworld-go的服務,部署完成後單擊建立。
關鍵配置項如下所示,更多配置項資訊,請參見部署Knative服務。
配置項
說明
命名空間
選擇該服務所屬的命名空間。
服務名稱
自訂該服務的名稱,本例服務名稱為helloworld-go。
鏡像名稱
您可以單擊選擇鏡像,在彈出的對話方塊中選擇所需的鏡像並單擊確定。您還可以填寫私人registry。填寫的格式為domainname/namespace/imagename:tag。本例中為registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go。
鏡像版本
您可以單擊選擇鏡像版本選擇鏡像的版本。若不指定,預設為latest。本例中鏡像版本為73fbdd56。
訪問協議
支援HTTP和gRPC兩種訪問協議。
說明說明
gRPC是基於HTTP2協議標準設計和ProtoBuf(Protocol Buffers)序列化協議開發的,且支援眾多開發語言。與HTTP相比,HTTP2在發送和接收方面更緊湊和高效。
容器連接埠
設定暴露的容器訪問連接埠,連接埠號碼必須介於1~65535。
若目標服務的狀態列顯示成功,表明服務已部署成功。
在服務管理頁面的預設網域名稱和訪問網關列,分別擷取
helloworld-go
服務的網域名稱和網關地址。執行以下命令,訪問
helloworld-go
服務。curl -H "host: <預設網域名稱>" http://<訪問網關IP> # 網關IP和預設網域名稱請以您的實際資料為準。
預期輸出:
Hello World!
預期輸出表明,服務已建立成功並可以正常訪問。
步驟二:通過建立修訂版本灰階發布服務
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在服務管理頁面,單擊目標服務名稱,然後在服務詳情頁面,單擊建立修訂版本。
建立修訂版本。
選擇服務管理頁簽,然後單擊目標服務右側操作列下的詳情。
單擊建立修訂版本,在基本資料設定精靈步驟,單擊進階設定,設定最新修訂版本的環境變數為
TARGET=Knative
,然後單擊下一步。在流量設定設定精靈步驟,設定最新修訂版本的流量比例為0,單擊建立。
說明所有修訂版本的流量比例之和需要等於100。
建立完成後,選擇服務管理頁簽,可以看到新建立服務版本的詳細資料。
執行以下命令,訪問
helloworld-go
服務。curl -H "host: <預設網域名稱>" http://<訪問網關IP> # 替換為實際的網關IP和預設網域名稱。
預期輸出:
Hello World!
預期輸出結果表明,服務已建立成功並可以正常訪問。由於新版本服務的流量比例為0,所以訪問helloworld-go服務,還是請求到舊版本的服務。
修改流量比例灰階發布服務。
在服務管理頁面,單擊目標服務右側操作列下的詳情。
單擊設定流量比例,在設定流量比例對話方塊,將新版本和舊版本的流量比例都設定為50%,然後單擊確定。
服務流量比例設定成功後,選擇服務管理頁簽,可以看到新版本和舊版本服務的詳細資料。
執行以下命令,訪問服務。
while true; do curl -H "host: <預設網域名稱>" http://<訪問網關IP>; slesp 1; done # 網關IP和預設網域名稱請以您的實際資料為準。
說明這個命令會一直運行,直到您手動停止它。如果您只想觀察一段時間,可以按
Ctrl + C
按鍵組合來終止命令的運行。預期輸出:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...
由於新、舊版本的流量比例各為50%,所以當前訪問helloworld-go服務的話,基本是按50%進行流量分配。
您可以通過調整流量比例繼續灰階發布服務,直到新版本服務的流量比例為100%,完成灰階發布服務。在這個過程中,如果發現新版本有問題,您可以隨時通過調整流量比例的方式進行復原操作。
相關文檔
您可以基於流量請求數實現Knative服務的自動擴縮容,請參見基於流量請求數實現服務自動擴縮容。