本文說明如何設定及使用 Canary 部署策略。
什麼是初期測試部署?
初期測試部署是指逐步推出應用程式,在已部署的版本和新版本之間分配流量,先向部分使用者推出,然後再全面推出。
支援的目標類型
Cloud Deploy 中的初期測試部署支援所有目標類型,包括:
Google Kubernetes Engine 和 GKE Enterprise
Cloud Run (僅限服務,不含作業)
Canary 也適用於多重目標。
為什麼要使用初期測試部署策略?
初期測試部署可讓您部分發布應用程式。這樣一來,您就能確保新版應用程式穩定可靠,再向所有使用者發布。
舉例來說,如果您要部署至 GKE 或 GKE Enterprise,可以將新版應用程式部署至數量有限的 Pod。舊版會繼續執行,但更多流量會傳送至新 Pod。
如果您要部署至 Cloud Run,Cloud Run 本身會根據您設定的百分比,在舊版和新版之間分配流量。
Canary 類型
Cloud Deploy 可讓您設定下列類型的 Canary 部署:
自動
使用自動化 Canary 部署 (適用於服務聯網、Gateway API 或 Cloud Run),您可以在 Cloud Deploy 中設定一系列百分比,表示漸進式部署。Cloud Deploy 會代表您執行其他作業,在舊版和新版之間分配流量百分比。
自訂自動化
如果是自訂自動化 Canary (適用於服務網路、Gateway API 或 Cloud Run),您可以提供下列項目:
- 階段名稱
- 百分比目標
- 階段要使用的 Skaffold 設定檔
- 是否要納入驗證工作
- 是否要加入部署前或部署後的工作,或兩者皆要
但您不需要提供流量平衡資訊;Cloud Deploy 會建立必要的資源 (適用於服務網路、閘道 API 或 Cloud 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
狀態。
後續步驟
瞭解如何管理 Canary 推出作業的生命週期。
請前往適用於特定目標環境的指南: