同時部署至多個目標

您可以使用 Cloud Deploy 部署至代表多個目標的目標,並將應用程式並行 (同時) 部署至這些目標。您在管道中指定為階段的目標稱為多部署目標,而多部署目標所包含的目標稱為子目標

您可以使用平行部署功能,搭配 Cloud Deploy 支援的任何目標類型。

為何要平行部署

舉例來說,您可以使用平行部署功能,將應用程式部署至多個正式發布目標。在這種情況下,您不需要依序部署至各個目標,因為沒有任何進展 (例如從開發、前置環境到實際環境)。

而這項並行部署作業可納入一般發布管道流程:
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...]

用於平行部署的 Cloud Deploy 資源

並行部署作業會使用下列 Cloud Deploy 專屬資源:

  • 多目標

    多目標是指在目標設定 YAML 的頂層,使用 multiTarget 屬性設定的目標。與參照執行階段叢集或服務不同,多目標會使用 multiTarget.targetIds 參照一或多個其他目標。

  • 子目標

    子目標是指多部署目標以 multiTarget.targetIds 形式參照的任何目標。

  • 控制器推出作業

    控制器推出作業是對應多個目標的推出作業。

    如要進一步瞭解控制器的發布作業可做和不可做的事情,請參閱「限制」。

  • 子版本發布作業

    如要進一步瞭解子版本的使用限制,請參閱「限制」一節。

設定並行部署

設定並行部署作業,包括定義一個多部署目標和所需的子目標數量 (最多為限制)。目標定義與所有目標相同,但以下例外:

  • 多個目標包含 multiTarget 屬性。
  • 子目標不包含 multiTarget 屬性,但會透過 multiTarget.targetIds 屬性從多部署目標參照。
  • 您可以設定多個目標進行核准,但無法設定子目標,因為子目標無法包含 requireApproval:true

多部署目標和子目標可以包含自訂的執行環境設定。如果子目標未指定執行環境,則會繼承多部署目標定義中定義的環境,或預設值。詳情請參閱「執行環境和平行部署」。

設定多目標

多部署目標是指在推送管道中,以單一目標的形式識別,但指向一或多個子目標。

多目標設定包含 multiTarget 屬性。多目標不得包含 gkerunanthosCluster 屬性。無論您要部署至哪個執行階段,多目標的設定都相同。

在推送管道 YAML 或個別的 YAML 檔案中,建立基本目標定義,包括 multiTarget

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: TARGET_NAME
description: TARGET_DESCRIPTION
multiTarget:
 targetIds: [ CHILD_TARGET1, CHILD_TARGET2, CHILD_TARGETn ]

在這個 YAML 中...

  • TARGET_NAME 是這個多重目標的名稱,用於提交管道定義stages.targetId 屬性。

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn 是這個多部署目標部署至的子目標名稱。每個名稱都對應至子項目標定義中的 name 屬性。

multiTarget.targetIds 屬性會將這個目標設為多重目標。

設定子目標

針對多部署設定中標示為子項的每個目標,設定另一個目標做為子目標:

推送管道 YAML 或個別的 YAML 檔案中,建立基本目標定義:

GKE

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
gke:
 cluster: projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME

在這個 YAML 中...

  • CHILD_TARGET1 是這個子目標的名稱。名稱會對應至多目標定義multiTarget.targetIds 屬性目標清單中的一個成員。

  • gke.cluster 屬性的值是這個目標參照的叢集資源名稱,包括專案 ID、區域和叢集名稱。

這個目標的設定與標準 GKE 目標相同。唯一使其成為子目標的情況,是多部署目標中的 multiTarget.targetIds 屬性參照了這個目標。

Cloud Run

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
run:
 location: projects/PROJECT_ID/locations/REGION

在這個 YAML 中...

  • CHILD_TARGET1 是這個子目標的名稱。名稱會對應至多目標定義multiTarget.targetIds 屬性目標清單中的一個成員。

  • run.location 屬性的值是這個目標參照的 Cloud Run 服務資源名稱,包括專案 ID 和區域。

這個目標的設定與標準 Cloud Run 目標相同。唯一使其成為子目標的情況,是多部署目標中的 multiTarget.targetIds 屬性參照了這個資源。

GKE Enterprise

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
anthosCluster:
 membership: projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME

在這個 YAML 中...

自訂目標

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
customTarget:
  customTargetType: CUSTOM_TARGET_TYPE_NAME

在這個 YAML 中...

  • CHILD_TARGET1 是這個子目標的名稱。名稱會對應至多目標定義multiTarget.targetIds 屬性目標清單中的一個成員。

  • CUSTOM_TARGET_TYPE_NAME 是這個目標使用的自訂目標類型名稱。

將部署參數傳遞至目標

您可以在資訊清單中加入參數,並在提交管道定義中加入值,藉此區分子目標。這些值可以根據對應目標的標籤比對結果,個別套用至個別資訊清單。

舉例來說,您可能希望為每個子目標建立不同的副本數量。如要這麼做,請在提交管道的進度中加入參數和值,以及子目標的標籤,以便比對每個參數值組合。

進一步瞭解部署參數

建立版本

設定多目標和子目標後,請建立推送管道和目標資源,然後照常建立版本。

推送管道的生命週期與任何 Cloud Deploy 管道和目標相同,但在進入多重目標階段時,Cloud Deploy 會為多重目標建立控制器推播,並建立子推播,將應用程式部署至每個子目標。

回應 Cloud Deploy 作業的 Pub/Sub 訊息會區分控制器推出作業和子項推出作業。

限制

  • 多部署目標最多只能有 100 個子目標。

  • 單一多部署目標的所有子目標都必須使用相同的目標執行階段 (例如,所有 GKE 或所有 GKE Enterprise)。

  • 在推送管道中,子目標只能有一個多部署目標父項。

  • 多部署目標不能沒有子項,也不能將自身或其他多部署目標做為子目標。

  • 您無法在單一推送管道中使用子目標多次,但可以在不同管道中重複使用。

  • 如果子目標是「自訂目標」,則所有子目標都必須參照相同的 CustomTargetType

  • 預設集區有並行限制,但私人集區則沒有。

    當您部署至多個目標時,所有子項的推出作業都會同時進行,最多可達 Cloud Build 並行處理限制。如果子目標數量超過此限制,部分目標的部署工作會在其他目標完成後才執行,也就是說,Cloud Deploy 不會同時部署至所有子目標。

    此外,如果目標包含驗證工作,則在應用程式部署至所有子目標之前,可能會先啟動一或多個驗證工作。

    如果您需要同時部署至比 Cloud Build 說明文件中所述上限更多的目標,有兩種方法可供選擇:

執行環境和平行部署

每個目標都可以設定為使用非預設執行環境。

  • 如果多部署目標具有非預設執行環境,所有使用預設執行環境的子目標,都會從多部署目標繼承非預設執行環境

  • 如果多部署目標使用預設執行環境,則任何以非預設執行環境設定的子目標都會使用該非預設執行環境。

這些規則可讓您更輕鬆地將執行環境從多部署目標傳播至子目標,因此您不必為每個子目標定義或變更執行環境,但仍可視需要為一或多個子目標自訂執行環境。

如要進一步瞭解 Cloud Deploy 中的執行環境,請參閱「使用 Cloud Deploy 執行環境」。

復原並行部署

如果您需要從多個平行目標中回復部署作業,請參閱「回復目標」一文,瞭解如何回復多個目標。

平行部署的核准

如同其他目標,您可以將平行部署作業設為需要核准。不過,如果是並行部署,您只能在多目標上設定核准。核准或拒絕會同時影響所有子目標。

在 Google Cloud 控制台中查看平行部署作業

您可以在 Google Cloud 控制台中查看多個目標、子目標、控制器推播和子推播的詳細資料。

查看特定推送管道的目標清單時,在「推送管道詳細資料」中,系統會列出多部署目標,但不會列出子目標。不過,您可以查看版本詳細資料,瞭解控制器推出作業和子項推出作業。您也可以在「推送管道」詳細資料頁面的「推出作業」分頁中,查看控制器和子項推出作業。

您可以在版本檢查工具中查看子版本的轉換作業,並進行比對。

搭配部署策略使用並行部署

使用初期測試版部署策略時,您可以並行部署。詳情請參閱「使用平行部署功能搭配初期測試版部署策略」。

後續步驟