Knative 服務可讓您指定應接收流量的修訂版本,以及修訂版本接收的流量百分比。這項功能可讓您復原至先前的修訂版本、漸進式推出修訂版本 (也稱為藍綠部署),以及在多個修訂版本之間拆分流量。本頁說明如何使用這項功能,管理 Knative 服務修訂版本的流量。
還原至先前的修訂版本
如要還原為先前的修訂版本,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出所需服務,然後按一下。
按一下「Revisions」(修訂版本) 分頁,顯示該服務的目前修訂版本清單。
在修訂版本清單中,按一下要還原的修訂版本右側的省略號圖示:
按一下「管理流量」,顯示管理流量表單:
- 在下拉式清單中,選取要復原的前一個修訂版本。
- 將先前修訂版本的流量百分比設為 100。
- 將目前提供服務的修訂版本百分比設為 0。
- 按一下 [儲存]。
指令列
使用下列指令:
gcloud run services update-traffic SERVICE --to-revisions REVISION=100
- 將 SERVICE 改為服務名稱。
- 將 REVISION 替換成要復原的修訂版本名稱。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
在您的本機檔案中,更新
spec
底下的traffic
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100
取代
- 將 REVISION 替換為要復原的修訂版本名稱。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
逐步推出修訂版本
如要逐步推出新修訂版本 (藍綠部署):
控制台
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出所需服務,然後按一下。
按一下「Deploy New Revision」(部署新修訂版本)。
視需要填寫部署表單,但請務必取消勾選「立即提供這個修訂版本」核取方塊。
按一下 [Deploy] (部署)。
按一下「管理流量」。
新修訂版本會列出,但設定的百分比為 0,因此目前不會處理任何流量。格式:
- 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
- 按一下 [儲存]。
- 重複上述「管理流量」步驟,但要變更百分比,視需要提高新修訂版本的百分比。您不需要重新部署,即可變更流量百分比。
指令列
如要部署想逐步推出的修訂版本,請先將該版本設為不接收任何流量,然後使用
update
指令搭配--no-traffic
參數:gcloud run deploy --image IMAGE --no-traffic
將 IMAGE 替換為您要部署的映像檔。
指定要由新修訂版本處理的流量百分比,例如 5%:
gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
- 將 SERVICE 改為服務名稱。
- 將 REVISION 替換為要逐步推出的修訂版本名稱。如要指定最新修訂版本,可以使用
LATEST
,例如LATEST=5
。 - 將 PERCENTAGE 替換為要傳送至新修訂版本的流量百分比,例如
5
表示要傳送 5% 的流量。
如果修訂版本的成效令人滿意,請重複上述
update-traffic
步驟,但視需要提高百分比值。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
如要對服務進行任何設定變更,請參閱各個設定頁面,並為新修訂版本指定所需修訂版本名稱:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE template: metadata: annotations: ... name: REVISION-NAME ``` Replace
- REVISION-NAME 改成您要的新修訂版本名稱。
在
spec
屬性下方,找出並更新traffic
屬性,讓新修訂版本只處理少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-NEW percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
請注意,百分比總和必須為 100。取代
- 將 REVISION-NEW 替換為您要逐步推出的修訂版本名稱。
- REVISION-FORMER 改為目前放送中修訂版本的名稱。
- PERCENT-NEW,並指定要傳送至新修訂版本的流量百分比,例如使用
10
將 10% 的流量傳送至該修訂版本。 - PERCENT-FORMER,並將其替換為要傳送至舊版修訂內容的流量百分比
在多個修訂版本之間拆分流量
如要在兩個或多個修訂版本之間拆分流量,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出所需服務,然後按一下。
按一下「管理流量」。
系統會列出目前提供服務的新版本。格式:
- 將目前放送的修訂版本百分比設為所需比例。
- 使用下拉式清單選取先前的修訂版本,並將其設為所需的百分比分割。
- 如要拆分更多修訂版本之間的流量,請按一下「新增修訂版本」,選取所需修訂版本,然後設定所需的拆分百分比。
- 按一下 [儲存]。
指令列
在以半形逗號分隔的清單中,指定各修訂版本和流量百分比:
gcloud run services update-traffic SERVICE --to-revisions LIST
取代:
- 將 SERVICE 改為服務名稱。
- LIST,並以半形逗號分隔清單,列出要接收流量的修訂版本和對應的流量百分比,總計為 100%:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
例如:hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50
。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
在您的本機檔案中,更新
traffic
屬性,讓新修訂版本只處理少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-A percent: PERCENT-A - revisionName: REVISION-B percent: PERCENT-B - revisionName: REVISION-C percent: PERCENT-C
請注意,百分比總和必須為 100。取代
- REVISION-A、REVISION-B、REVISION-C 以及您分配流量的修訂版本。
- PERCENT-A、PERCENT-B、PERCENT-C,以及相應修訂版本的百分比。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
將所有流量轉送至最新修訂版本
部署新修訂版本時,您可以盡快讓這個修訂版本和所有後續版本處理 100% 的流量,並覆寫所有已建立的流量拆分:
控制台
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出所需服務,然後按一下。
按一下「Deploy New Revision」(部署新修訂版本)。
視需要填寫部署表單,並務必勾選標示為「立即提供這個修訂版本」的核取方塊。這項操作會覆寫所有現有的流量拆分,讓新修訂版本處理 100% 的流量。
按一下 [Deploy] (部署)。
指令列
如要將所有流量傳送至最近部署的修訂版本,請執行下列操作:
gcloud run services update-traffic SERVICE --to-latest
將 SERVICE 改為服務名稱。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
在您的本機檔案中,更新
spec
底下的traffic
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
使用標記進行測試、流量遷移和復原
部署服務後,您可以建立新修訂版本並指派標記,以便在特定網址存取修訂版本,而不提供流量。接著,您可以使用該標記,逐步將流量遷移至標記的修訂版本,並回溯標記的修訂版本。
這項功能的常見用途是在新服務修訂版本開始處理任何流量前,先進行測試和審查,一般順序如下:
- 在開發期間對容器執行整合測試。
- 將容器部署到僅用於暫存的 Google Cloud 專案,不放送任何流量,並針對已標記的修訂版本進行測試。
- 將其部署至正式環境,但不提供流量,並針對正式環境中標記的修訂版本進行測試。
- 將流量遷移至已標記的修訂版本。
部署新的標記修訂版本
如要將現有服務的新修訂版本部署至正式環境,請按照下列步驟操作:
gcloud run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
取代:
- IMAGE_URL,並提供圖片網址
- TAG_NAME,並將標記名稱改為小寫
您可以使用標記在特定網址直接測試新修訂版本,而不提供流量。測試網址開頭為您提供的標記名稱:
http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io
舉例來說,如果您在 myservice
服務上使用 green
標記名稱,則會在以下網址測試標記的修訂版本:https://green---myservice.default.kuberun.11.111.11.111.nip.io
將流量遷移至已標記的修訂版本
確認新修訂版本運作正常後,您可以使用 Google Cloud 主控台、gcloud 指令列或 YAML 檔案,開始將流量遷移至新版本:
控制台
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出所需服務,然後按一下:
選取要將流量傳送至哪個已標記的修訂版本:
按一下「管理流量」。
找出已標記的修訂版本名稱:該名稱會列出,但設定的百分比為 0,表示目前未處理任何流量。在「Manage traffic」(管理流量) * 表單中:
- 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
- 按一下 [儲存]。
- 視需要重複上述「管理流量」步驟,但要變更百分比,並視需要提高已標記修訂版本的百分比。您不需要重新部署,即可變更流量百分比。
指令列
如要將流量遷移至特定修訂版本標記,請按照下列步驟操作:
gcloud run deploy update-traffic myservice --tag TAG_NAME=TRAFFIC_PERCENT
取代
- 將 TAG_NAME 替換為要將流量遷移至的標記名稱
- TRAFFIC_PERCENT,並指定要由標記版本放送的流量百分比,例如
1
。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
如要變更服務設定,請參閱各設定頁面的說明。
在
spec
屬性下方,找出並更新已標記修訂版本的traffic
屬性,讓已標記的修訂版本只放送少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
請注意,百分比總和必須為 100。取代
- 將 REVISION 替換為已加上標記的修訂版本名稱。
- 將 TAG_NAME 替換為您要逐步推出的代碼名稱。
- PERCENT-NEW,並指定要傳送至已標記修訂版本的流量百分比,例如使用
10
將 10% 的流量傳送至該修訂版本。 - REVISION-FORMER 改為目前放送中修訂版本的名稱。
- PERCENT-FORMER,並將其替換為要傳送至舊版修訂內容的流量百分比
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml