Azure 容器應用程式中的流量分割
依預設,啟用輸入時,所有流量都會路由至最新部署的修訂。 當您在容器應用程式中啟用多重修訂模式時,可以在使用中的修訂之間分割傳入流量。
流量分割對於測試容器應用程式的更新很有用。 您可以使用流量分割,在藍綠部署或 A/B 測試中逐步分階段實施新修訂。
流量分割是以路由至每個修訂的流量權重 (百分比) 為基礎。 所有流量分割規則的合併權重必須等於 100%。 您可以依修訂名稱或修訂標籤指定修訂。
本文說明如何設定容器應用程式的流量分割規則。 若要執行下列範例,您需要具有多重修訂的容器應用程式。
設定流量分割
使用 az containerapp ingress traffic set
命令設定修訂之間的流量分割。 您可以使用 --revision-weight
參數依名稱指定修訂,或使用 --label-weight
參數依修訂標籤指定修訂。
下列命令會將每個修訂的流量權數設定為 50%:
az containerapp ingress traffic set \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--revision-weight <REVISION_1>=50 <REVISION_2>=50
請務必將 <>
所包圍的預留位置值取代為您自己的值。
此命令會將修訂 <LABEL_1> 的流量權數設定為 80%,並將修訂 <LABEL_2> 的流量權數設定為 20%:
az containerapp ingress traffic set \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--label-weight <LABEL_1>=80 <LABEL_2>=20
- 前往 Azure 入口網站的容器應用程式。
- 從左側功能表中選取 [修訂管理]。
- 如果修訂模式為單一,請將模式設定為多重。
- 選取 [選擇修訂模式]。
- 選取 [多重:數個修訂同時使用中]。
- 選取套用。
- 等候 [修訂模式] 更新為 [多重]。
- 選取 [顯示非使用中的修訂]。
- 如果您沒有多重修訂,則可以建立新修訂。
- 選取 [建立新修訂]。
- 您可以使用預設設定或自訂修訂。
- 輸入修訂的名稱/尾碼。
- 選取 建立。
- 等候修訂部署。
- 針對要將流量路由傳送至的修訂,選取 [使用中]。
- 在 [流量] 資料行中,輸入要路由傳送至每個修訂的流量百分比。 所有流量的合併百分比必須等於 100%。
- 選取 [儲存]。
將 configuration.ingress.traffic
屬性新增至容器應用程式範本的 ingress
區段,藉此啟用流量分割。 您可以使用 revisionName
屬性依名稱指定修訂,或使用 label
屬性依修訂標籤指定修訂。
下列範例會將 100% 的流量設定為最新部署的修訂:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"latestRevision": true,
"weight": 100
}
]
},
},
下列範例顯示依名稱在兩個修訂之間的流量分割:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"revisionName": "my-example-app--5g3ty20",
"weight": 50
},
{
"revisionName": "my-example-app--qcfkbsv",
"weight": 50
}
],
},
},
下列範例顯示依標籤在兩個修訂之間的流量分割:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"weight": 50,
"label": "v-2"
},
{
"weight": 50,
"label": "v-1"
}
],
},
},
使用案例
下列案例會說明常見使用案例的組態設定。 這些範例會以 JSON 格式顯示,但您也可以使用 Azure 入口網站或 Azure CLI 來設定流量分割。
快速反覆作業
如果您經常反覆開發容器應用程式,則可以將流量規則設定為一律將所有流量移至最新部署的修訂。
下列範例範本會將所有流量路由傳送至最新部署的修訂:
"ingress": {
"traffic": [
{
"latestRevision": true,
"weight": 100
}
]
}
當您滿意最新修訂之後,便可以將 ingress
設定更新為以下內容,以鎖定該修訂的流量:
"ingress": {
"traffic": [
{
"latestRevision": false, // optional
"revisionName": "myapp--knowngoodrevision",
"weight": 100
}
]
}
更新現有的修訂
假設您有可提供 100% 流量的已知良好修訂,卻又想要對應用程式發出更新。 您可以使用新修訂的直接端點來部署及測試新的修訂,而不會影響提供應用程式的主要修訂。
當您滿意更新後的修訂之後,便可以將一部分流量移至新的修訂,以進行測試和驗證。
下列範本會將 20% 的流量移至更新後的修訂:
"ingress": {
"traffic": [
{
"revisionName": "myapp--knowngoodrevision",
"weight": 80
},
{
"revisionName": "myapp--newerrevision",
"weight": 20
}
]
}
暫存微服務
在建置微服務時,建議您為相同的應用程式保有生產端點和暫存端點。 請使用標籤來確保流量不會在不同修訂之間切換。
下列範例範本會將標籤套用至不同的修訂。
"ingress": {
"traffic": [
{
"revisionName": "myapp--knowngoodrevision",
"weight": 100
},
{
"revisionName": "myapp--98fdgt",
"weight": 0,
"label": "staging"
}
]
}
下一步
藍綠部署 (部分機器翻譯)