復原、漸進式推出及流量遷移

Knative 服務可讓您指定應接收流量的修訂版本,以及修訂版本接收的流量百分比。這項功能可讓您復原至先前的修訂版本、漸進式推出修訂版本 (也稱為藍綠部署),以及在多個修訂版本之間拆分流量。本頁說明如何使用這項功能,管理 Knative 服務修訂版本的流量。

還原至先前的修訂版本

如要還原為先前的修訂版本,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出所需服務,然後按一下。

  3. 按一下「Revisions」(修訂版本) 分頁,顯示該服務的目前修訂版本清單。

  4. 在修訂版本清單中,按一下要還原的修訂版本右側的省略號圖示:

  5. 按一下「管理流量」,顯示管理流量表單:

    1. 在下拉式清單中,選取要復原的前一個修訂版本。
    2. 將先前修訂版本的流量百分比設為 100。
    3. 將目前提供服務的修訂版本百分比設為 0。
    4. 按一下 [儲存]

指令列

使用下列指令:

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 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

  2. 在您的本機檔案中,更新 spec 底下的 traffic 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    取代

    • REVISION 替換為要復原的修訂版本名稱。
  3. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

逐步推出修訂版本

如要逐步推出新修訂版本 (藍綠部署):

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出所需服務,然後按一下。

  3. 按一下「Deploy New Revision」(部署新修訂版本)

  4. 視需要填寫部署表單,但請務必取消勾選「立即提供這個修訂版本」核取方塊。

  5. 按一下 [Deploy] (部署)

  6. 按一下「管理流量」

  7. 新修訂版本會列出,但設定的百分比為 0,因此目前不會處理任何流量。格式:

    1. 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
    2. 按一下 [儲存]
    3. 重複上述「管理流量」步驟,但要變更百分比,視需要提高新修訂版本的百分比。您不需要重新部署,即可變更流量百分比。

指令列

  1. 如要部署想逐步推出的修訂版本,請先將該版本設為不接收任何流量,然後使用 update 指令搭配 --no-traffic 參數:

    gcloud run deploy --image IMAGE --no-traffic

    IMAGE 替換為您要部署的映像檔。

  2. 指定要由新修訂版本處理的流量百分比,例如 5%:

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • SERVICE 改為服務名稱。
    • REVISION 替換為要逐步推出的修訂版本名稱。如要指定最新修訂版本,可以使用 LATEST,例如 LATEST=5
    • PERCENTAGE 替換為要傳送至新修訂版本的流量百分比,例如 5 表示要傳送 5% 的流量。
  3. 如果修訂版本的成效令人滿意,請重複上述update-traffic步驟,但視需要提高百分比值。

YAML

您可以使用 gcloud run services describe 指令和 --format=export 標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

  2. 如要對服務進行任何設定變更,請參閱各個設定頁面,並為新修訂版本指定所需修訂版本名稱:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME 改成您要的新修訂版本名稱。
  3. 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,並將其替換為要傳送至舊版修訂內容的流量百分比

在多個修訂版本之間拆分流量

如要在兩個或多個修訂版本之間拆分流量,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出所需服務,然後按一下。

  3. 按一下「管理流量」

  4. 系統會列出目前提供服務的新版本。格式:

    1. 將目前放送的修訂版本百分比設為所需比例。
    2. 使用下拉式清單選取先前的修訂版本,並將其設為所需的百分比分割。
    3. 如要拆分更多修訂版本之間的流量,請按一下「新增修訂版本」,選取所需修訂版本,然後設定所需的拆分百分比。
    4. 按一下 [儲存]

指令列

在以半形逗號分隔的清單中,指定各修訂版本和流量百分比:

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 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

  2. 在您的本機檔案中,更新 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-AREVISION-BREVISION-C 以及您分配流量的修訂版本。
    • PERCENT-APERCENT-BPERCENT-C,以及相應修訂版本的百分比。
  3. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

將所有流量轉送至最新修訂版本

部署新修訂版本時,您可以盡快讓這個修訂版本和所有後續版本處理 100% 的流量,並覆寫所有已建立的流量拆分:

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出所需服務,然後按一下。

  3. 按一下「Deploy New Revision」(部署新修訂版本)

  4. 視需要填寫部署表單,並務必勾選標示為「立即提供這個修訂版本」的核取方塊。這項操作會覆寫所有現有的流量拆分,讓新修訂版本處理 100% 的流量。

  5. 按一下 [Deploy] (部署)

指令列

如要將所有流量傳送至最近部署的修訂版本,請執行下列操作:

gcloud run services update-traffic SERVICE --to-latest

SERVICE 改為服務名稱。

YAML

您可以使用 gcloud run services describe 指令和 --format=export 標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

  2. 在您的本機檔案中,更新 spec 底下的 traffic 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

使用標記進行測試、流量遷移和復原

部署服務後,您可以建立新修訂版本並指派標記,以便在特定網址存取修訂版本,而不提供流量。接著,您可以使用該標記,逐步將流量遷移至標記的修訂版本,並回溯標記的修訂版本。

這項功能的常見用途是在新服務修訂版本開始處理任何流量前,先進行測試和審查,一般順序如下:

  1. 在開發期間對容器執行整合測試。
  2. 將容器部署到僅用於暫存的 Google Cloud 專案,不放送任何流量,並針對已標記的修訂版本進行測試。
  3. 將其部署至正式環境,但不提供流量,並針對正式環境中標記的修訂版本進行測試。
  4. 將流量遷移至已標記的修訂版本。

部署新的標記修訂版本

如要將現有服務的新修訂版本部署至正式環境,請按照下列步驟操作:

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 檔案,開始將流量遷移至新版本:

控制台

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出所需服務,然後按一下:

  3. 選取要將流量傳送至哪個已標記的修訂版本:

  4. 按一下「管理流量」

  5. 找出已標記的修訂版本名稱:該名稱會列出,但設定的百分比為 0,表示目前未處理任何流量。在「Manage traffic」(管理流量) * 表單中:

    1. 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
    2. 按一下 [儲存]
    3. 視需要重複上述「管理流量」步驟,但要變更百分比,並視需要提高已標記修訂版本的百分比。您不需要重新部署,即可變更流量百分比。

指令列

如要將流量遷移至特定修訂版本標記,請按照下列步驟操作:

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 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

  2. 如要變更服務設定,請參閱各設定頁面的說明。

  3. 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,並將其替換為要傳送至舊版修訂內容的流量百分比
  4. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml