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 值區中。

  • Google Cloud ObservabilityCloud 稽核記錄

    Google Cloud Observability 會收集 Cloud Deploy 的記錄資料並提供給您。

    另請參閱「稽核記錄」。

  • Pub/Sub

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

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

  • 目標執行階段

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

Cloud Deploy 資源

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

Cloud Deploy 資源之間的關係

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

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

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

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

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

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

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

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

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

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

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

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

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

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

推出作業資源

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

  • 階段

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

  • 工作

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

  • JobRuns

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

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

自動化資源

如何搭配運作來發布版本

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

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

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

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

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

    1. 將推送 pipeline 的執行個體儲存為發布版本的一部分。

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

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

    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. 呼叫 skaffold verify,如果 verify 是推送管道中目標的 設定true,且 Skaffold 設定中指定了驗證

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

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

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

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

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

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

    不只促銷活動,回溯和重新部署也適用這個程序。

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

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

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

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

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

後續步驟