Cloud Deploy 服務架構

本文說明 Cloud Deploy 與外部系統之間的關係,這些系統會與 Cloud Deploy 搭配運作,以部署應用程式。這些系統是其他 Google Cloud 服務和第三方工具。

高階檢視畫面

下圖顯示 Cloud Deploy 與其所依附的個別系統之間的關係。

Cloud Deploy 元件之間的關係

如圖所示,Cloud Deploy 會與下列系統互動:

  • 您的 CI 系統

    只要 CI 程序能輸出對 Cloud Deploy APICLI 的呼叫,即可建立版本,因此 Cloud Deploy 支援大多數 CI 工具。

  • Cloud Build

    Cloud Deploy 會呼叫 Cloud Build 算繪資訊清單,並部署至目標執行階段。

  • Skaffold

    Cloud Deploy 會透過 Cloud Build 使用 Skaffold 算繪及部署資訊清單,進而部署應用程式。

  • Cloud Storage

    Cloud Deploy 會將算繪來源和算繪資訊清單儲存在 Cloud Storage bucket 中。

  • Google Cloud ObservabilityCloud 稽核記錄

    Google Cloud Observability 會收集 Cloud Deploy 的記錄資料並提供存取權。

    另請參閱「稽核記錄」。

  • Pub/Sub

    Cloud Deploy 會將訊息發布至多個 Pub/Sub 主題。您可以透過這項服務與外部工作流程、測試和其他相關系統整合。

    詳情請參閱「訂閱 Cloud Deploy 通知」。

  • 目標執行階段

    Cloud Deploy 會透過 Cloud Build,將應用程式部署至目標執行階段 (GKE、Cloud Run 或自訂目標)。skaffold apply

Cloud Deploy 資源

下圖顯示 Cloud Deploy 用於交付應用程式的資源,以及這些資源之間的關係:

Cloud Deploy 資源之間的關係

如圖所示,資源之間的關係如下:

  • 推送管道可產生零或多個版本,並參照一或多個目標,包括多部署目標及其相關聯的子目標

  • 傳送管道也可以參照一或多項自動化作業,自動對 Cloud Deploy 資源執行動作。

  • 每個版本都包含管道執行個體,也就是在建立版本時,推送管道和目標的「快照」。

  • 每個版本可產生零或多個推出作業, 並可參照零或多個構件。

    每個推出作業至少包含一個階段,代表推出作業中邏輯上歸為一組的作業 (工作) 集合,例如部署或部署及驗證。

    每個階段都包含一或多個工作,代表要在推出作業中執行的動作,也就是部署或驗證。每項工作可包含一或多個工作執行作業 (即工作執行個體),例如部署嘗試。工作執行是推出作業的子項資源。

    多目標用於平行部署,會建立控制器推出作業,進而建立子項推出作業,對應至子項目標。

  • 每個推出作業都會與一個目標相關聯。

    如果是平行部署,每個子項目標都會與一個子項推出作業建立關聯。

  • 每個目標都與一個 GKE 叢集或應用程式的其他執行階段目的地相關聯。

  • 目標可以與一或多個推送管道建立關聯。

  • 構件是持續整合程序中的任何輸出內容 (例如容器映像檔),會部署至目標執行階段,做為推出程序的一部分。

此外,推出作業包含一或多個階段,而階段則包含一或多個工作和一或多個工作執行作業。

推出作業資源

如圖所示,推出作業包含下列步驟:

  • 階段

    一個階段包含一或多個作業 (例如部署,或部署及驗證)。 每個推出作業都有一或多個階段。階段是推出程序中的子訊息。

  • 工作

    要在推出作業中執行的特定作業,例如部署或驗證。作業是推出作業中的子訊息。

  • JobRuns

    工作例項,例如驗證嘗試。每個工作可以有零或多個 JobRun。JobRun 是推出作業的子項資源。

自動化作業包含自動化作業規則,可供零或多個 AutomationRun 資源參照。AutomationRun 是已執行的自動化規則執行個體,例如從一個目標自動升級至另一個目標。Automation 和 AutomationRun 資源是傳送管道下方的同層子項資源。

自動化資源

如何搭配使用這些工具來發布版本

本節說明 Cloud Deploy 如何與本文列出的元件互動,自動將應用程式提交為版本

  1. 持續整合系統會叫用 Cloud Deploy 推送管道。

    您的 CI 程序會使用 CLIAPI 呼叫 Cloud Deploy,藉此建立新版本,並傳遞建構構件或映像檔參照。

    如要進一步瞭解如何整合 CI 系統,請參閱「整合 Cloud Deploy 與其他系統」。

  2. 建立新版本時,Cloud Deploy 會執行下列動作:

    1. 將推送管道的執行個體儲存為版本的一部分。

      即使變更推送管道設定,這個管道執行個體也不會受到影響。詳情請參閱「每個版本的管道執行個體」。

      此外,工具版本會儲存為發行版本的一部分。在大多數情況下,這會是預設工具版本,但由於您可以指定其他版本,因此系統會儲存該資訊。

    2. 呼叫 Cloud Build,從 Cloud Storage 取得 Skaffold 算繪來源。

      Cloud Deploy 會將算繪來源儲存在預設或替代的 Cloud Storage bucket 中。

    3. 呼叫 skaffold diagnose (使用建立版本時儲存的 Skaffold 版本),產生單一有效資訊清單。

    4. 呼叫 render 運算。

      如果您使用內建目標,Cloud Deploy 會呼叫 skaffold render,使用提供的映像檔或建構成果轉譯資訊清單。Cloud Deploy 會將 spec.templates.spec.containers.image 中的映像檔名稱,替換為 gcloud deploy releases create 指令或該指令參照的建構作業構件檔案中提供的完整映像檔路徑 (包括摘要或標記)。

      如果您使用自訂目標,Cloud Deploy 會呼叫為自訂目標類型定義的 render 作業

      Cloud Deploy 會將算繪的資訊清單儲存在預設或替代的 Cloud Storage 值區中。

      Cloud Deploy 會使用預設或替代執行環境執行這些動作。

  3. 建立推出作業時 (在建立版本後自動建立,或稍後視需要建立),Cloud Deploy 會執行下列作業:

    1. 呼叫預先部署的掛鉤 (如有指定)。

      如果您使用金絲雀部署策略,系統會在第一階段開始時呼叫前置部署掛鉤。

    2. 呼叫 deploy 運算。

      如果您使用內建目標,Cloud Deploy 會呼叫 skaffold apply,自動建立並將推出作業部署至第一個目標。如果您使用內建目標,系統會在建立版本時自動建立首次推出作業。

      如果您使用自訂目標,Cloud Deploy 會自動為第一個目標建立推出作業,並呼叫為自訂目標類型定義的 deploy 作業

      如果是內建目標和自訂目標,只有透過指令列建立版本時,系統才會自動推出至第一個目標。

      部署至第一個目標的程序與宣傳活動相同,請參閱下一個步驟。

    3. 如果推送 pipeline 設定中的目標為 verify,且在 Skaffold 設定中指定驗證,則會呼叫 skaffold verifytrue

    4. 如果指定 verify,則在 verify 之後呼叫部署後掛鉤 (如有指定)。否則,部署後勾點會在 deploy 後呼叫。

      如果您使用初期測試版部署策略,系統會在最終推出階段的最後一項工作中執行部署後掛鉤。

  4. 當您要將版本推送至下一個目標時,Cloud Build 會從 Cloud Storage 擷取目標專屬資訊清單。接著,Cloud Build 會叫用 skaffold apply,將算繪的資訊清單套用至指定的目標執行階段。

    如果目標需要核准,您可以透過 CLI 或使用控制台核准或拒絕。

    此外,Cloud Deploy 會產生 Pub/Sub 訊息,您可以訂閱這類訊息,自動啟動核准工作流程

    Cloud Deploy 會使用與這個版本相關聯的 Skaffold 版本和管道例項,並在預設或自訂執行環境中執行這個步驟。

    這個程序不僅適用於升級,也適用於回溯和重新部署。

  5. 在 Cloud Deploy 作業期間,服務會將通知發布至多個 Pub/Sub 主題 (例如,當推出作業需要核准時)。

    如要進一步瞭解這項和其他整合服務,請參閱「整合 Cloud Deploy 與外部系統」。

  6. 您可以指定自動化作業,在放送管道中自動執行各種作業。這些動作會在指定時間執行。 automationRun 代表自動化規則的執行作業。

  7. 在 Cloud Deploy 運作期間,服務會將平台記錄和稽核記錄寫入 Google Cloud Observability 和 Cloud 稽核記錄。

在所有這些步驟中,系統都會使用 Identity and Access Management 限制流程控制和資源存取權。

後續步驟