在Knative中基于流量灰度發(fā)布服務(wù)
Knative提供了基于流量的灰度發(fā)布能力,您可以根據(jù)流量百分比灰度發(fā)布服務(wù)。本文介紹如何在Knative中基于流量灰度發(fā)布服務(wù)。
前提條件
已創(chuàng)建ACK托管集群或ACK Serverless集群。具體操作,請(qǐng)參見創(chuàng)建ACK Serverless集群、創(chuàng)建Kubernetes托管版集群。
已為集群部署Knative,具體操作,請(qǐng)參見在ACK集群中部署Knative、在ACK Serverless集群中部署Knative。
步驟一:創(chuàng)建服務(wù)
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在Knative頁面的服務(wù)管理頁簽下,選擇命名空間為default,然后單擊創(chuàng)建服務(wù),部署一個(gè)名為helloworld-go的服務(wù),部署完成后單擊創(chuàng)建。
關(guān)鍵配置項(xiàng)如下所示,更多配置項(xiàng)信息,請(qǐng)參見部署Knative服務(wù)。
配置項(xiàng)
說明
命名空間
選擇該服務(wù)所屬的命名空間。
服務(wù)名稱
自定義該服務(wù)的名稱,本例服務(wù)名稱為helloworld-go。
鏡像名稱
您可以單擊選擇鏡像,在彈出的對(duì)話框中選擇所需的鏡像并單擊確定。您還可以填寫私有registry。填寫的格式為domainname/namespace/imagename:tag。本例中為registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go。
鏡像版本
您可以單擊選擇鏡像版本選擇鏡像的版本。若不指定,默認(rèn)為latest。本例中鏡像版本為73fbdd56。
訪問協(xié)議
支持HTTP和gRPC兩種訪問協(xié)議。
說明說明
gRPC是基于HTTP2協(xié)議標(biāo)準(zhǔn)設(shè)計(jì)和ProtoBuf(Protocol Buffers)序列化協(xié)議開發(fā)的,且支持眾多開發(fā)語言。與HTTP相比,HTTP2在發(fā)送和接收方面更緊湊和高效。
容器端口
設(shè)置暴露的容器訪問端口,端口號(hào)必須介于1~65535。
若目標(biāo)服務(wù)的狀態(tài)列顯示成功,表明服務(wù)已部署成功。
在服務(wù)管理頁面的默認(rèn)域名和訪問網(wǎng)關(guān)列,分別獲取
helloworld-go
服務(wù)的域名和網(wǎng)關(guān)地址。執(zhí)行以下命令,訪問
helloworld-go
服務(wù)。curl -H "host: <默認(rèn)域名>" http://<訪問網(wǎng)關(guān)IP> # 網(wǎng)關(guān)IP和默認(rèn)域名請(qǐng)以您的實(shí)際數(shù)據(jù)為準(zhǔn)。
預(yù)期輸出:
Hello World!
預(yù)期輸出表明,服務(wù)已創(chuàng)建成功并可以正常訪問。
步驟二:通過創(chuàng)建修訂版本灰度發(fā)布服務(wù)
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)管理頁面,單擊目標(biāo)服務(wù)名稱,然后在服務(wù)詳情頁面,單擊創(chuàng)建修訂版本。
創(chuàng)建修訂版本。
選擇服務(wù)管理頁簽,然后單擊目標(biāo)服務(wù)右側(cè)操作列下的詳情。
單擊創(chuàng)建修訂版本。
在基本信息配置向?qū)Р襟E,單擊高級(jí)設(shè)置,設(shè)置最新修訂版本的環(huán)境變量為
TARGET=Knative
。單擊下一步。
在流量設(shè)置配置向?qū)Р襟E,設(shè)置最新修訂版本的流量比例為0,單擊創(chuàng)建。
說明所有修訂版本的流量比例之和需要等于100。
創(chuàng)建完成后,選擇服務(wù)管理頁簽,可以看到新創(chuàng)建服務(wù)版本的詳細(xì)信息。
執(zhí)行以下命令,訪問
helloworld-go
服務(wù)。curl -H "host: <默認(rèn)域名>" http://<訪問網(wǎng)關(guān)IP> # 網(wǎng)關(guān)IP和默認(rèn)域名請(qǐng)以您的實(shí)際數(shù)據(jù)為準(zhǔn)。
預(yù)期輸出:
Hello World!
預(yù)期輸出結(jié)果表明,服務(wù)已創(chuàng)建成功并可以正常訪問。由于新版本服務(wù)的流量比例為0,所以訪問helloworld-go服務(wù),還是請(qǐng)求到舊版本的服務(wù)。
修改流量比例灰度發(fā)布服務(wù)。
在服務(wù)管理頁面,單擊目標(biāo)服務(wù)右側(cè)操作列下的詳情。
單擊設(shè)置流量比例,在設(shè)置流量比例對(duì)話框中,將新版本和舊版本的流量比例都設(shè)置為50%,然后單擊確定。
服務(wù)流量比例設(shè)置成功后,選擇服務(wù)管理頁簽,可以看到新版本和舊版本服務(wù)的詳細(xì)信息。
執(zhí)行以下命令,訪問服務(wù)。
while true; do curl -H "host: <默認(rèn)域名>" http://<訪問網(wǎng)關(guān)IP>; slesp 1; done # 網(wǎng)關(guān)IP和默認(rèn)域名請(qǐng)以您的實(shí)際數(shù)據(jù)為準(zhǔn)。
說明這個(gè)命令會(huì)一直運(yùn)行,直到您手動(dòng)停止它。如果您只想觀察一段時(shí)間,可以按
Ctrl + C
組合鍵來終止命令的運(yùn)行。預(yù)期輸出:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...
由于新、舊版本的流量比例各為50%,所以當(dāng)前訪問helloworld-go服務(wù)的話,基本是按50%進(jìn)行流量分配。
您可以通過調(diào)整流量比例繼續(xù)灰度發(fā)布服務(wù),直到新版本服務(wù)的流量比例為100%,完成灰度發(fā)布服務(wù)。在這個(gè)過程中,如果發(fā)現(xiàn)新版本有問題,您可以隨時(shí)通過調(diào)整流量比例的方式進(jìn)行回滾操作。