運用 Oracle Cloud Infrastructure DevOps 部署以 Helm 為基礎的應用系統

快速交付軟體,是有效率地在雲端執行應用系統的必備要素。搭配管線部署的自動化軟體發行版本可提高開發者的生產力,讓您能夠更頻繁地發行功能,並且減少發生的錯誤。它可協助避免在部署期間停機,並讓更新應用程式的複雜性自動化。

Oracle Cloud Infrastructure DevOps 服務為開發人員提供端對端的持續部署體驗。Oracle Cloud Infrastructure DevOps 服務包含部署管線,可將連續的軟體傳遞和部署程序 (CD) 自動化為 Oracle Cloud Infrastructure (OCI) 平台:Oracle Cloud Infrastructure Container Engine for KubernetesOracle FunctionsOracle Cloud Infrastructure Compute 執行處理。

客戶如果要將工作負載從企業內部部署或其他雲端移轉至 OCI,以及在 OCI 上開發新應用系統,可以使用 Oracle Cloud Infrastructure

架構

此架構示範使用 Oracle Cloud Infrastructure (OCI) DevOps 服務從程式碼儲存區域部署 Helm 圖表的範例 NodeJS 應用程式。應用程式已部署至 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 叢集。為了簡化流程,我們使用 Terraform 來進行基礎架構自動化。

下圖說明此參考架構。

deployment-helm-based-app.png 的描述如下
deployment-helm-based-app.png 圖解描述

deployment-helm-app-oracle.zip

架構具有下列元件:

  • 區域

    Oracle Cloud Infrastructure 區域是一個包含一或多個資料中心 (稱為可用性網域) 的本地化地理區域。區域與其他區域無關,而且遠距離也能分隔它們 (跨國家或甚至大陸)。

  • 虛擬雲端網路 (VCN) 和子網路

    VCN 是您在 Oracle Cloud Infrastructure 區域中設定的可客製化的軟體定義網路。與傳統資料中心網路一樣,VCN 可讓您完整控制您的網路環境。VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 之後變更這些區塊。您可以將 VCN 區段成子網路,可以將範圍擴展到區域或可用性網域。每個子網路都包含一個連續的位址範圍,這些位址不會與 VCN 中的其他子網路重疊。您可以在建立子網路後變更其大小。子網路可以是公用或專用。

  • OCI DevOps 專案

    OCI DevOps 專案是導入持續整合與部署 (CI/CD) 工作負載所需之資源的邏輯群組。OCI DevOps 資源可以是使用者自建物件、部署管線以及環境。OCI DevOps 專案可讓您輕鬆啟用 OCI DevOps 資源的記錄、監控及通知。

  • 組建管線

    組建管線會從您的原始程式碼儲存區域取得確認 ID,然後使用該原始程式碼執行您的組建指示。組建管線可定義一組組建處理作業的階段:建置、測試和編譯軟體使用者自建物件、提供使用者自建物件至 OCI 儲存區域及選擇性觸發部署。您可以在組建規格檔案中定義組建執行的流程和指示。

  • 建立階段

    組建階段指的是在執行組建管線時發生的個別動作。OCI DevOps 組建管線包含三個階段:
    1. Build Container:執行 build_spec.yaml 指示以編譯、建置及準備必要的使用者自建物件。
    2. 上傳使用者自建物件:上傳所有已準備的使用者自建物件 (例如停駐程式映像檔) 會推送至已設定的 Oracle Cloud Infrastructure Registry 儲存區域。
    3. 觸發部署:觸發部署管線以將變更套用至設定的 OKE。
  • 部署管線

    部署管線會保留必須滿足的需求,才能將一組使用者自建物件傳遞至環境。管線包含階段,亦即管線的建置區塊。「管線」可以具有序列或平行執行的階段,因此您可以控制軟體發行版本的流程和邏輯。

  • 部署階段

    階段是執行管線期間發生的個別動作。OCI DevOps 部署管線只包含一個名稱為 Deploy Helm 的預先定義階段,可使用 Helm 圖表部署 Kubernetes 應用程式。Helm 圖表 URL 和選擇性的 values.yaml 檔案 OCI DevOps 使用者自建物件都以引數形式傳送至「部署 Helm」階段。在執行期間,部署 Helm 階段會從 Oracle Cloud Infrastructure Registry 擷取 Helm 圖表,並視需要提供的 values.yaml 檔案套用至設定的 OKE OCI DevOps 環境。

  • DevOps 使用者自建物件

    OCI DevOps 使用者自建物件是一種任何構成您應用程式之檔案、二進位、套裝程式、資訊清單或映像檔的參照或指標。建立使用者自建物件時,您必須通知 OCI DevOps 實際使用者自建物件的來源位置。OCI DevOps 支援 OCI 容器登錄和 OCI 使用者自建物件登錄儲存區域。

  • 使用者自建物件儲存區域

    「使用者自建物件儲存區域」會建立群組相似使用者自建物件的儲存區域。您可以在建立使用者自建物件之後,將使用者自建物件上傳到儲存區域。這些使用者自建物件是將傳遞至目標部署環境的文字檔、二進位檔以及部署資訊清單的集合。每個使用者自建物件都有其路徑所組成的名稱:版本。路徑是組織使用者自建物件的字串。

  • Helm

    Helm 是 Kubernetes 的套裝程式管理程式,可將應用程式部署視為一組 Helm 圖表進行管理,讓您輕鬆管理各種個別服務和生命週期。

    Oracle Linux 的 Helm 模組將 Helm 安裝到 Kubernetes 模組 (叢集)。

  • Helm Chart

    Kubernetes YAML 清單結合成單一套裝軟體,可部署至 Kubernetes 叢集。Helm Chart 包含 Kubernetes YAML 清單檔案的樣板,以及提供預設樣板值的 values.yaml 檔案。使用 Helm 圖表來部署應用程式或大型應用程式的一個元件。

  • OCI 日誌記錄和 OCI 通知服務

    Oracle Cloud Infrastructure 日誌記錄和 Oracle Cloud Infrastructure Notifications 服務儲存與部署相關的日誌。部署執行時間輸出與部署的最終結果會顯示為日誌項目。OCI 通知服務可查看部署專案與其資源的最新狀態,並採取任何必要的動作。

  • 部署環境

    環境是部署使用者自建物件之客戶運算資源的集合。環境可以是功能、運算虛擬機器 (VM) 或裸機執行處理或 OKE 叢集。

    • Oracle Kubernetes 叢集 (OKE):OCI Container Engine for Kubernetes 是一項完全託管、可擴展且高可用性的服務,可用來將容器化應用系統部署至雲端。

    • 運算執行處理:OCI 運算服務可讓您在雲端佈建及管理運算主機。您可以透過資源配置啟動運算執行處理,滿足您的 CPU、記憶體、網路頻寬及儲存資源需求。

    • 函數:Oracle Functions 是一個完全受管理、多租用戶、高擴展性、隨選函數即服務平台。此服務是以企業級 OCI 為基礎,由 Fn 專案開源引擎提供技術支援。

    此架構使用 OKE 叢集作為環境。環境可以和部署管線區域不同的 OCI 區域。這可讓開發者使用相同的部署管線在多個 OCI 區域中部署。

建議

使用下列建議作為起點。您的需求可能與此處所述的架構不同。
  • VCN

    建立 VCN 時,請根據計畫要在 VCN 中連附至子網路的資源數目,決定所需的 CIDR 區塊數目與每個區塊的大小。使用標準專用 IP 位址空間內的 CIDR 區塊。

    建立 VCN 之後,您可以變更、新增以及移除其 CIDR 區塊。

    此架構使用公用 VCN 來代管 OKE 叢集。您也可以使用專用 VCN。在此情況下,請使用 NAT 閘道讓叢集透過公用網際網路存取。

  • 運算型態

    此架構使用 Oracle Linux 作業系統映像檔,其中含有最少資源的 E4 彈性資源配置來代管 OKE 叢集節點中的運算主機。如果您的應用程式需要更多記憶體或核心,您可以選擇不同的資源配置。

  • Kubernetes (Oke)

    此架構以目標端點部署至 OKE 叢集。工作節點是部署在 E4 Oracle Linux 作業系統上。此架構使用叢集中的三個工作節點,但在每個叢集上最多可建立 1,000 個節點。

  • 容器映像檔登錄

    此架構會將 Registry 部署為專用的 Docker 登錄供內部使用。Docker 映像檔會推送至登錄,並從中提取。您也可以使用 Registry 作為公用 Docker 登錄,讓具備網際網路存取及知識的使用者能夠在 Oracle Cloud 中從公用儲存區域提取映像檔。在此架構中,相同的容器登錄也可用來儲存 Helm 圖表。

  • 使用者自建物件登錄

    此架構會為 OKE 叢集使用的軟體和組態建立使用者自建物件。此架構會建立供內部使用的使用者自建物件登錄儲存區域。軟體二進位檔、文字和部署組態會上傳至使用者自建物件登錄儲存區域並下載。

注意事項

部署此參考架構時,請考量下列各點。

  • Oracle Cloud Infrastructure DevOps 支援的部署

    DevOps 支援 Kubernetes (OKE)、運算主機以及 Oracle Functions 的部署。此架構使用 Helm 圖表部署至 OKE 叢集。請考慮根據需求部署至其他端點。

  • 支援的主機

    Oracle Cloud Infrastructure Compute 執行處理的執行處理群組部署只支援 Linux 主機。

  • 使用者自建物件

    要與 Oracle Cloud Infrastructure DevOps 一起部署的使用者自建物件必須在 Oracle Cloud Infrastructure Artifacts Registry 或容器映像檔登錄儲存區域中。

  • 專案

    最佳做法是將每個應用程式及其所有微服務組成單一專案。

部署

GitHub 提供此參照架構的 Terraform 程式碼。

  • 使用 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊進行部署:
    1. 按一下 部署至 Oracle Cloud

      如果您尚未登入,請輸入租用戶和使用者證明資料。

    2. 選取要部署堆疊的區域。
    3. 遵循螢幕上的提示與指示來建立堆疊。
    4. 建立堆疊之後,按一下 Terraform 動作,然後選取計畫
    5. 等待工作完成,然後複查計畫。

      若要進行變更,請返回「堆疊詳細資訊 (State Details)」頁面,按一下編輯堆疊 (Edit Stack) ,然後進行必要的變更。然後再執行計畫動作。

    6. 如果不需要進一步的變更,請返回「堆疊詳細資訊」頁面,按一下 Terraform 動作,然後選取套用
  • 使用 GitHub 中的 Terraform 程式碼部署:
    1. 前往 GitHub
    2. 複製或下載儲存庫至本機電腦。
    3. 依照 README 文件中的指示進行。

確認

作者:Ashok Raja CM

貢獻者:Saurabh Shah、Lukasz Feldman