使用初期測試部署策略

本文說明如何設定及使用 Canary 部署策略。

什麼是初期測試部署?

初期測試部署是指逐步推出應用程式,在已部署的版本和新版本之間分配流量,先向部分使用者推出,然後再全面推出。

支援的目標類型

Cloud Deploy 中的初期測試部署支援所有目標類型,包括:

Canary 也適用於多重目標

為什麼要使用初期測試部署策略?

初期測試部署可讓您部分發布應用程式。這樣一來,您就能確保新版應用程式穩定可靠,再向所有使用者發布。

舉例來說,如果您要部署至 GKE 或 GKE Enterprise,可以將新版應用程式部署至數量有限的 Pod。舊版會繼續執行,但更多流量會傳送至新 Pod。

如果您要部署至 Cloud Run,Cloud Run 本身會根據您設定的百分比,在舊版和新版之間分配流量。

Canary 類型

Cloud Deploy 可讓您設定下列類型的 Canary 部署:

  • 自動

    使用自動化 Canary 部署 (適用於服務聯網Gateway APICloud Run),您可以在 Cloud Deploy 中設定一系列百分比,表示漸進式部署。Cloud Deploy 會代表您執行其他作業,在舊版和新版之間分配流量百分比。

  • 自訂自動化

    如果是自訂自動化 Canary (適用於服務網路Gateway APICloud Run),您可以提供下列項目:

    • 階段名稱
    • 百分比目標
    • 階段要使用的 Skaffold 設定檔
    • 是否要納入驗證工作
    • 是否要加入部署前或部署後的工作,或兩者皆要

    但您不需要提供流量平衡資訊;Cloud Deploy 會建立必要的資源 (適用於服務網路閘道 APICloud Run)。

  • 自訂

    使用自訂 Canary 時,您可以分別設定每個 Canary 階段,包括:

    • 階段名稱
    • 百分比目標
    • 階段要使用的 Skaffold 設定檔
    • 是否要納入驗證工作
    • 是否要加入部署前或部署後的工作,或兩者皆要

    此外,如果是完全自訂的 Canary,您需要提供所有流量平衡設定。

    自訂 Canary 支援所有目標類型

初期測試部署的階段

為 Canary 部署建立版本時,系統會為每個 Canary 增量建立一個階段,並為 100% 建立最終的 stable 階段。

舉例來說,如果您將初期測試設定為 25%、50% 和 75% 的增量,則推出作業會經歷下列階段:

  • canary-25
  • canary-50
  • canary-75
  • stable

如要進一步瞭解推出階段、工作和工作執行,請參閱「管理推出作業」。

搭配初期測試部署策略使用平行部署

您可以使用平行部署執行初期測試部署。 也就是說,您逐步部署的目標可以包含兩個以上的子目標。舉例來說,您可以同時向不同區域的叢集逐步部署。

平行 Canary 與單一目標 Canary 有何不同

  • 與單一目標 Canary 部署作業相同,如果您要部署至 GKE 目標,資訊清單中必須有 Kubernetes Deployment 設定和 Kubernetes Service 設定。

  • 與單一目標初期測試部署作業相同,推送管道設定必須在適用階段的階段定義中包含 strategy.canary 節。

  • 此外,您需要設定多部署目標,並設定多部署目標參照的子目標

  • 建立版本時,系統會建立控制器推出作業子項推出作業

    控制器和子項這兩種推出類型,都會為所有已設定的 Canary 百分比分別進行階段,並為 Canary 100% 進行 stable 階段。

  • 您無法推進子項推出作業。

    您只能推進控制器推出作業。當您將控制器推出作業推進至下一個階段時,Cloud Deploy 也會推進子項推出作業。

  • 您無法在控制器推出作業中重試失敗的工作。

    您只能在子項推出作業中重試工作。

  • 您無法忽略控制器推出作業中失敗的工作。

    您只能忽略子項推出作業中失敗的工作。

  • 您可以取消控制器推出作業,但無法取消子項推出作業。

  • 您只能在子項推出作業中終止工作執行,無法在控制器推出作業中終止。

如果平行推出作業在 Canary 中失敗,該怎麼辦?

如果子項推出作業失敗,控制器推出作業可能會轉換為不同狀態,視子項推出作業的狀況而定:

  • 如果一或多項子項推出作業失敗,但至少有一項子項推出作業仍為 IN_PROGRESS,控制器推出作業仍為 IN_PROGRESS

  • 如果一或多項子項推出作業失敗,但至少有一項成功,且目前階段後還有其他階段,則控制器推出作業會處於 HALTED 狀態。

    如果是 stable 階段,控制器推出作業就是 FAILED

    HALTED 可讓您忽略重試失敗的子項推出作業中的失敗工作,或取消控制器推出作業,並防止對子項推出作業採取進一步動作。

  • 如果控制器推出作業因子項推出作業失敗而處於 HALTED 狀態,且您忽略子項推出作業中失敗的工作,控制器推出作業就會恢復為 IN_PROGRESS 狀態。

後續步驟