同時部署至多個目標

使用 Cloud Deploy 時,您可以部署至設定為代表多個目標的目標,應用程式會平行 (同時) 部署至這些目標。您在管道中識別為階段的目標稱為「多部署目標」,而多部署目標包含的目標則稱為「子目標」

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

為什麼要使用平行部署

舉例來說,您可以透過平行部署,將應用程式部署到多個實際工作環境目標。在本例中,您不需要依序部署至每個目標,因為沒有進展 (例如從開發環境到測試環境,再到正式環境)。

這個平行部署作業可以是一般交付管道進展的一部分:
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...]

平行部署作業使用的 Cloud Deploy 資源

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

  • 多個目標

    多重目標是指使用 multiTarget 屬性設定的目標,位於目標設定 YAML 的頂層,且會參照一或多個其他目標 (使用 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 附加叢集

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 檔案中...

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

  • MEMBERSHIP_NAME 是您將叢集註冊至機群時選擇的名稱。

自訂目標

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 或全為 Cloud Run)。

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

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

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

  • 如果子項目標為「自訂目標」,則所有目標都必須參照同一個 CustomTargetType

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

    部署至多重目標時,所有子項推出作業都會同時部署,但不得超過 Cloud Build 並行限制。如果子項目標數量超過上限,部分目標的部署作業會等到其他目標完成後才會執行,也就是說,Cloud Deploy 不會同時部署至所有子項目標。

    此外,如果目標包含驗證工作,則在應用程式部署至所有子目標之前,可能已開始執行一或多個驗證工作。

    如需同時部署至的目標數量超過 Cloud Build 說明文件中指定的上限,您有兩種做法:

執行環境和平行部署

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

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

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

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

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

復原平行部署作業

如要從多個平行目標復原部署作業,請按照「復原目標」一文所述,復原多個目標。

平行部署的核准程序

與任何目標一樣,您可以將平行部署設定為需要核准。 但如果是平行部署,您只能在多重目標上設定核准。核准或拒絕會一併影響所有子項目標。

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

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

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

版本檢查工具中,您可以查看及比較子推出作業的已算繪資訊清單。

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

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

後續步驟